a
    ˆù»jò6 ã                   @   sÔ  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlZd d	lmZ d d
lmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZNmOZO G dd„ dƒZPG dd„ dePƒZQG dd„ dƒZRG dd„ deRƒZSG dd„ dƒZTdd„ ZUdd „ ZVd!d"„ ZWd#d$„ ZXG d%d&„ d&ƒZYG d'd(„ d(ƒZZG d)d*„ d*ƒZ[G d+d,„ d,ƒZ\g d-¢Z]e]eI7 Z]G d.d/„ d/ƒZ^G d0d1„ d1ƒZ_G d2d3„ d3ƒZ`G d4d5„ d5ƒZaG d6d7„ d7eaƒZbG d8d9„ d9eaƒZcG d:d;„ d;eaƒZdG d<d=„ d=eaƒZeG d>d?„ d?eaƒZfG d@dA„ dAeaƒZgG dBdC„ dCeaƒZhG dDdE„ dEeaƒZidFdG„ ZjdHdI„ Zke
jl mdJejnejoejpejqeOeNejrejrejsejtejueg¡G dKdL„ dLƒƒZvG dMdN„ dNƒZwe
jl mdOg dP¢¡e
jl mdQdRdSg¡e
jl mdTg dU¢¡dVdW„ ƒƒƒZxe
jl mdJejyejzej{g¡G dXdY„ dYƒƒZ|G dZd[„ d[ƒZ}G d\d]„ d]ƒZ~G d^d_„ d_ƒZG d`da„ daeƒZ€dbdc„ Z�dƒddde„Z‚dfdg„ Zƒdhdi„ Z„G djdk„ dkƒZ…G dldm„ dmƒZ†G dndo„ doƒZ‡G dpdq„ dqƒZˆG drds„ dsƒZ‰d„dudv„ZŠe
jl mdwe9e.f¡dxdy„ ƒZ‹e
jl mdJdz¡G d{d|„ d|ƒƒZŒG d}d~„ d~ƒZ�G dd€„ d€ƒZŽG d�d‚„ d‚ƒZ�dS )…é    N)ÚThreadPoolExecutorÚas_completed)ÚDecimal©Úproduct)Úgcd)Úraises)Úassert_equalÚassert_almost_equalÚassert_array_equalÚassert_array_almost_equalÚassert_allcloseÚassert_Úassert_array_lessÚsuppress_warnings)ÚarrayÚarange)Úfft)Úcorrelate1d)ÚfminÚlinear_sum_assignment)Úsignal)Ú	correlateÚcorrelate2dÚcorrelation_lagsÚconvolveÚ
convolve2dÚfftconvolveÚ
oaconvolveÚchoose_conv_methodÚhilbertÚhilbert2ÚlfilterÚ
lfilter_ziÚfiltfiltÚbutterÚzpk2tfÚzpk2sosÚinvresÚinvreszÚvectorstrengthÚlfilticÚtf2sosÚsosfiltÚsosfiltfiltÚ
sosfilt_ziÚtf2zpkÚBadCoefficientsÚdetrendÚunique_rootsÚresidueÚresiduez)Úhann)Ú_filtfilt_gustÚ_compute_factorsÚ_group_poles)Ú_upfirdn_modes)Ú
_testutils)ÚComplexWarningÚnp_longÚnp_ulongc                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú_TestConvolvec                 C   s0   g d¢}g d¢}t ||ƒ}t|tg d¢ƒƒ d S )N)é   é   é   é   rB   rA   ©é   é   r@   )r@   é
   é   é   é    rJ   é   é   ©r   r   r   ©ÚselfÚaÚbÚc© rS   úIE:\soccer\ml_env\Lib\site-packages\scipy/signal/tests/test_signaltools.pyÚ
test_basic'   s    
z_TestConvolve.test_basicc                 C   s4   g d¢}g d¢}t ||dd�}t|tg d¢ƒƒ d S )N©r@   rA   rB   )rE   rF   r@   rA   Úsame©Úmode)rG   rH   é"   rM   rN   rS   rS   rT   Ú	test_same-   s    z_TestConvolve.test_samec                 C   s4   g d¢}g d¢}t ||dd�}t|tg d¢ƒƒ d S )NrV   rD   rW   rX   )rG   rH   rH   rM   rN   rS   rS   rT   Útest_same_eq3   s    z_TestConvolve.test_same_eqc                 C   s8   t g d¢ƒ}t ddgƒ}t||ƒ}t|t g d¢ƒƒ d S )N)ù      ð?      ð?ù       @      ð?ù      @      ð?r]   r^   )ù               @y       @      @y      @       @y      @      @)r   r   r   )rO   ÚxÚyÚzrS   rS   rT   Útest_complex9   s    
z_TestConvolve.test_complexc                 C   s$   d}d}t ||ƒ}t||| ƒ d S )Ni	  i×  )r   r	   rN   rS   rS   rT   Útest_zero_rank?   s    
z_TestConvolve.test_zero_rankc                 C   st   t  d¡ ddd¡}t  d¡}tdƒD ]H}dgd }d||< t|| |¡dd�}t|| |¡dd�}t||ƒ q&d S )Né   r@   rE   Údirect©Úmethodr   )Únpr   ÚreshapeÚranger   r   )rO   rP   rQ   ÚiÚb_shapera   rb   rS   rS   rT   Útest_broadcastableE   s    

z _TestConvolve.test_broadcastablec                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S ©Nig  iP  )r   r   r	   rN   rS   rS   rT   Útest_single_elementO   s    


z!_TestConvolve.test_single_elementc                 C   sR   g d¢g d¢g}g d¢g d¢g}t ||ƒ}tg d¢g d¢g d¢gƒ}t||ƒ d S ©NrD   rV   ©rF   r@   rA   ©rA   rB   rC   )rF   é   é   é   rL   )rG   é   é>   é:   é&   )rL   é   rz   é1   rx   ©r   r   r   ©rO   rP   rQ   rR   ÚdrS   rS   rT   Útest_2d_arraysU   s    
þz_TestConvolve.test_2d_arraysc              	   C   s€  t dƒ ddd¡}dt dƒ ddd¡ }|t dƒd d d…  ddd¡7 }tg d¢g d¢g d	¢g d
¢gg d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢ggƒ}tt||dƒ|ƒ tt||dƒ|ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ d S )Né   rF   ù              ð?rf   r@   éÿÿÿÿ)ù                y      :@        y      9@      ð?y      8@       @)y      J@        y     àb@      @y      b@      &@y     @W@      &@)y      G@      @y      `@      7@y     À_@      =@y     @T@      7@)y      D@      (@y     €X@      @@y     @W@     €B@y      K@      8@)y      Z@        y     àn@      *@y      m@      7@y     à`@      5@)y      q@      >@y     Àƒ@      X@y     à‚@      _@y      t@     €U@)y     Àn@     €P@y      �@     €f@y     @€@      j@y      q@     À`@)y     Àa@     €P@y     0s@      d@y     r@     `f@y      c@     ÀZ@)y      Q@      B@y      c@     ÀY@y     `b@     @\@y     @T@     ÀR@)y     Àe@     @a@y     Àw@     Àu@y      v@     €w@y     @g@     Àl@)y     @a@     Àe@y     €r@      {@y     Àp@     À|@y     @a@     `q@)y     €Q@     @a@y      b@     0t@y     À_@     Pu@y     €O@      h@)y      @@      R@y      Q@     Àd@y     €M@     àe@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     €L@     ào@)y      C@     Àk@y     @R@     0@y     €I@     H€@y      5@     0r@)y      (@      b@y      4@     às@y      @     °t@y             Àf@ÚfullrW   rE   r   Úvalid)r   rk   r   r   r   )rO   ZsmallÚbigZ	out_arrayrS   rS   rT   Útest_input_swapping^   sP     ýýýýñÿÿÿÿÿz!_TestConvolve.test_input_swappingc                 C   sv   g d¢}g d¢}t tt||dd� t tt||ddd� t tt||dd	d� t tt||d
dd� t tt||ddd� d S ©NrV   rD   ZspamrX   Úeggsr   ©rY   ri   Zhamrg   r†   ÚbaconrW   ©Úassert_raisesÚ
ValueErrorr   ©rO   rP   rQ   rS   rS   rT   Útest_invalid_paramsƒ   s    z!_TestConvolve.test_invalid_paramsN)Ú__name__Ú
__module__Ú__qualname__rU   r[   r\   rd   re   ro   rq   r�   r‰   r’   rS   rS   rS   rT   r?   %   s   
	%r?   c                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚTestConvolvec                 C   sŒ   g d¢}g d¢}g d¢}t ||dƒ}t||ƒ t ||dƒ}t||ƒ g d¢}ddg}ddg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )	N)rE   rF   r@   rC   rB   r@   )	rF   r@   rA   rB   r@   rA   rF   rF   rE   )éF   éN   éI   éA   r‡   )y      ð?      @ù       @      ð¿y      @        ù       @      Àù      ð?        y       @      $À)r   r   ©rO   rP   rQ   ÚexpectedÚoutrS   rS   rT   Útest_valid_mode2�   s    


zTestConvolve.test_valid_mode2c                 C   s6   g d¢}g d¢}t ||dƒ}tg d¢ƒ}t||ƒ d S )N)rE   rF   r@   r@   rE   rF   )rE   rA   r@   rA   rB   rC   ru   rA   r@   rF   rE   rE   r@   rW   )é9   é=   é?   r¢   é-   é$   r~   r   rS   rS   rT   Útest_same_mode¥   s
    zTestConvolve.test_same_modec                 C   sh   t  dd¡ d¡}t  dd¡ d¡}tttg||f¢R i ddi¤Ž tttg||f¢R i ddi¤Ž d S ©	NrE   ru   ©rF   r@   éúÿÿÿr   ©r@   rF   rY   r‡   )rj   r   rk   r�   r�   r   r‘   rS   rS   rT   Útest_invalid_shapes¬   s     z TestConvolve.test_invalid_shapeséd   c                    sd  h d£‰‡fdd„ˆD ƒ}t j d¡ t jjddg|d�t j |¡dœ}|d	  |d
< |d< |d d|d   |d< |D ]æ\}}‰ |t  |¡j  |¡‰|t  |¡j  |¡‰‡ ‡‡fdd„dD ƒ}t|d j|d jƒ d|v rüd|v rütt	ˆˆƒdƒ qxt
dd„ ||fD ƒƒ�r dddœ}n$d||fv �r:dddœ}n
dddœ}t|d |d fi |¤Ž qxd S )N>   Zuint8Zint8Ú
complex128Zint16Úfloat64ÚboolÚint64Zint32Zuint64Úfloat32Ú	complex64Zuint16Úfloat16Zuint32c                    s*   g | ]"}ˆ D ]}d D ]}|||f‘qqqS ))r‡   r†   rW   rS   )Ú.0Út1Út2rY   )ÚtypesrS   rT   Ú
<listcomp>¿   s   ÿz5TestConvolve.test_convolve_method.<locals>.<listcomp>é*   r   rE   ©Úsize)rm   Úfrm   rQ   Úur½   ù              à?rR   c              	      s   i | ]}|t ˆˆ|ˆ d �“qS ))ri   rY   )r   )rµ   Úkey)rY   Úx1Úx2rS   rT   Ú
<dictcomp>Î   s   ÿz5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rg   r   rg   r°   c                 S   s   g | ]}|d v ‘qS )>   r²   r³   rS   )rµ   ÚtrS   rS   rT   r¹   Ù   ó    ç-Cëâ6?g�íµ ÷Æ°>©ÚrtolÚatolr´   çü©ñÒMbP?çñhãˆµøä>ç:Œ0âŽyE>)rj   ÚrandomÚseedÚchoiceÚrandnÚdtypeÚkindÚastyper	   r   Úanyr   )rO   ÚnÚargsZarray_typesr¶   r·   ÚresultsÚkwargsrS   )rY   r¸   rÁ   rÂ   rT   Útest_convolve_method¸   s0    
ÿÿ
z!TestConvolve.test_convolve_methodc                 C   sv   dD ]l}t jd| gt jd�}t||dd�}t||dd�}|dk rt||ƒ t|dd|  ƒ t|dd|  ƒ qd S )N)	rG   é   é2   é3   é4   é5   é6   é<   ry   rF   ©rÑ   r   rh   rg   rÛ   )rj   r   r±   r   r	   )rO   rÕ   rc   r   rg   rS   rS   rT   Ú test_convolve_method_large_inputä   s    
z-TestConvolve.test_convolve_method_large_inputc                 C   sx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S ©NrE   rF   rg   rh   r   r@   rŽ   ©rO   rS   rS   rT   Útest_mismatched_dimsó   s    z!TestConvolve.test_mismatched_dimsN)r­   )	r“   r”   r•   r¡   r§   r¬   rÙ   râ   rå   rS   rS   rS   rT   r–   �   s   
,r–   c                   @   s¤   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
ej deeg¡ej ddg d¢gfdg d¢gfg¡dd„ ƒƒZdd„ Zdd„ Zdd„ ZdS ) Ú_TestConvolve2dc                 C   sR   g d¢g d¢g}g d¢g d¢g}t g d¢g d¢g d¢gƒ}t||ƒ}t||ƒ d S rr   ©r   r   r   )rO   rP   rQ   r€   ÚerS   rS   rT   r�   ÿ   s    þ
z_TestConvolve2d.test_2d_arraysc                 C   s^   g d¢g d¢g}g d¢g d¢g}t g d¢gƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )N©rF   r@   rA   rB   rC   ru   r‚   ©rA   rB   rC   ru   r‚   é	   rG   rD   rV   ©ry   éP   éb   ét   é†   r‡   rç   ©rO   rè   r½   ÚhÚgrS   rS   rT   Útest_valid_mode  s    
z_TestConvolve2d.test_valid_modec                 C   sl   g d¢g d¢g}t jg d¢g d¢gtd�d }tg d¢gƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )	Nré   rê   rD   rV   rá   rƒ   )y      O@      8@y      T@      >@y     €X@      B@y      ]@      E@y     À`@      H@r‡   )rj   r   Úcomplexr   r   r   rñ   rS   rS   rT   Útest_valid_mode_complx  s    
z&_TestConvolve2d.test_valid_mode_complxc                 C   s\   g d¢g d¢g}g d¢g d¢g}d}t ||dd|ƒ}tg d¢g d	¢g d
¢gƒ}t||ƒ d S )NrD   rV   rs   rt   rE   r†   Úfill)é   é   r|   rZ   rJ   )rI   é(   ry   é@   rÝ   )rJ   é.   éC   ry   é0   ©r   r   r   )rO   rP   rQ   ZfillvalrR   r€   rS   rS   rT   Útest_fillvalue   s    þz_TestConvolve2d.test_fillvaluec              	   C   sÎ   d}t j ¡ �`}| td¡ tt|d��( tdggddggdd� W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d}tt|d��, tdggddggddgd� W d   ƒ n1 sÀ0    Y  d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex values©ÚmatchrE   rF   rƒ   ©Ú	fillvaluez,`fillvalue` must be scalar or an array with )rj   Ztestingr   Úfilterr<   r�   r�   r   )rO   ÚmsgÚsuprS   rS   rT   Útest_fillvalue_errors*  s    Tz%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d� d S )NrE   rF   r  ©r�   r�   r   rä   rS   rS   rT   Útest_fillvalue_empty5  s    ÿz$_TestConvolve2d.test_fillvalue_emptyc                 C   sV   g d¢g d¢g}g d¢g d¢g}t ||ddƒ}tg d¢g d¢g d¢gƒ}t||ƒ d S )	NrD   rV   rs   rt   r†   Úwrap)rí   rí   éJ   rí   rí   )éD   r  ry   r  r  rÿ   r   rS   rS   rT   Útest_wrap_boundary:  s    þz"_TestConvolve2d.test_wrap_boundaryc                 C   sV   g d¢g d¢g}g d¢g d¢g}t ||ddƒ}tg d¢g d¢g d	¢gƒ}t||ƒ d S )
NrD   rV   rs   rt   r†   Úsymm)rZ   rx   é,   ry   éB   )rÝ   rþ   ry   rí   éT   )éR   r˜   é\   én   ér   rÿ   r   rS   rS   rT   Útest_sym_boundaryC  s    þz!_TestConvolve2d.test_sym_boundaryÚfunczboundary, expectedr  )g     €B@ç      E@ç      F@g     €F@r  )ç     €E@r  r  ç     €C@c                 C   s8   t  g d¢g¡}t  d¡}|||d|d�}t||ƒ d S )N)ç       @ç      ð¿ç      @ç      @)rE   é   rW   ©rY   Úboundary)rj   r   Úonesr   )rO   r  r#  rŸ   ÚimageZkernelÚresultrS   rS   rT   Útest_same_with_boundaryL  s    	
z'_TestConvolve2d.test_same_with_boundaryc                 C   sh   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t||j||d	dd�ƒ d S )Nr   rE   r|   rá   rG   r@   ée   rW   r  r"  )r„   r„   )rY   Úorigin)	Úscipy.ndimageÚndimagerj   r   Úfloatrk   r   r   r   )rO   ÚndirP   rQ   rR   rS   rS   rT   Útest_boundary_extension_same]  s
    z,_TestConvolve2d.test_boundary_extension_samec                 C   s„   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t |dd	¡}t||j	||d	d�d d…d d…f ƒ d S )Nr   rE   rG   rá   r@   é%   rC   r†   r  r"  )©r@   r@   r0  rX   r„   )
r*  r+  rj   r   r,  rk   r   Úpadr   r   )rO   r-  rP   rQ   rR   ZapadrS   rS   rT   Útest_boundary_extension_fullg  s    z,_TestConvolve2d.test_boundary_extension_fullc                 C   sh   t  dd¡ d¡}t  dd¡ d¡}tttg||f¢R i ddi¤Ž tttg||f¢R i ddi¤Ž d S r¨   )rj   r   rk   r�   r�   r   r‘   rS   rS   rT   r¬   r  s     z#_TestConvolve2d.test_invalid_shapesN)r“   r”   r•   r�   rô   rö   r   r  r
  r  r  ÚpytestÚmarkÚparametrizer   r   r'  r.  r2  r¬   rS   rS   rS   rT   ræ   ý   s$   	
		ÿÿ
ræ   c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	ej 
d	¡d
d„ ƒƒZdS )ÚTestConvolve2dc                 C   sN   g d¢g d¢g}g d¢g d¢g}t ||dƒ}tg d¢g d¢gƒ}t||ƒ d S )NrD   rV   ré   rê   rW   )rH   rI   rZ   )rí   rî   rï   rÿ   )rO   rè   r½   ró   rò   rS   rS   rT   r§   �  s    ÿzTestConvolve2d.test_same_modec                 C   s°   g d¢g d¢g}g d¢g d¢g}g d¢g}t ||dƒ}t||ƒ t ||dƒ}t||ƒ ddgd	d
gg}g d¢g d¢g}ddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )NrD   rV   ré   rê   rì   r‡   r]   rœ   r_   ù      @        )r›   ù      @       @r7  )r7  y      @      ð?y      @      Ày      ;@      ð¿y      G@       @)r   r   )rO   rè   r½   rŸ   r    rS   rS   rT   r¡   ‰  s    




zTestConvolve2d.test_valid_mode2c              	   C   st   t  d¡}t  g d¢¡}dD ]R}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )NrB   ©gš™™™™™	@gffffffö?r@   ©r†   r‡   rW   rX   )rj   r   r   r
   r   r   Úsqueezer   ©rO   rP   rQ   rY   rS   rS   rT   Útest_consistency_convolve_funcs   s    
ÿÿþz.TestConvolve2d.test_consistency_convolve_funcsc                 C   s>   t ttddƒ t ttdgdgƒ t ttdgggdgggƒ d S )Nr@   rA   r	  rä   rS   rS   rT   Útest_invalid_dims«  s    z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s¢   ddt  ¡ j  }t d| d t  ¡ j d ¡ t jd| t jd�}d|d d d…< t jjj||dfdd	�}t	 
|ddgg¡}t  |dk¡}|d
 jd
ksžJ ‚d S )Nl        éè  rF   éé  g    €„.Ará   rE   )iH  r‚   )ÚshapeÚstridesr   )rj   r±   Úitemsizer;   Zcheck_free_memoryÚzerosÚlibZstride_tricksZ
as_stridedr   r   Úwherer¼   )rO   rÕ   rP   ÚcountZfailsrS   rS   rT   Útest_large_array°  s     zTestConvolve2d.test_large_arrayN)r“   r”   r•   r§   r¡   r=  r>  r3  r4  ÚslowZxfail_on_32bitrH  rS   rS   rS   rT   r6    s   
r6  c                   @   s”  e Zd Zej dddddgddgg¡dd„ ƒZej dddgddgg¡d	d
„ ƒZej dddddgddgg¡dd„ ƒZej dddgddgg¡dd„ ƒZ	ej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZ
ej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej ddddgdgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej dddgg¡dd „ ƒZej dddddgddgg¡d!d"„ ƒZej dddgddgg¡d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zej dddddgddgg¡d-d.„ ƒZej dddgddgg¡d/d0„ ƒZej ddd1gd1dgddgddgd2d1gd1d2gd2dgdd2gg¡d3d4„ ƒZejjej d5eedd6ƒƒeed7d8ƒƒ ej  d9¡ !d:d;d<¡ "¡  ¡d=d>„ ƒƒZ#d?d@„ Z$dS )AÚTestFFTConvolveÚaxesÚ Nr   r„   c                 C   sH   t g d¢ƒ}t g d¢ƒ}|dkr,t||ƒ}nt|||d�}t||ƒ d S )NrD   ©rE   rA   rG   rL   ç      "@rL  ©rK  ©r   r   r   ©rO   rK  rP   rŸ   r    rS   rS   rT   Ú	test_realÃ  s    zTestFFTConvolve.test_realrE   c                 C   sT   t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t|||d�}t||ƒ d S )NrD   rM  rF   rE   rO  ©r   rj   Útiler   r   rQ  rS   rS   rT   Útest_real_axesÏ  s    zTestFFTConvolve.test_real_axesc                 C   sH   t g d¢ƒ}t g d¢ƒ}|dkr,t||ƒ}nt|||d�}t||ƒ d S )N©r]   ù       @       @y      @      @©r`   y               @y              4@y              8@y              2@rL  rO  rP  rQ  rS   rS   rT   rd   Ú  s    zTestFFTConvolve.test_complexc                 C   sT   t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t|||d�}t||ƒ d S )NrV  rX  rF   rE   rO  rS  rQ  rS   rS   rT   Útest_complex_axeså  s    z!TestFFTConvolve.test_complex_axeséþÿÿÿc                 C   s^   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}|dkrBt||ƒ}nt|||d�}t||ƒ d S )NrD   rt   ©rE   rA   rG   rL   rë   ©r‚   rù   é8   rß   r¦   ©rv   rú   r™   rà   r¦   rL  rO  rP  rQ  rS   rS   rT   Útest_2d_real_sameð  s    ÿþz!TestFFTConvolve.test_2d_real_samerF   c                 C   sj   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}t |g d¢¡}t |g d¢¡}t|||d�}t||ƒ d S )NrD   rt   r[  r\  r^  ©rF   rE   rE   rO  rS  rQ  rS   rS   rT   Útest_2d_real_same_axes  s    	ÿþz&TestFFTConvolve.test_2d_real_same_axesc                 C   s^   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}|dkrBt||ƒ}nt|||d�}t||ƒ d S )N©ù      ð?       @ù      @      @y      @      @©r^   y      @      @y      @      @©y      À      @y      $À      4@y      5À      L@y      2À      S@y      &À      N@©y              $@y              F@y             €]@y             €c@y             €^@©rd  y      $@      4@y      5@      L@y      2@      S@y      &@      N@rL  rO  rP  rQ  rS   rS   rT   Útest_2d_complex_same  s    ÿýz$TestFFTConvolve.test_2d_complex_samec                 C   sj   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}t |g d¢¡}t |g d¢¡}t|||d�}t||ƒ d S )Nrb  re  rf  rg  rh  r`  rO  rS  rQ  rS   rS   rT   Útest_2d_complex_same_axes6  s    	ÿýz)TestFFTConvolve.test_2d_complex_same_axesc                 C   s”   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|dkrFt||dƒ}nt||d|d�}t||ƒ |dkrvt||dƒ}nt||d|d�}t||ƒ d S )NrD   ©	r@   r@   rB   rC   r‚   ru   rë   r   rE   ©ç     €A@ç     €D@ç     €G@©	rN  g      4@ç      9@rm  rn  ro  r  g      <@r  rL  rW   rO  rP  ©rO   rK  rP   rQ   Z
expected_1Z
expected_2r    rS   rS   rT   Útest_real_same_modeM  s    
z#TestFFTConvolve.test_real_same_modec                 C   s¨   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )	NrD   rk  rl  rp  rF   rE   rW   rO  rS  rr  rS   rS   rT   Útest_real_same_mode_axes`  s    
z(TestFFTConvolve.test_real_same_mode_axesc                 C   sˆ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|dkr:t||dƒ}nt||d|d�}t||ƒ |dkrjt||dƒ}nt||d|d�}t||ƒ d S )N©r@   rF   rE   rk  ©g      8@g      ?@rn  r  g     €H@rq  ç      (@rL  r‡   rO  rP  ©rO   rK  rP   rQ   rŸ   r    rS   rS   rT   Útest_valid_mode_realr  s    
z$TestFFTConvolve.test_valid_mode_realc                 C   sr   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ d S ©Nru  rk  rv  rF   rE   r‡   rO  rS  rx  rS   rS   rT   Útest_valid_mode_real_axes…  s    z)TestFFTConvolve.test_valid_mode_real_axesc                 C   sˆ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|dkr:t||dƒ}nt||d|d�}t||ƒ |dkrjt||dƒ}nt||d|d�}t||ƒ d S )N©ù      @      ð¿y       @      @r�   ©r8  y      @      Ày      @        y      @      ð¿y       @        ©y     €F@      (@y      >@      7@y      H@      @@rL  r‡   rO  rP  rx  rS   rS   rT   Útest_valid_mode_complex“  s    
z'TestFFTConvolve.test_valid_mode_complexc                 C   sŒ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )Nr|  r~  r  rF   rE   r‡   rO  rS  rx  rS   rS   rT   Útest_valid_mode_complex_axes¥  s    
z,TestFFTConvolve.test_valid_mode_complex_axesc                 C   sr   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||ddd�}t||ƒ d S rz  rS  rž   rS   rS   rT   Útest_valid_mode_ignore_nonaxesµ  s    z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S ©Nr   rB   rC   ru   )r   r   r¼   rä   rS   rS   rT   Ú
test_emptyÂ  s    zTestFFTConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rp   ©r   r   r	   ©rO   rP   rQ   r    rS   rS   rT   re   È  s    
zTestFFTConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rp   r…  r†  rS   rS   rT   rq   Î  s    


z#TestFFTConvolve.test_single_elementc                 C   s�   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}|dkrht||dƒ}nt||d|d�}tt j||dd	�ƒ d S )
NéÒ  éÑ  rƒ   é)  r†   rL  rO  ç»½×Ùß|Û=©rÈ   )rj   rÍ   rÎ   Úrandr   r   r   Úallcloserx  rS   rS   rT   Útest_random_dataÔ  s    z TestFFTConvolve.test_random_datac                 C   sª   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}t  |ddg¡}t  |ddg¡}t  |ddg¡}t||d|d�}tt j||d	d
�ƒ d S )Nr‡  rˆ  rƒ   r‰  r†   rF   rE   rO  rŠ  r‹  )	rj   rÍ   rÎ   rŒ  r   rT  r   r   r�  rx  rS   rS   rT   Útest_random_data_axesá  s    z%TestFFTConvolve.test_random_data_axesrA   éüÿÿÿc                 C   s<  d\}}t j d¡ t jj|Ž dt jj|Ž   }t jj|Ž dt jj|Ž   }t||dƒ}|d d …d d …d d d f }|d d …d d …d d d f }|d d …d d …d d d f }t  | dd¡dd¡}t  | dd¡dd¡}t  | dd¡dd¡}t  |g d	¢¡}t  |g d
¢¡}t  |g d¢¡}t||d|d�}t	||ddd� d S )N))é{   rH   )é„   é   r‡  rƒ   r†   r   rF   rE   rA   )rF   rE   r@   rE   rE   )rF   rE   rE   rA   rE   )rF   rE   r@   rA   rE   rO  rŠ  rÇ   )
rj   rÍ   rÎ   rŒ  r   ZmoveaxisÚswapaxesrT  r   r   )rO   rK  Za_shapern   rP   rQ   rŸ   r    rS   rS   rT   Útest_random_data_multidim_axesï  s     	z.TestFFTConvolve.test_random_data_multidim_axesrÕ   r­   r?  iÜ  r‡  r@  é'  rB   c                 C   s„   t j |¡dt j |¡  }t j |¡dt j |¡  }t  ||d¡}t||dƒ}t||dd� t||ddgd�}t||dd� d S )Nrƒ   r†   rŠ  ©rÉ   r   rO  )rj   rÍ   rŒ  r   r   r   )rO   rÕ   rP   rQ   rŸ   r    rS   rS   rT   Útest_many_sizes  s    zTestFFTConvolve.test_many_sizesc              	   C   sˆ   d}t j d¡}| |¡}t jt jfD ]\}||d< t dd¡}d}tj	t
|d��" tj||dd	d
� W d   ƒ q&1 sx0    Y  q&d S )Nr?  l   [<zn( r­   éÈ   çš™™™™™É?z4Use of fft convolution.*|invalid value encountered.*r  rW   r   rŒ   )rj   rÍ   Zdefault_rngÚstandard_normalÚnanÚinfr   Úfirwinr3  ÚwarnsÚRuntimeWarningr   )rO   rÕ   ÚrngZsig_nanÚvalZcoeffsr  rS   rS   rT   Útest_fft_nan  s    
zTestFFTConvolve.test_fft_nan)%r“   r”   r•   r3  r4  r5  rR  rU  rd   rY  r_  ra  ri  rj  rs  rt  ry  r{  r€  r�  r‚  r„  re   rq   rŽ  r�  r•  rI  Úlistrl   rj   rÍ   ÚRandomStateÚrandintÚtolistr˜  r£  rS   rS   rS   rT   rJ  Á  sº   







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

ù

÷

ù








ù
ÿþþrJ  c                  O   s   t dƒ‚d S )NzFell back to fftconvolve)ÚRuntimeError)rÖ   rØ   rS   rS   rT   Úfftconvolve_err,  s    r©  c                 C   s   dd„ t | dd�D ƒS )Nc                 S   s(   g | ] \}}t || ƒd kr||f‘qS )r@   )Úabs©rµ   rP   rQ   rS   rS   rT   r¹   1  s   ÿz!gen_oa_shapes.<locals>.<listcomp>rF   ©Úrepeatr   ©ÚsizesrS   rS   rT   Úgen_oa_shapes0  s    r°  c                 C   s@   t | ƒ}t | ƒ}dd„ t||ƒD ƒ}g d¢}dd„ t||ƒD ƒS )Nc                 S   s   g | ]\}}|| ‘qS rS   rS   )rµ   Zishapes0Zishapes1rS   rS   rT   r¹   8  rÅ   z$gen_oa_shapes_2d.<locals>.<listcomp>r:  c                 S   sb   g | ]Z\}}|d ksT|d |d kr4|d |d ksT|d |d k r|d |d k r||f ‘qS )r‡   r   rE   rF   r@   rS   )rµ   ZishapesZimoderS   rS   rT   r¹   <  s     ý)r°  Úzipr   )r¯  Zshapes0Zshapes1ZshapesÚmodesrS   rS   rT   Úgen_oa_shapes_2d5  s    ÿr³  c                 C   s   dd„ t | dd�D ƒS )Nc                 S   s    g | ]\}}||kr||f‘qS rS   rS   r«  rS   rS   rT   r¹   C  s   ÿz$gen_oa_shapes_eq.<locals>.<listcomp>rF   r¬  r   r®  rS   rS   rT   Úgen_oa_shapes_eqB  s    r´  c                   @   s¾  e Zd Zej ¡ ej deee	dƒƒee	dddƒƒ ƒ¡dd„ ƒƒZ
ej deg d¢ƒ¡ej dd	d
g¡ej dg d¢¡dd„ ƒƒƒZej dddg¡ej deg d¢ƒ¡ej dddg¡ej dddg¡ej dd	d
g¡ej dg d¢¡dd„ ƒƒƒƒƒƒZej deg d¢ƒ¡ej dd	d
g¡dd„ ƒƒZej dddgddgddgg¡ej deg d¢ƒ¡ej dddg¡ej dddg¡ej dd	d
g¡dd„ ƒƒƒƒƒZdd„ Zd d!„ Zd"d#„ Zd$S )%ÚTestOAConvolvezshape_a_0, shape_b_0r­   r?  rK   c                 C   s:   t j |¡}t j |¡}t||ƒ}t||ƒ}t||ƒ d S ©N)rj   rÍ   rŒ  r   r   r   )rO   Ú	shape_a_0Ú	shape_b_0rP   rQ   rŸ   r    rS   rS   rT   Útest_real_manylensH  s
    

z!TestOAConvolve.test_real_manylens)rÛ   é/   rC   rA   rE   Ú
is_complexTFrY   r:  c           
      C   s~   t j |¡}t j |¡}|rD|dt j |¡  }|dt j |¡  }t|||d�}| tjdt¡ t|||d�}	t	|	|ƒ d S ©Nrƒ   rX   r   ©
rj   rÍ   rŒ  r   Úsetattrr   Z_signaltoolsr©  r   r   )
rO   r·  r¸  r»  rY   ÚmonkeypatchrP   rQ   rŸ   r    rS   rS   rT   Útest_1d_noaxesV  s    
ÿzTestOAConvolve.test_1d_noaxesrK  r   rE   )rÛ   rº  rC   rA   Úshape_a_extrar@   Úshape_b_extrac	                 C   s¦   |gd }	|gd }
||	|< ||
|< t jj|	Ž }t jj|
Ž }|rh|dt jj|	Ž   }|dt jj|
Ž   }t||||d�}| tjdt¡ t||||d�}t	||ƒ d S )NrF   rƒ   ©rY   rK  r   r½  )rO   rK  r·  r¸  rÁ  rÂ  r»  rY   r¿  Úax_aÚax_brP   rQ   rŸ   r    rS   rS   rT   Útest_1d_axesj  s    



ÿzTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s†   t j ||¡}t j ||¡}	|rL|dt j ||¡  }|	dt j ||¡  }	t||	|d�}
| tjdt¡ t||	|d�}t	||
ƒ d S r¼  r½  )rO   r·  r¸  Ú	shape_a_1Ú	shape_b_1rY   r»  r¿  rP   rQ   rŸ   r    rS   rS   rT   Útest_2d_noaxes‡  s    
ÿzTestOAConvolve.test_2d_noaxesrF   c                 C   sÆ   |gd }|gd }|||d < |||d < |||d < |||d < t jj|Ž }t jj|Ž }|	rˆ|dt jj|Ž   }|dt jj|Ž   }t||||d�}|
 tjdt¡ t||||d�}t	||ƒ d S )Nr@   r   rE   rƒ   rÃ  r   r½  )rO   rK  r·  r¸  rÇ  rÈ  rY   rÁ  rÂ  r»  r¿  rÄ  rÅ  rP   rQ   rŸ   r    rS   rS   rT   Útest_2d_axesœ  s"    


ÿzTestOAConvolve.test_2d_axesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S rƒ  )r   r   r¼   rä   rS   rS   rT   r„  ¼  s    zTestOAConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rp   ©r   r   r	   r†  rS   rS   rT   re   Â  s    
zTestOAConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rp   rË  r†  rS   rS   rT   rq   È  s    


z"TestOAConvolve.test_single_elementN)r“   r”   r•   r3  r4  rI  r5  r´  r¤  rl   r¹  r°  rÀ  rÆ  r³  rÉ  rÊ  r„  re   rq   rS   rS   rS   rT   rµ  G  sL   ÿÿ	
ÿ
ÿ
þ
þrµ  c                   @   s¼   e Zd Zej deeg¡dd„ ƒZej deeg¡dd„ ƒZ	ej ddgdfddgfd	gdggfg¡ej deeg¡d
d„ ƒƒZ
ej deeg¡dd„ ƒZej dejejg¡dd„ ƒZdS )ÚTestAllFreqConvolvesÚconvapproachc                 C   sb   t  dd¡ d¡}t  dd¡ d¡}ttdd�� |||d	d
� W d   ƒ n1 sT0    Y  d S )NrE   ru   r©   rª   r   r«   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r‡   rX   )rj   r   rk   r�   r�   ©rO   rÍ  rP   rQ   rS   rS   rT   r¬   Ñ  s    ÿz(TestAllFreqConvolves.test_invalid_shapesc                 C   s^   t  g d¢¡}t  g d¢¡}ttdd��" |||ddgd� W d   ƒ n1 sP0    Y  d S )N)rB   rC   rF   rE   )rB   rC   r@   rE   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rE   rO  )rj   rD  r�   r�   rÎ  rS   rS   rT   Útest_invalid_shapes_axesÛ  s    ÿz-TestAllFreqConvolves.test_invalid_shapes_axesza,brE   rF   r@   c                 C   s:   t tdd�� |||ƒ W d   ƒ n1 s,0    Y  d S )Nz/in1 and in2 should have the same dimensionalityr  ©r�   r�   )rO   rP   rQ   rÍ  rS   rS   rT   rå   æ  s    ÿz)TestAllFreqConvolves.test_mismatched_dimsc                 C   sÔ  t tdd��" |dgdgdd� W d   ƒ n1 s40    Y  t tdd��" |dgdgg d� W d   ƒ n1 sr0    Y  t td	d��. |dgdgddgd
dggd� W d   ƒ n1 s¼0    Y  t td	d��& |dgdgg d¢d� W d   ƒ n1 sþ0    Y  t tdd��$ |dgdgdgd� W d   ƒ n1 �s@0    Y  t tdd��$ |dgdgdgd� W d   ƒ n1 �s‚0    Y  t tdd��& |dgdgddgd� W d   ƒ n1 �sÆ0    Y  d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rE   rF   ZchipsrX   z#when provided, axes cannot be emptyrO  z-axes must be a scalar or iterable of integersr@   rA   )ç      ð?r  r  r   z$axes exceeds dimensionality of inputrZ  zall axes must be uniquer   rÐ  )rO   rÍ  rS   rS   rT   Útest_invalid_flagsò  s0    ÿ0ÿ0<4ÿ4ÿ4ÿz'TestAllFreqConvolves.test_invalid_flagsrÑ   c                 C   sp   t j d¡ |¡}t j d¡ |¡}t  |ƒ ¡r@|d7 }|d8 }t||ƒ}t|t||dd�ƒ |j|kslJ ‚d S )N)rf   rf   )rA   rA   y        š™™™™™¹?rg   rh   )rj   rÍ   rÓ   Ziscomplexobjr   r   r   rÑ   )rO   rÑ   ra   rb   ÚresrS   rS   rT   Útest_longdtype_input  s    
z)TestAllFreqConvolves.test_longdtype_inputN)r“   r”   r•   r3  r4  r5  r   r   r¬   rÏ  rå   rÒ  rj   Ú
longdoubleÚclongdoublerÔ  rS   rS   rS   rT   rÌ  Ï  s0   ÿ
ÿ
	þÿÿÿ
rÌ  c                   @   sJ  e Zd Zg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g
Zg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
ZddgZdd„ Zej 	de
je
je
je
jeee
je
je
je
jg
¡dd„ ƒZdd„ Zej 	de
je
je
je
je
jg¡dd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zej 	de
je
je
jg¡d(d)„ ƒZ d*S )+ÚTestMedFilt)
rÛ   rÛ   rÛ   rÛ   rÛ   r  é   rf   rš   rü   )
rÛ   rÛ   rÛ   rÛ   rÛ   r   éH   éM   r  r  )
rÛ   rÛ   rÛ   rÛ   rÛ   rü   rº  é   rû   rÚ  )
rÛ   rÛ   rÛ   rÛ   rÛ   rº   é   é   é_   é#   )
rÛ   rÛ   rÛ   rÛ   rÛ   rü   rZ   rë   r!  r  )
r—   éa   rI   r  r˜   rÚ  r£   rz   éG   rº   )
rû   rÞ   r  rÝ  r  rJ   rÛ  r  rø   r  )
r@   é!   rÞ   rý   rE   r˜   r  é7   rL   éS   )
ru   r“  rü   r—   rà   rº  rø   é+   r£   rù   )
rJ   r£   éX   ru   é'   rA   r  rû   r¥   r£   )
r   rÛ   rÛ   rÛ   rº   rÜ  rÜ  rØ  rf   r   )
r   rÛ   rÛ   rÛ   rÛ   rº   rÛ  r!  rÝ  r   )
rÛ   rÛ   rÛ   rÛ   rÛ   rº  rZ   rZ   rü   rß  )
rÛ   rÛ   rÛ   rÛ   rÛ   rÛ   rº   rº  rû   rº   )
rÛ   rÛ   rÛ   rÛ   rÛ   rÛ   rü   rã  rû   rß  )
râ  rÛ   rÛ   rÛ   rÛ   rº  rü   rå  rã  rù   )
rJ   rÛ   rÛ   rÛ   rÛ   rº  rü   r¥   rã  rù   )
ru   rü   rÛ   rÛ   rº  rü   rü   rå  r¥   r!  )
r   rJ   râ  rç  rJ   rJ   rå  rå  rå  r   )
r   ru   r“  ru   rA   rA   rÛ  rÛ  rø   r   ru   r@   c                 C   sB   t  | j| j¡}t  t | jt¡| j¡}t|| j	ƒ t||ƒ d S r¶  )
r   ÚmedfiltÚINÚKERNEL_SIZEÚ	medfilt2drj   r   r,  r   ÚOUT)rO   r€   rè   rS   rS   rT   rU   9  s    zTestMedFilt.test_basicrÑ   c                 C   s8   t j| j|d�}tt |¡j|ƒ tt |¡j|ƒ d S )Nrá   )rj   r   ré  r	   r   rè  rÑ   rë  ©rO   rÑ   Úin_typedrS   rS   rT   Ú
test_types?  s    zTestMedFilt.test_typesc                 C   sš   t j}t j| j|d�}d}tj|d��" tt |¡j	|ƒ W d   ƒ n1 sN0    Y  tj|d��" tt 
|¡j	|ƒ W d   ƒ n1 sŒ0    Y  d S )Nrá   ú"Using medfilt with arrays of dtyper  )rj   rÕ  r   ré  r3  Údeprecated_callr	   r   rè  rÑ   rë  )rO   rÑ   rî  r  rS   rS   rT   Útest_types_deprecatedH  s    0z!TestMedFilt.test_types_deprecatedc                 C   s„   t j| j|d�}tjtdd�� t |¡ W d   ƒ n1 s>0    Y  tjtdd�� t |¡ W d   ƒ n1 sv0    Y  d S )Nrá   znot supportedr  )	rj   r   ré  r3  r   r�   r   rè  rë  rí  rS   rS   rT   Útest_invalid_dtypesR  s
    (zTestMedFilt.test_invalid_dtypesc                 C   sH   d}t jttf|d�� tttjd ƒ W d   ƒ n1 s:0    Y  d S )NúAkernel_size exceeds volume.*|Using medfilt with arrays of dtype.*r  )r3  rŸ  ÚUserWarningÚDeprecationWarningr�   Ú	TypeErrorr   rè  )rO   r  rS   rS   rT   Ú	test_none\  s    zTestMedFilt.test_nonec                 C   s:   t jdt jd�}|dd… }d|_tt |d¡dkƒ d S )NrG   rá   rB   rC   rv   rE   ç      @)rj   r   r¯   rB  r   r   rè  )rO   ÚdummyrP   rS   rS   rT   Útest_odd_stridesb  s    zTestMedFilt.test_odd_stridesc                 C   s´   t dƒ}tj||gtd�}ttdƒr4dt |¡ }nd}d}tjt	t
f|d��( t|ƒD ]}t |¡ qXW d   ƒ n1 s|0    Y  ttdƒr¢tt |¡|k ƒ t|||gƒ d S )Nr‘  rá   ÚgetrefcountrF   rG   rô  r  )r   rj   r   ÚobjectÚhasattrÚsysrü  r3  rŸ  rõ  rö  rl   r   rè  r   r	   )rO   rP   ra   rÕ   r  ÚjrS   rS   rT   Útest_refcountingk  s    
*
zTestMedFilt.test_refcountingc                 C   sh   d}t j|d��D tj| jtd�}tj| jtd�}tt 	|| j
¡|ƒ W d   ƒ n1 sZ0    Y  d S )Nrð  r  rá   )r3  rñ  rj   r   ré  rý  rì  r   r   rè  rê  )rO   r  Z	in_objectZ
out_objectrS   rS   rT   Útest_object|  s    ÿzTestMedFilt.test_objectc           
         s  t jˆj|d�‰t jˆj|d�}ˆj|jks0J ‚|jd d ‰ |jd d ‰ˆjd d d ‰ˆjd d d ‰‡ ‡‡‡‡‡fdd„‰t  |¡}tdd��T‰h d	£}‡‡fd
d„|D ƒ}t|ƒD ]}| 	¡ \}}}	||||	f< qÀW d   ƒ n1 sô0    Y  t
||ƒ d S )Nrá   r   rF   rE   c                    sÔ   | \}}|dkr6t dˆ ˆ ƒ}t dˆ ƒ}t dˆ ƒ}n"t ˆ ˆ d ƒ}t ˆd ƒ}t ˆ d ƒ}|dkr†t dˆˆ ƒ}t dˆ ƒ}t dˆƒ}n"t ˆˆ d ƒ}t ˆd ƒ}t ˆd ƒ}ˆ||f }	t |	ˆj¡}
|
||f ||fS )Nr   )Úslicer   rë  rê  )ÚchunkÚMÚNZMinZMselZMoutZNinZNselZNoutZ
chunk_dataZmed)ÚM1ÚN1rî  ÚoffMÚoffNrO   rS   rT   Úapply”  s$    



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyrA   )Úmax_workers>   ©r   rE   )rE   r   ©rE   rE   ©r   r   c                    s   h | ]}ˆ  ˆ |¡’qS rS   )Zsubmit)rµ   r  )r  ÚpoolrS   rT   Ú	<setcomp>³  rÅ   z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)rj   r   ré  rì  rA  rê  Z
zeros_liker   r   r&  r   )
rO   rÑ   rŸ   ÚoutputÚchunksZfuturesÚfutureÚdataZMsliceZNslicerS   )r  r  r  rî  r	  r
  r  rO   rT   Útest_medfilt2d_parallel„  s     
,z#TestMedFilt.test_medfilt2d_parallelN)!r“   r”   r•   ré  rì  rê  rU   r3  r4  r5  rj   ÚubyteÚbyteÚushortÚshortr>   r=   Ú	ulonglongr²   r¯   rï  rò  Zbool_r³   r®   rÖ  r´   ró  rø  rû  r  r  r  rS   rS   rS   rT   r×    sP   ÷÷þ

ÿ
	r×  c                   @   s   e Zd Zdd„ ZdS )Ú
TestWienerc                 C   sr   t g d¢g d¢g d¢g d¢gdƒ}t g d¢g d¢g d¢g d	¢gƒ}tt |¡|d
d� ttj|dd�|d
d� d S )N)rB   rC   rA   r@   )r@   rB   rC   rF   )rF   r@   rB   rC   )rE   rC   rë   ru   r€   )g‘ÔSXO@gúXÆqÇ	@gƒÓÇq@gõ¬ªªªú?)g]É`UUU@g¬FUUUU@gæÇqÇ@gçcÇq@)gÂy¿qÇ@gúXÆqÇ@gúXÆqÇ@gÚUõßJ4@)g±UUUUõ?gñ2k³6k@gÒ·ÍW÷H@gº“@­_)@rC   ©Údecimalr@   )Zmysize)r   r   r   Zwiener)rO   ró   rò   rS   rS   rT   rU   ¿  s    ýýýzTestWiener.test_basicN©r“   r”   r•   rU   rS   rS   rS   rT   r  ½  s   r  )ÚmeanÚmedianÚminimumÚmaximumÚlinec                	   @   s  e Zd Zdd„ Zej dd¡ej dd¡ej dd¡d	d
„ ƒƒƒZdd„ Zej dd¡ej dd¡ej dd¡dd„ ƒƒƒZ	ej de
¡dd„ ƒZej de
¡dd„ ƒZej de
¡ej dejejg¡dd„ ƒƒZej ddgeedgddge
ƒƒ ¡d d!„ ƒZd"d#„ Zd$d%„ Zd&S )'ÚTestResamplec              	   C   s¶   t  d¡}d}t dd¡}tttj|||d� tttj|ddƒ tttj|ddƒ tttj|d	dd
d� tttj|d	dddd� t  t  d¡d¡}tj||d|d� t	|j
dkƒ d S )Né€   é   )Úkaiserç       @é    ©ÚwindowÚyorE   r   rF   rL  ©Úpadtyper   rG   )r/  Úcval)rF   rE   r„   ©Úaxisr,  )r*  )rj   r   r   Z
get_windowr�   r�   ÚresampleÚresample_polyrT  r   rA  )rO   ÚsigÚnumÚwinZsig2rS   rS   rT   rU   Ñ  s    
ÿzTestResample.test_basicr,  )NÚhammingr  )rÚ   rÛ  r6  )r­   r(  rG   r“  c                 C   s´   t jdd|dd�}t  |d  d ¡}ttj|||d�tj|d ||d�jƒ t  t  |d  d ¡t  |d  d ¡g¡}|d }ttj||d	|d
�tj||d	|d
�jdd� d S )Nr   rG   F)ZendpointrF   g      @r+  r…   rE   r1  ç•Ö&è.>r—  )	rj   ÚlinspaceÚcosr   r   r3  Úrealr   Úsin)rO   r  r6  r,  ra   rb   Z	y_complexrS   rS   rT   Ú	test_rfftç  s    ÿ.ýzTestResample.test_rfftc                 C   sD   t  d¡d }t|ƒ}d}ttj||dd�tj||dd�dd� d S )Nr'  r…   Úfreq)ÚdomainÚtimer9  r—  )rj   r   r   r   r   r3  )rO   ZtsigZfsigr6  rS   rS   rT   Útest_input_domainù  s    ýzTestResample.test_input_domainÚnx)rE   rF   r@   rB   r‚   ÚnyrÑ   )r,  rõ   c                 C   s2   t  dg| |¡}t ||¡}t|dg| ƒ d S )NrE   )rj   r   r   r3  r   )rO   rC  rD  rÑ   ra   rb   rS   rS   rT   Útest_dc  s    zTestResample.test_dcr/  c                 C   sF   t  d¡}t j d¡ d¡}| ¡ }tj|dd||d� t||ƒ d S )Nr@   r   rF   rB   rE   ©r,  r/  )	rj   rD  rÍ   r¥  rÐ   Úcopyr   r4  r   )rO   r/  Zimpulser,  Zwindow_origrS   rS   rT   Útest_mutable_window  s
    
z TestResample.test_mutable_windowc                 C   sL   t jdt jd�}t jg d¢t jd�}tj|dd||d�}|jt jksHJ ‚d S )NrG   rá   ©rE   rE   rE   rE   rF   rF  )rj   r   r²   r   r   r4  rÑ   )rO   r/  ra   rò   rb   rS   rS   rT   Útest_output_float32  s    z TestResample.test_output_float32c                 C   s4   t jd|d�}tj|dd|d�}|j|jks0J ‚d S )NrG   rá   rE   rF   r.  )rj   r   r   r4  rÑ   )rO   r/  rÑ   ra   rb   rS   rS   rT   Útest_output_match_dtype  s    z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc                  C   sê  d}g d¢}t  |¡t|ƒ }t  d¡d d …t jf }t  dt j | | ¡t|ƒ }|D �]j}	t  |	¡t|	ƒ }
t  dt j | |
 ¡t|	ƒ }|dkr¬tj	||	dd�}nŠ|�r|	|k�rt
|	|ƒ}|	| }|| }t||ƒ}d| }d	| }tjd| d
 |dd�}||dœ}nd|i}tj||	|fddi|¤Ž}t|||ƒD ]‚\}}}|d|	 k�rŽ| d¡ |dv �r~t||dd� nt||dd� n4t|j|jƒ t  ||¡d }t|dk|||	fd� �qBqZt j d¡}t|ƒt  | |¡¡ }|D ]~}	t  |	¡t|	ƒ }
t  |
||¡}|dk�r,t 	||	¡}ntj||	||d�}t|j|jƒ t  ||¡d }t|dk|d� �qð|dk�ræt  ddg¡}t 	|d¡}t  g d¢¡}t||dd� t  g d ¢¡}t 	|d¡}t  ddg¡}t||dd� d S )!Nr­   )	r}   rÛ   rÜ   éc   r­   r(  éÇ   r™  éÉ   )rÑ  ç      $@g      D@rF   r   r„   ©r2  rÑ  rG   rE   )r(  rù  r+  rF  r/  r2  ç      à?ç        )r"  r#  ç333333Ó?r—  rÊ   r  g®Gáz®ï?)r  r   r.  r�   r…   rA   )r�   ù      à?        r…   rT  çê-�™—q=)rÑ  rQ  rR  rQ  )rj   r   r,  r   Únewaxisr=  Úpir6   r   r3  r   Úmaxrž  r4  r±  r÷   r   r   rA  Zcorrcoefr   rÍ   r¥  ZcumsumrÐ   Úinterp) rO   ri   Úextr/  ÚrateÚrates_torÄ   Úfreqsra   Úrate_toÚt_toZy_tosÚ	y_resampsró   ÚupÚdownZmax_rateZf_cZhalf_lenr,  ZpolyargsZy_toZy_resampr?  Zcorrr¡  rÁ   Zy1_testZy1_truerÂ   Zy2_testZy2_truerS   rS   rT   Útest_resample_methods$  sp     
 

ÿÿ



ÿ
z"TestResample.test_resample_methodsc                 C   sè   t j d¡}tt jt jttf}d}g d¢}|D ]´}| |¡ 	|¡}|t jt j
fv rd|d| |¡ 7 }d|d< d|d< |D ]h}tjdd| d	d
�}t|d|dd�d d |… }	t||d d d… ƒ}
tj|d||
d
�}t|	|ddd� qxq.d S )Nrw   r–  )rF   r“  éO   rƒ   r   r„   r|   rÑ  r8  r+  Úconstantr.  rE   çH¯¼šò×z>©rÉ   rÈ   )rj   rÍ   r¥  Úintr²   r³   r,  rõ   rÐ   rÓ   r®   r   rž  r$   r   r4  r   )rO   Zrandom_stateZ	try_typesr¼   Zdown_factorsrÑ   ra   rb  rò   ÚyfZhcrb   rS   rS   rT   Útest_poly_vs_filtfiltv  s     z"TestResample.test_poly_vs_filtfiltc              	   C   s„   dD ]z}t dd|ƒD ]h}dD ]^}tj |f¡}tj |f¡}t||d d d… dd�}tj|d||d�}t|d d |… |ƒ qqqd S )	N)rF   rA   rE   rú   )rJ   râ  r„   re  rX   )ra  rb  r,  )rl   rj   rÍ   r   r   r4  r   )rO   rb  rC  Znweightsra   ÚweightsZy_gZy_srS   rS   rT   Útest_correlate1d’  s    ÿzTestResample.test_correlate1dN)r“   r”   r•   rU   r3  r4  r5  r>  rB  rE  Úpadtype_optionsrH  rJ  rj   r²   r¯   rK  r¤  r   rc  rj  rl  rS   rS   rS   rT   r%  Ð  s<   


ÿÿÿþ	
Ir%  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCSpline1DEvalc                 C   sx   t g d¢ƒ}tt|ƒƒ}|d |d  }t |¡}tt|ƒd ƒd }tj||||d d�}t|d d d… |dd� d S )	N)	rE   rF   r@   rA   r@   rF   rE   rF   r  rE   r   rO  )ÚdxZx0rG   rB   r  )r   r   Úlenr   Ú	cspline1dÚcspline1d_evalr   )rO   rb   ra   ro  ÚcjrÂ   Úy2rS   rS   rT   rU      s    
zTestCSpline1DEval.test_basicc                 C   st   t  d¡}t j|jt jd�}d}d| }t  dt j | | ¡}t |¡}t  	dg¡}t 
||¡}t|j|jƒ d S )NrF   rá   rO  rÑ  r`   rQ  )rj   r   rD  rA  r³   ÚexprW  r   rq  r   rr  r	   rÑ   )rO   ra   rb   ÚTr½   ÚcyZxnewZynewrS   rS   rT   rd   ¬  s    

zTestCSpline1DEval.test_complexN)r“   r”   r•   rU   rd   rS   rS   rS   rT   rn  ž  s   rn  c                   @   s   e Zd Zdd„ ZdS )ÚTestOrderFiltc                 C   s$   t t g d¢g d¢d¡g d¢ƒ d S )NrD   ©rE   r   rE   rE   )rF   r@   rF   )r   r   Zorder_filterrä   rS   rS   rT   rU   ¿  s    ÿzTestOrderFilt.test_basicNr  rS   rS   rS   rT   rx  ½  s   rx  c                	   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zej d3d4d4ge  d4¡g¡ej d5d4d4ge  d4¡g¡d6d7„ ƒƒZ!d8S )9Ú_TestLinearFilterc                 C   s.   t  dt  |¡d t  |¡¡ |¡}|  |¡S )Nr   rE   )rj   r:  Úprodrk   Úconvert_dtype)rO   rA  ra   rS   rS   rT   ÚgenerateÆ  s    $z_TestLinearFilter.generatec                 C   s€   | j t  d¡krlt |¡}t |j| j ¡}t ||gddgdgdgg¡}|D ]\}}|  |d ¡|d< qL|S tj|| j d�S d S )	NÚOZrefs_okZzerosize_okÚreadonlyZ	writeonlyrS   .rá   )rÑ   rj   ÚasarrayÚemptyrA  ZnditerÚtype)rO   Zarrr    Úiterra   rb   rS   rS   rT   r|  Ê  s    

ÿz_TestLinearFilter.convert_dtypec                 C   sJ   |   d¡}|  ddg¡}|  ddg¡}|  g d¢¡}tt|||ƒ|ƒ d S ©N©rC   rE   r„   rQ  ç      à¿©r   rF   rA   rC   r‚   rO  ©r}  r|  r   r"   ©rO   ra   rQ   rP   Úy_rrS   rS   rT   Útest_rank_1_IIRÖ  s
    
z!_TestLinearFilter.test_rank_1_IIRc                 C   sH   |   d¡}|  ddg¡}|  dg¡}|  g d¢¡}tt|||ƒ|ƒ d S )Nr…  rE   ©r   rE   r@   rB   ru   rN  rˆ  r‰  rS   rS   rT   Útest_rank_1_FIRÝ  s
    
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s|   |   d¡}|  g d¢¡}|  ddg¡}|  ddg¡}|  g d¢¡}|  dd	g¡}t||||d
�\}}t||ƒ t||ƒ d S )Nr…  ©rE   r   r„   rQ  r†  rE   rF   )rE   rB   rë   é   rw   r!  r�  éöÿÿÿ©Úzi©r}  r|  r"   r   ©	rO   ra   rQ   rP   r’  rŠ  Úzf_rrb   ÚzfrS   rS   rT   Útest_rank_1_IIR_init_condä  s    

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   sz   |   d¡}|  g d¢¡}|  dg¡}|  ddg¡}|  g d¢¡}|  ddg¡}t||||d�\}}t||ƒ t||ƒ d S )Nr…  rI  rE   )rE   rF   r@   rC   rë   rw  rë   rB   r‘  r“  r”  rS   rS   rT   Útest_rank_1_FIR_init_condï  s    

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sf   |   d¡}|  ddg¡}|  ddg¡}|  g d¢g d¢g d¢g d¢g¡}t|||dd�}t||ƒ d S )	N©rA   r@   rE   r„   rQ  ©r   rF   rA   ©rC   rA   rF   r   rP  r“  )rO   ra   rQ   rP   Úy_r2_a0rb   rS   rS   rT   Útest_rank_2_IIR_axis_0ú  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sf   |   d¡}|  ddg¡}|  ddg¡}|  g d¢g d¢g d¢g d¢g¡}t|||dd	�}t||ƒ d S )
Nr™  rE   r„   rQ  ©r   rF   r   ©rC   r�  rC   ©rL   r�  rL   ©rØ  iðÿÿÿrØ  rP  r“  )rO   ra   rQ   rP   Úy_r2_a1rb   rS   rS   rT   Útest_rank_2_IIR_axis_1  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s¢   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  g d¢g d¢g d¢g d	¢g¡}|  g d
¢¡d d …tjf }t|||d|d�\}}t||ƒ t||ƒ d S )Nr™  rE   r„   rQ  )rA   rE   rI  )ru   éûÿÿÿru   )r�  éõÿÿÿr�  )rÛ  éïÿÿÿrÛ  )r¤  r¦  iãÿÿÿi×ÿÿÿ©r2  r’  )r}  r|  rj   r$  rV  r"   r   )	rO   ra   rQ   rP   r’  Z	y_r2_a0_1r•  rb   r–  rS   rS   rT   Ú test_rank_2_IIR_axis_0_init_cond  s    
ÿ
z2_TestLinearFilter.test_rank_2_IIR_axis_0_init_condc           	      C   s–   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  g d¢g d¢g d¢g d¢g¡}|  g d¢g¡}t|||d	|d
�\}}t||ƒ t||ƒ d S )Nr™  rE   r„   rQ  )rE   r@   )rE   r@   rB   )rB   r@   rE   )ééÿÿÿr©  r©  r   r§  )r}  r|  rj   r$  r"   r   )	rO   ra   rQ   rP   r’  Z	y_r2_a0_0r•  rb   r–  rS   rS   rT   Ú test_rank_2_IIR_axis_1_init_cond  s    
ÿ
z2_TestLinearFilter.test_rank_2_IIR_axis_1_init_condc                    sj   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]4}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ q0d S )N©rA   r@   rF   rE   r„   rQ  c                    s   t ˆˆ | ƒS r¶  ©r"   ©Úw©rP   rQ   rS   rT   Ú<lambda>-  rÅ   z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>©r}  r|  rl   Úndimr"   rj   Úapply_along_axisr   ©rO   ra   r2  rb   rŠ  rS   r¯  rT   Útest_rank_3_IIR&  s    
z!_TestLinearFilter.test_rank_3_IIRc                    sÌ   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]–}t|jƒ}d||< |  t |¡¡}|  dg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q0d S )	Nr«  rE   r„   rQ  c                    s   t ˆˆ | ˆd�d S ©Nr‘  r   r¬  r­  ©rP   rQ   Úzi1rS   rT   Úlf0;  s    z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0c                    s   t ˆˆ | ˆd�d S ©Nr‘  rE   r¬  r­  r·  rS   rT   Úlf1=  s    z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1©r}  r|  rl   r²  r¤  rA  rj   r$  r"   r³  r   ©rO   ra   r2  Zzi_shaper’  rb   r–  r¹  r»  rŠ  r•  rS   r·  rT   Útest_rank_3_IIR_init_cond0  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sh   |   d¡}|  g d¢¡‰|  dg¡‰ t|jƒD ]4}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ q.d S )Nr«  rŽ  rE   c                    s   t ˆˆ | ƒS r¶  r¬  r­  r¯  rS   rT   r°  K  rÅ   z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r±  r´  rS   r¯  rT   Útest_rank_3_FIRD  s    
z!_TestLinearFilter.test_rank_3_FIRc                    sÌ   |   d¡}|  g d¢¡‰|  dg¡‰ t|jƒD ]˜}t|jƒ}d||< |  t |¡¡}|  ddg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q.d S )	Nr«  rŽ  rE   rF   c                    s   t ˆˆ | ˆd�d S r¶  r¬  r­  r·  rS   rT   r¹  Y  s    z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0c                    s   t ˆˆ | ˆd�d S rº  r¬  r­  r·  rS   rT   r»  [  s    z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1r¼  r½  rS   r·  rT   Útest_rank_3_FIR_init_condN  s    


z+_TestLinearFilter.test_rank_3_FIR_init_condc              
   C   sÆ   |   d¡}tjdddd�\}}|  |¡}|  |¡}|jd d }|  t dd	|f¡¡}|  t dd|f¡¡}t||||d
�\}}t||||d
�\}	}
t|	|ƒ t||
ƒ t	t
t|||dt |¡ƒ d S )N)rA   rB   rÚ   r‚   rš  Úba©r  r   rE   rA   rB   r‘  r„   )r}  r   r%   r|  rA  rj   r$  r"   r   r�   r�   )rO   ra   rQ   rP   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrS   rS   rT   Útest_zi_pseudobroadcastb  s    




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sP   |   d¡}|  g d¢¡}|  dg¡}|  g d¢¡}t||d |ƒ}t||ƒ d S )NrC   rŽ  rE   )r   rE   rF   rF   rF   rF   r   r“  )rO   ra   rQ   rP   rŠ  rb   rS   rS   rT   Útest_scalar_aw  s    
z_TestLinearFilter.test_scalar_ac                 C   s6  |   t dd¡¡}|   t dd¡¡}|   t g d¢¡¡}t dd¡}|dd d …d d …f  d9  < |dd d …d d …f  d9  < |   |¡}|   t d	d¡¡}t dd¡}dggdggdggg|d d …d d …d d
…f< |   |¡}t|||d|ƒ\}}t||ƒ t||ƒ t||d |d|ƒ\}	}
t|	|ƒ t|
|ƒ d S )N)r@   rF   rB   ÚlrB   ©rE   r   r   )r@   rE   rA   rE   rF   r@   )r@   rF   rA   rA   r„   r   )r|  rj   rD  r$  r   r"   r   )rO   ra   rQ   rP   r’  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrS   rS   rT   Útest_zi_some_singleton_dims�  s"    
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |   |¡}|   |¡}|   |¡}|   |¡}ttt|||||ƒ d S r¶  )r|  r�   r�   r"   )rO   rQ   rP   ra   r2  r’  rS   rS   rT   Úbase_bad_size_ziœ  s
    



z"_TestLinearFilter.base_bad_size_zic                 C   s€	  t  d¡}|  dgdg|ddg¡ |  ddgdg|dddg¡ |  ddgdg|ddgg¡ |  ddgdg|dg d¢¡ |  g d¢dg|ddgg¡ |  g d¢dg|dg d¢¡ |  dgddg|dddg¡ |  dgddg|ddgg¡ |  dgddg|dg d¢¡ |  g d¢ddg|ddg¡ |  g d¢ddg|ddgdgg¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dg d¢¡ |  ddgg d¢|ddg¡ |  ddgg d¢|ddgdgg¡ |  ddgg d¢|dg d¢¡ |  ddgg d¢|dg d¢¡ t  d¡ d	¡}|  dgdg|ddg¡ |  ddgdg|dg d¢¡ |  ddgdg|dg d¢gg¡ |  ddgdg|ddgdgd
gg¡ |  ddgdg|dddgg¡ |  ddgdg|dg d¢g¡ |  g d¢dg|dg d¢¡ |  g d¢dg|dg d¢g d¢gg¡ |  g d¢dg|dddgd
dgddgg¡ |  g d¢dg|dddgd
dgg¡ |  g d¢dg|dg d¢g d¢g¡ |  dgddg|dg d¢¡ |  dgddg|dg d¢gg¡ |  dgddg|ddgdgd
gg¡ |  dgddg|dddgg¡ |  dgddg|dg d¢g¡ |  dgg d¢|dg d¢¡ |  dgg d¢|dg d¢g d¢gg¡ |  dgg d¢|dddgd
dgddgg¡ |  dgg d¢|dddgd
dgg¡ |  dgg d¢|dg d¢g d¢g¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dg d¢g d¢gg¡ |  g d¢ddg|dddgd
dgddgg¡ |  g d¢ddg|dddgd
dgg¡ |  g d¢ddg|dg d¢g d¢g¡ |  dgdg|ddg¡ |  ddgdg|dg d¢¡ |  ddgdg|ddgdgd
gdggg¡ |  ddgdg|dg d¢g¡ |  ddgdg|ddgdgd
gg¡ |  ddgdg|ddgdgd
gdgdgg¡ |  g d¢dg|dg d¢¡ |  g d¢dg|dddgd
dgddgddggg¡ |  g d¢dg|dg d¢g d¢g¡ |  g d¢dg|dddgd
dgddgg¡ |  g d¢dg|dddgd
dgddgddgddgg¡ |  dgddg|dg d¢¡ |  dgddg|ddgdgd
gdggg¡ |  dgddg|dg d¢g¡ |  dgddg|ddgdgd
gg¡ |  dgddg|ddgdgd
gdgdgg¡ |  dgg d¢|dg d¢¡ |  dgg d¢|dddgd
dgddgddggg¡ |  dgg d¢|dg d¢g d¢g¡ |  dgg d¢|dddgd
dgddgg¡ |  dgg d¢|dddgd
dgddgddgddgg¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dddgd
dgddgddggg¡ |  g d¢ddg|dg d¢g d¢g¡ |  g d¢ddg|dddgd
dgddgg¡ |  g d¢ddg|dddgd
dgddgddgddgg¡ d S )NrC   rE   r„   r   ©r   rE   rF   rI  ©r   rE   rF   r@   rL   r™  rF   )r   rE   rF   r@   rA   rB   rV   r@   rA   rB   )rA   rB   rC   ru   )r   rE   rF   r@   rA   rB   rC   ru   ru   r‚   rë   )rj   r   rÈ  rk   )rO   rÁ   rÂ   rS   rS   rT   Útest_bad_size_zi£  sŽ    
""	 $&*$$ $&*$$(,&&*$,2$*6*$,2$*64&,z"_TestLinearFilter.test_bad_size_zic                 C   sh   |   d¡}|  dg¡}|  dg¡}|  g ¡}t||||d�\}}t||ƒ t|j| jƒ t|jdƒ d S )N)rB   rE   r‘  r   )r}  r|  r"   r   r	   rÑ   r¼   )rO   ra   rP   rQ   r’  rb   r–  rS   rS   rT   Útest_empty_zi  s    


z_TestLinearFilter.test_empty_zic                 C   s`   |   dg¡}|   dg¡}t||ddgƒ}t||ddgƒ}t||ddgƒ}t||ƒ t||ƒ d S )NrE   rÑ  r   TF)r|  r+   r   )rO   rP   rQ   r’  Zzi_1Zzi_2rS   rS   rT   Útest_lfiltic_bad_zi  s    
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   sz   |   dg¡}|   g d¢¡}|   ddg¡}|   dg¡}|   dg¡}|   ddg¡}t||||d�\}}t||ƒ t||ƒ d S )	NrE   rŽ  rF   ru   rÙ  r  é¸ÿÿÿr‘  ©r|  r"   r   ©	rO   rP   rQ   r’  ra   ZyeZzferb   r–  rS   rS   rT   Útest_short_x_FIR  s    
z"_TestLinearFilter.test_short_x_FIRc           	      C   s|   |   ddg¡}|   g d¢¡}|   ddg¡}|   dg¡}|   dg¡}|   ddg¡}t||||d	�\}}t||ƒ t||ƒ d S )
NrE   rŽ  rF   ru   rÙ  r  i½ÿÿÿrÎ  r‘  rÏ  rÐ  rS   rS   rT   Útest_short_x_IIR&  s    
z"_TestLinearFilter.test_short_x_IIRc                 C   sr   |   d¡}|  ddg¡}| ¡ }|  ddg¡}| ¡ }|  g d¢¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S r„  ©r}  r|  rG  r"   r   r	   ©rO   ra   rQ   Zb0rP   Úa0rŠ  Úy_frS   rS   rT   Útest_do_not_modify_a_b_IIR3  s    


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sp   |   d¡}|  g d¢¡}| ¡ }|  dg¡}| ¡ }|  g d¢¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S )Nr…  ry  rF   )r   rQ  rE   rF   r@   r   rÓ  rÔ  rS   rS   rT   Útest_do_not_modify_a_b_FIR?  s    


z,_TestLinearFilter.test_do_not_modify_a_b_FIRrP   rÑ  rQ   c                 C   s:   t j d¡}ttt  dg¡t  dg¡|ƒt|||ƒƒ d S )NrG   rÑ  )rj   rÍ   rÐ   r   r"   r   )rO   rP   rQ   r  rS   rS   rT   Útest_scalar_inputK  s
    
þz#_TestLinearFilter.test_scalar_inputN)"r“   r”   r•   r}  r|  r‹  r�  r—  r˜  r�  r£  r¨  rª  rµ  r¾  r¿  rÀ  rÃ  rÄ  rÇ  rÈ  rË  rÌ  rÍ  rÑ  rÒ  r×  rØ  r3  r4  r5  rj   r   rÙ  rS   rS   rS   rT   rz  Ä  s8   		


`rz  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloat32r½   N©r“   r”   r•   rj   rÑ   rS   rS   rS   rT   rÚ  T  s   rÚ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloat64r€   NrÛ  rS   rS   rS   rT   rÜ  X  s   rÜ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloatExtendedró   NrÛ  rS   rS   rS   rT   rÝ  \  s   rÝ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplex64ÚFNrÛ  rS   rS   rS   rT   rÞ  `  s   rÞ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplex128ÚDNrÛ  rS   rS   rS   rT   rà  d  s   rà  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplexExtendedÚGNrÛ  rS   rS   rS   rT   râ  h  s   râ  c                   @   s   e Zd Ze d¡Zdd„ ZdS )ÚTestLinearFilterDecimalr~  c                 C   s   t t|ƒƒS r¶  )r   Ústr©rO   ra   rS   rS   rT   r‚  n  s    zTestLinearFilterDecimal.typeN)r“   r”   r•   rj   rÑ   r‚  rS   rS   rS   rT   rä  k  s   
rä  c                   @   s   e Zd Ze d¡ZeZdS )ÚTestLinearFilterObjectr~  N)r“   r”   r•   rj   rÑ   r,  r‚  rS   rS   rS   rT   rç  r  s   
rç  c                   C   sj   t tdƒrdtjv rt d¡ tttdgdgg d¢ƒ tttdgd gg d¢ƒ tttd gdgg d¢ƒ d S )NÚabiflagsr€   z'test is flaky when run with python3-dbgrÑ  )rÑ  Nr  ©rÑ  r  r  )rþ  rÿ  rè  r3  Úskipr�   r÷  r"   rS   rS   rS   rT   Útest_lfilter_bad_objectw  s
    
rë  c                   C   s    t ttddgddgg d¢ƒ d S )NrF   r@   rA   rB   )rE   rF   r@   rA   rB   )r�   ÚNotImplementedErrorr"   rS   rS   rS   rT   Ú!test_lfilter_notimplemented_input�  s    rí  Údtc                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestCorrelateRealc                 C   sF   t  ddd¡ |¡}t  ddd¡ |¡}t  g d¢¡ |¡}|||fS )Nr   r@   rA   rE   rF   )r   rF   rB   r‚   r@   )rj   r:  rÓ   r   ©rO   rî  rP   rQ   rŠ  rS   rS   rT   Ú_setup_rank1‹  s    zTestCorrelateReal._setup_rank1c                 C   sH   d}z,t  |¡}t|dƒr.tdt  |j¡ ƒ}W n tyB   Y n0 |S )NrC   Ú
resolutionr†  )rj   Úfinforþ  rh  Úlog10rò  Ú	Exception)rO   Úres_dtr  Zdt_inforS   rS   rT   Úequal_tolerance’  s    

z!TestCorrelateReal.equal_tolerancec                 C   s$   |t jkr|  t j¡S |  |¡S d S r¶  )rj   rÕ  r÷  r¯   )rO   rö  rS   rS   rT   Úequal_tolerance_fft�  s    
z%TestCorrelateReal.equal_tolerance_fftc                 C   sž   |t kr*tt dƒgt dƒgƒ}t|dƒ np|  |¡\}}}t||dd�}t||dd�}t|||  |j¡d� t|||  |j¡d� t|j|ƒ t|j|ƒ d S )NrA   r@   rg   r   rh   r  )	r   r   r	   Ú_setup_rank3r   r   rø  rÑ   r÷  )rO   rî  ri   rP   rQ   rŠ  Zy_fftZy_directrS   rS   rT   Útest_method¥  s     
þ
þzTestCorrelateReal.test_methodc                 C   sr   |   |¡\}}}t||dƒ}t||dd… ƒ t|j|ƒ t||dƒ}t||dd… d d d… ƒ t|j|ƒ d S )Nr‡   rE   rA   r„   ©rñ  r   r   r	   rÑ   ©rO   rî  rP   rQ   rŠ  rb   rS   rS   rT   Útest_rank1_valid·  s    z"TestCorrelateReal.test_rank1_validc                 C   s>   |   |¡\}}}t||dƒ}t||d d… ƒ t|j|ƒ d S )NrW   r„   rû  rü  rS   rS   rT   Útest_rank1_sameÂ  s    z!TestCorrelateReal.test_rank1_samec                 C   s6   |   |¡\}}}t||dƒ}t||ƒ t|j|ƒ d S )Nr†   rû  rü  rS   rS   rT   Útest_rank1_fullÈ  s    
z!TestCorrelateReal.test_rank1_fullc              
   C   sÌ   t  ddd¡jddd� |¡}t  ddd¡jd	dd� |¡}tg d
¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢ggt jd� |¡}|||fS )Nr   rç  rú   )rF   rA   rB   rß  )ÚorderrK   rø   rs   )rR  g      g@g     €@g     €Œ@ç     @•@g     À‹@g     €}@g      d@)g      G@g      {@g     ˜�@g     Àœ@g     à¤@ç     ˆš@g      ‹@g      p@)ç     À`@g      ‡@g     ø™@g      ¥@ç      ®@g     ä¢@g     @’@g      s@)g     @p@g     À�@g     0ž@g     à§@g     p°@g     (¤@g     `“@g     Àt@)g     @i@g     À„@ç     (”@g      Ÿ@g      ¥@g     Ø˜@g     @†@g     Àb@)g     €\@g     €u@g     „@g      Ž@g      ”@g     °†@g     €r@g      C@)g      7@g      y@g     ,�@ç      œ@g     ¥@g     $›@g     @Œ@g     Pr@)r  g     ÀŒ@g     ì @g     À¬@g      ´@g     Ô©@g      ™@g      }@)g     Pt@g      ˜@g     Rª@g     ˆµ@g     (¾@g     K²@g      ¡@g     ¸€@)g     Ø�@g     °ž@g     f®@g     °·@g     (À@g     }³@g     (¢@g     ¨�@)g      {@r  g     4¤@r  g     �´@g     Ü§@g     €”@ç     Àl@)g      n@g     à…@g     ”@g     €�@g     €£@g     œ•@g      €@r  )g      6@g     Àj@g     €€@g      Œ@g     Ð”@g     pŠ@g     àz@g     €`@)g     €U@g     @~@g     (‘@r  g     P¤@g     ™@g      ˆ@g     Ài@)g     €g@g     ‰@r  g     X¥@g     ˜­@g      ¡@g     Ð�@g     @k@)g     @s@g     p�@g     xž@g     h§@g     ¨¯@g     À¢@g     Ø�@r  )r  g      …@r  g      ž@g     ¤@g     È–@g      ‚@g     €S@)g     €_@g      v@g     àƒ@g     àŒ@g     ð’@g     p„@g     @m@rR  rá   )rj   r:  rk   rÓ   r   r¯   rð  rS   rS   rT   rù  Î  sB    ÿÿûûûòììzTestCorrelateReal._setup_rank3c                 C   s    |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ t||dƒ}t||dd…dd…dd…f d d d…d d d…d d d…f ƒ t|j|ƒ d S )Nr‡   rE   rF   rA   r@   rB   r„   ©rù  r   r   r	   rÑ   rü  rS   rS   rT   Útest_rank3_validì  s     <z"TestCorrelateReal.test_rank3_validc                 C   sL   |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ d S )NrW   r   r„   rE   rZ  r  rü  rS   rS   rT   Útest_rank3_same÷  s     z!TestCorrelateReal.test_rank3_samec                 C   s4   |   |¡\}}}t||ƒ}t||ƒ t|j|ƒ d S r¶  r  rü  rS   rS   rT   Útest_rank3_allý  s    

z TestCorrelateReal.test_rank3_allN)r“   r”   r•   rñ  r÷  rø  rú  rý  rþ  rÿ  rù  r	  r
  r  rS   rS   rS   rT   rï  †  s   rï  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestCorrelatec                 C   sh   t  dd¡ d¡}t  dd¡ d¡}tttg||f¢R i ddi¤Ž tttg||f¢R i ddi¤Ž d S r¨   )rj   r   rk   r�   r�   r   r‘   rS   rS   rT   r¬     s     z!TestCorrelate.test_invalid_shapesc                 C   sv   g d¢}g d¢}t tt||dd� t tt||ddd� t tt||dd	d� t tt||d
dd� t tt||ddd� d S rŠ   ©r�   r�   r   r‘   rS   rS   rT   r’     s    z!TestCorrelate.test_invalid_paramsc                 C   sx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S rã   r  rä   rS   rS   rT   rå     s    z"TestCorrelate.test_mismatched_dimsc                 C   s‚   g d¢}ddg}t t||dd�g d¢ƒ g d¢}g d¢}t t||dd�g d¢ƒ t t||d	d�g d
¢ƒ t t||dd�dgƒ d S )NrD   rA   rB   rW   rX   )rB   é   rK   rt   )rw   rJ   rK   r†   )rC   rw   rJ   rK   rL   r‡   rJ   )r   r   r‘   rS   rS   rT   Útest_numpy_fastpath%  s    z!TestCorrelate.test_numpy_fastpathN)r“   r”   r•   r¬   r’   rå   r  rS   rS   rS   rT   r    s   		r  rY   ©r‡   rW   r†   ÚbehindTFÚ
input_size)r­   r(  r?  r@  r–  i'  c                 C   sœ   t j d¡}| |¡}t|d ƒ}|rBt  | |¡|g¡}| }n||d … }|}t||| d�}t|j|j| d�}	t  	|¡}
t
|	|
 |ƒ t
|	j|jƒ d S )Nr   rG   rX   )rj   rÍ   r¥  r›  rh  Úconcatenater   r   r¼   Zargmaxr	   rA  )rY   r  r  r¡  Zin1ÚoffsetZin2rŸ   ZcorrelationZlagsZ	lag_indexrS   rS   rT   Útest_correlation_lags1  s    

r  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestCorrelateComplexc                 C   s(   |t jkrt j}tdt  |¡j d ƒS )NrF   r@   )rj   rÖ  Úcdoublerh  ró  Ú	precision)rO   rî  rS   rS   rT   r  V  s    
zTestCorrelateComplex.decimalc                 C   sÆ   t j d¡ t j d¡ |¡}|dt j d¡ |¡ 7 }t j d¡ |¡}|dt j d¡ |¡ 7 }t|j|j|d�t|j|j|d�  |¡}|dt|j|j|d� t|j|j|d�  7 }|||fS )Nrë   rG   rƒ   r‚   rX   )rj   rÍ   rÎ   rÐ   rÓ   r   r<  Úimag)rO   rî  rY   rP   rQ   rŠ  rS   rS   rT   rñ  [  s    ÿÿÿz!TestCorrelateComplex._setup_rank1c                 C   s|   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ t||dƒ}t||d d d…  ¡ |  |¡d� t|j|ƒ d S )Nr‡   r  r„   )rñ  r   r   r  r	   rÑ   Úconjrü  rS   rS   rT   rý  h  s    "z%TestCorrelateComplex.test_rank1_validc                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )NrW   r  ©rñ  r   r   r  r	   rÑ   rü  rS   rS   rT   rþ  s  s    z$TestCorrelateComplex.test_rank1_samec                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )Nr†   r  r  rü  rS   rS   rT   rÿ  y  s    z$TestCorrelateComplex.test_rank1_fullc                 C   s@   t jg d¢|d�}t jg d¢|d�}t||ƒ}t|g d¢ƒ d S )N©r…   r]   rW  rá   ©y      ð?      @y       @      @y      @      @y      @      @)r…   ù      $@       Àù      <@      Àù      6@      Ày      0@      Ày       @      À)rj   r   r   r	   ©rO   rî  r€   Úkrb   rS   rS   rT   Útest_swap_full  s    
z#TestCorrelateComplex.test_swap_fullc                 C   s0   g d¢}g d¢}t ||dd�}t|g d¢ƒ d S )Nr  r  rW   rX   )r  r  r   )r   r	   r!  rS   rS   rT   Útest_swap_same…  s    z#TestCorrelateComplex.test_swap_samec                 C   sä   t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt|j|jƒ t|j|jƒ  7 }t||dƒ}t|||  |¡d d� t	|j
|ƒ d S )	NrG   r‚   rC   rƒ   rA   r†   rE   r  )rj   rÍ   rÐ   rÓ   r   r<  r  r   r  r	   rÑ   rü  rS   rS   rT   Ú
test_rank3‹  s    ÿÿ&zTestCorrelateComplex.test_rank3c                 C   s8  t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt  t|j|jƒ t|j|jƒ ¡ 7 }t||dƒ}t|||  	|¡d d� t
|j|ƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ d S )Nrƒ   r†   rE   r  r`   ù              @rA   )rj   r   rÍ   rÐ   rÓ   r   r<  r  r   r  r	   rÑ   rü  rS   rS   rT   Ú
test_rank0™  s$    ÿÿÿ
zTestCorrelateComplex.test_rank0N)r“   r”   r•   r  rñ  rý  rþ  rÿ  r#  r$  r%  r'  rS   rS   rS   rT   r  M  s   	r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCorrelate2dc              	   C   sÊ   t  d¡}t  g d¢¡}dD ]¨}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ |dkrtt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )NrB   r9  r:  rX   r‡   )rj   r   r   r
   r   r   r;  r   r<  rS   rS   rT   Ú test_consistency_correlate_funcs¯  s(    
ÿÿþÿÿþz0TestCorrelate2d.test_consistency_correlate_funcsc                 C   sl   t  dd¡ d¡}t  dd¡ d¡}tttjg||f¢R i ddi¤Ž tttjg||f¢R i ddi¤Ž d S r¨   )rj   r   rk   r�   r�   r   r   r‘   rS   rS   rT   r¬   Â  s    "z#TestCorrelate2d.test_invalid_shapesc                 C   sR   t t dggdgg¡dƒ t t dggdgg¡dƒ t t dggdgg¡dƒ d S )NrE   r`   ù       €       Àr&  rC   rA   y              (@)r	   r   r   rä   rS   rS   rT   Útest_complex_inputÎ  s    z"TestCorrelate2d.test_complex_inputN)r“   r”   r•   r)  r¬   r+  rS   rS   rS   rT   r(  ­  s   r(  c                   @   s:   e Zd Zdd„ Zdd„ Zej dej	ej
g¡dd„ ƒZdS )	ÚTestLFilterZIc                 C   sB   t  g d¢¡}t  g d¢¡}t  ddg¡}t||ƒ}t||ƒ d S )N)rÑ  r  rQ  )rÑ  rR  r  rù  r  )rj   r   r#   r   )rO   rP   rQ   Zzi_expectedr’  rS   rS   rT   rU   Ö  s
    
zTestLFilterZI.test_basicc                 C   sJ   t  g d¢¡}t  g d¢¡}t||ƒ}td| d| ƒ}t||dd� d S )N)rF   r‚   rB   )rE   rE   r‚   rF   rU  r‹  )rj   r   r#   r   )rO   rQ   rP   r¸  Zzi2rS   rS   rT   Útest_scale_invarianceÝ  s
    
z#TestLFilterZI.test_scale_invariancerÑ   c                 C   s<   t jd|d�}t jdg|d�}tt  t ||¡¡j|ƒ d S )Nr‚   rá   rE   )rj   rD  r   r	   r<  r   r#   rÑ   )rO   rÑ   rQ   rP   rS   rS   rT   rï  æ  s    zTestLFilterZI.test_typesN)r“   r”   r•   rU   r-  r3  r4  r5  rj   r²   r¯   rï  rS   rS   rS   rT   r,  Ô  s   	r,  c                   @   sJ   e Zd ZdZddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFiltFiltÚtfr„   ÚoddNr1  c              	   C   sR   | j dkr,t|Ž \}}	t||	||||||ƒS | j dkrNt|Ž }
t|
||||ƒS d S )Nr/  Úsos)Úfiltfilt_kindr&   r$   r'   r.   )rO   Úzpkra   r2  r/  Úpadlenri   ÚirlenrQ   rP   r1  rS   rS   rT   r$   ð  s    

zTestFiltFilt.filtfiltc                 C   s:   t g d¢g d¢ƒ}|  |t d¡¡}t|tdƒdd� d S )NrD   rL   g6Â‹{ðÍ=r—  )r0   r$   rj   r   r   )rO   r3  r    rS   rS   rT   rU   ù  s    zTestFiltFilt.test_basicc                 C   s*  d}t  dd|d ¡}t  dt j | ¡}t  dt j | ¡}|| }tddd	d
�}t  |d ¡ ¡ }d}tt  t  	|¡t  	|¡ ¡ƒ}	| j
|||	d�}
t  |
| ¡ ¡ }t|dk ƒ t  ||| g¡}| j
|||	dd�}t|j|jƒ t  || ¡ ¡ }t|dk ƒ | j
||j|	dd�}t||jƒ d S )NiÐ  r   rÑ  rE   rG   iô  r‚   ç      À?r3  rÂ  rË   )r4  rÆ   ©r4  r2  )rj   r:  r=  rW  r%   rª  rX  rh  ÚceilÚlogr$   r   Úvstackr	   rA  rv  )rO   r[  rÄ   ZxlowZxhighra   r3  ÚrÚepsrÕ   rb   ÚerrZx2dZy2dZy2dtrS   rS   rT   Ú	test_sineþ  s&    zTestFiltFilt.test_sinec                 C   s˜   t  d¡ ddd¡}tdddd�}| j||d	d	d
�}| j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ | j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ d S )Ng      ”@rG   r“  rL   r@   r6  r3  rÂ  r   r7  rE   rF   )rj   r   rk   r%   r$   r”  r   )rO   ra   r3  Zy0Úy1rt  rS   rS   rT   Ú	test_axis 	  s    zTestFiltFilt.test_axisc                 C   s@   | j dkrd S t ddgdt d¡¡}t|t d¡ddd� d S )Nr/  rQ  rE   rG   ç›+¡†›„=rÇ   )r2  r   r$   rj   r   r   )rO   r    rS   rS   rT   Útest_acoeff*	  s    
zTestFiltFilt.test_acoeffc                 C   sò   | j dkrt d¡ t ddg¡}t dg¡}t ddg¡}t|||ƒ\}}}t|d |d gd|d  d	|d
   d	|d  d|d
   gƒ t||d d|d   d|d   d|d
   d|d  |d  d|d   d|d
   gƒ d S )Nr/  ú$gust only implemented for TF systemsrÑ  r  rQ  r†  r   rS  rš  rE   ç      Ð?r6  )r2  r3  rê  rj   r   r7   r   )rO   ra   rQ   rP   rb   Úz1Úz2rS   rS   rT   Útest_gust_simple1	  s    

.ÿ.*ÿzTestFiltFilt.test_gust_simplec                 C   sT   | j dkrt d¡ t d¡}d}d}t|||dd�}|| d | }t||ƒ d S )	Nr/  rC  rL   r  r  Úgustrh   rF   )r2  r3  rê  rj   r   r$   r   )rO   ra   rQ   rP   rb   rŸ   rS   rS   rT   Útest_gust_scalars?	  s    


zTestFiltFilt.test_gust_scalars)r„   r0  Nr1  N)r“   r”   r•   r2  r$   rU   r>  r@  rB  rG  rI  rS   rS   rS   rT   r.  í  s     ÿ
	"
r.  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSOSFiltFiltr1  c           	      C   st   t j d¡ d¡}tddƒD ]R}tj|ddd�}t|Ž \}}t|Ž }t	|||ƒ}t
||ƒ}t||dd	| d
� qdS )z1Test equivalence between sosfiltfilt and filtfiltr   r?  rE   rC   çffffffÖ?r3  rÂ  rU  zorder=%s)rÉ   Úerr_msgN)rj   rÍ   r¥  rÐ   rl   r   r%   r&   r'   r$   r.   r   )	rO   ra   r   r3  rQ   rP   r1  rb   Úy_sosrS   rS   rT   Útest_equivalenceP	  s    
z TestSOSFiltFilt.test_equivalenceN)r“   r”   r•   r2  rN  rS   rS   rS   rT   rJ  M	  s   rJ  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rštd| ƒ‚|d|… }||d… }t| ||ddd… |d�d ddd… }t| |||d�d }|||fS )aQ  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significantly faster than this implementation.
    c                 S   s¼   t t|ƒt|ƒƒd }| d|… }| |d… }t||||d�d }t|||ddd… |d�d ddd… }t|||ddd… |d�d ddd… }	t|||	|d�d }
t ||
 d ¡}|S )z-Objective function used in filtfilt_gust_opt.rE   Nr‘  r   r„   rF   )rX  rp  r"   rj   Úsum)ÚicsrQ   rP   ra   ÚmÚz0fÚz0brÖ  Zy_fbÚy_bZy_bfÚvaluerS   rS   rT   Úfiltfilt_gust_opt_funce	  s    ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrE   NrŠ  rU  r–  TF)rÖ   ZxtolZftolZmaxfunÚmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr„   r‘  )	rX  rp  r#   rj   r  r   r   r¨  r"   )rQ   rP   ra   rV  rQ  r’  rP  r&  ÚoptZfoptZniterZfuncallsZwarnflagrR  rS  rT  rb   rS   rS   rT   Úfiltfilt_gust_opt\	  s&    	
0ýÿ(rY  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| ||
| ƒ\||< ||< ||< q²t  |d|¡}t  |d|¡}t  |d|¡}t||d	d
d� t||d	d
d� t||d	d
d� t|	|d	d
d� d S )Nr‘  rH  )r2  ri   r5  )r2  r5  r„   rE   c                 S   s   g | ]}t |ƒ‘qS rS   )rl   )rµ   r€   rS   rS   rT   r¹   œ	  rÅ   z'check_filtfilt_gust.<locals>.<listcomp>rÌ   r9  rÇ   )rj   rÍ   rÎ   rÐ   r$   r7   r”  rA  Z
empty_likerX  rp  r�  r   rY  r   )rQ   rP   rA  r2  r5  ra   rb   ZygZzg1Zzg2ÚxxZ	out_shaper-  rQ  Zzo1Zzo2ZindxrS   rS   rT   Úcheck_filtfilt_gustˆ	  s&    
$r[  c                  C   sN  dD �]B} dD ]”}d\}}}t jj|f| Ž }t jj|f| Ž }t||| d�}t||ƒ t||| dd�\}}	t|dv ƒ tt|	tƒƒ td|	 ¡ v ožd	|	 ¡ v ƒ qd
}dD ]8}
t	t |
ƒr¬t j
||
d�}| ¡ }tt||| d�d	ƒ q¬t jdgt jd�}| ¡ }tt||| d�d	ƒ tdƒtdƒg}tdƒtdƒg}tt||| d�d	ƒ qd S )Nr  )rE   rF   )r‚   rC   rg   rX   T)rY   Úmeasure>   r   rg   r   rg   rG   )Z
complex256Z
complex192rá   l         @ r@   rF   rE   rA   )rj   rÍ   rÐ   r   r	   r   Ú
isinstanceÚdictÚkeysrþ  r$  rG  r   r±   r   )rY   r²  rÕ   r"  Ztrue_methodra   rò   ri   Z
method_tryÚtimesZnot_fft_conv_supprS   rS   rT   Útest_choose_conv_method¨	  s.    



ra  c                  C   sà   t jdddddd�\} }}d}t t |¡¡}tt t |¡t |¡ ¡ƒ}tj 	d¡ t
| ||ƒ\}}d |fD ]L}d	| }	t|||	fd
|ƒ tdƒD ]$}
g d¢}|	||
< t||||
|ƒ q–qpd| d }t|||fd
|ƒ d S )Nr@   ç{®Gáz„?éx   gffffff¶?r3  rÂ  rŠ  r‘  rB   r   )rF   rF   rF   rF   rÛ   )r   Zelliprj   rX  rª  rh  r8  r9  rÍ   rÎ   r&   r[  rl   )rc   Úpr"  r<  r;  Zapprox_impulse_lenrQ   rP   r5  Z
signal_lenr2  rA  ÚlengthrS   rS   rT   Útest_filtfilt_gustÇ	  s    rf  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDecimatec                 C   s6   t  d¡}tttj|ddd� tttj|ddd� d S )NrL   rQ  rE   )ÚqrÕ   rF   )rj   r   r�   r÷  r   Údecimateræ  rS   rS   rT   Útest_bad_argsç	  s    
zTestDecimate.test_bad_argsc                 C   s:   t  d¡}tj|ddddd� ¡ }t||d d d… ƒ d S )NrL   rF   rE   ÚiirF©rÕ   ÚftypeÚ
zero_phase©rj   r   r   ri  Úroundr   ©rO   ra   rb   rS   rS   rT   Útest_basic_IIRì	  s    
zTestDecimate.test_basic_IIRc                 C   s:   t  d¡}tj|ddddd� ¡ }t||d d d… ƒ d S )NrL   rF   rE   ÚfirFrl  ro  rq  rS   rS   rT   Útest_basic_FIRñ	  s    
zTestDecimate.test_basic_FIRc                 C   sJ   t  d¡}tj|dddd�}t|jdƒ tj|dddd�}t|jdƒ d S )	N)rx   rx   rF   r   F)r2  rn  )rÜ  rx   rE   )rx   rÜ  )rj   rD  r   ri  r	   rA  )rO   rc   Zd0Zd1rS   rS   rT   Ú
test_shapeö	  s
    
zTestDecimate.test_shapec                 C   sD   t ƒ �*}| td¡ | jddd� W d   ƒ n1 s60    Y  d S )NúBadly conditioned filterrs  F©ri   rn  ©r   r  r1   Ú_test_phaseshift©rO   r  rS   rS   rT   Útest_phaseshift_FIRþ	  s    z TestDecimate.test_phaseshift_FIRc                 C   sD   t ƒ �*}| td¡ | jddd� W d   ƒ n1 s60    Y  d S )Nrv  rs  Trw  rx  rz  rS   rS   rT   Útest_zero_phase_FIR
  s    z TestDecimate.test_zero_phase_FIRc                 C   s   | j ddd� d S )Nrk  Frw  ©ry  rä   rS   rS   rT   Útest_phaseshift_IIR
  s    z TestDecimate.test_phaseshift_IIRc                 C   s   | j ddd� d S )Nrk  Trw  r}  rä   rS   rS   rT   Útest_zero_phase_IIR
  s    z TestDecimate.test_zero_phase_IIRc                 C   sð  d}g d¢}d}t  || d ¡t|ƒ }t  |¡d d }t  dt j |d d …t jf  | ¡tj 	|j
d¡ }|D �]r}	||	 }
t  |	| d ¡t|	ƒ }t  dt j |d d …t jf  | ¡tj 	|j
d¡ }|d	k�rd
}t tj|d d|
 dd�d¡}n6|dk�r:d}dt j |
 }tjt |d|t j ¡Ž }|du �rxt |j|j|| d t j ¡\}}|t  |¡ }n
t  |¡}tj|j|
|||d�}t j| ¡ | dd�}|t  |¡ }|d|	 k }tt  | ¡ | ¡| dddd� qvd S )Nrc  )rÜ  rÚ   rx   rú   r­   rE   çš™™™™™é?rF   r`   çš™™™™™¹?rs  rx   rÑ  r8  r+  rk  r‚   gš™™™™™©?F©rm  rn  r„   rP  rQ  r   rÊ   rg  )rj   r   r,  r   ru  rW  rV  r   ÚwindowsZtukeyr¼   Údltirž  Zcheby1Zfreqzr6  Zdenrª  Z	ones_likeri  r<  rO  r  r   Úangle)rO   ri   rn  r[  r\  Zt_totrÄ   r]  r€   r^  rh  r_  Zd_tosrÕ   ÚsystemÚwcÚ_Zh_respsr`  Z	h_resampsZsubnyqrS   rS   rT   ry  
  sP    $ÿ
$ÿ
ÿÿ

ÿ
ÿÿzTestDecimate._test_phaseshiftc                 C   s|   d}d}t  |¡| }t  d| ¡t  dt j |d  | ¡ }tt j |¡ddd� tj	|d	d
d�}t
t j |¡dƒ d S )Ng      Y@r?  r  rF   g      >@rÑ  rÊ   r‹  rx   rs  )rm  rb  )rj   r   Úsqrtr=  rW  r   ZlinalgZnormr   ri  r   )rO   ZsfreqrÕ   rÄ   ra   Zx_outrS   rS   rT   Útest_auto_n>
  s    *zTestDecimate.test_auto_nc                 C   s.   t  tjdtjd�d¡}tt |¡ƒr*J ‚d S )Nr–  rá   rG   )r   ri  rj   r$  r²   rÔ   Úisnanræ  rS   rS   rT   Útest_long_float32J
  s    zTestDecimate.test_long_float32c                 C   s.   t  tjdtjd�d¡}|jjtjks*J ‚d S )Nr­   rá   rG   )r   ri  rj   r$  r´   rÑ   r‚  r¯   ræ  rS   rS   rT   Útest_float16_upcastP
  s    z TestDecimate.test_float16_upcastc                 C   sX  d}d}d}t jddtj | d d|d�\}}}| t¡t dtj | | ¡ }| t¡t dtj | | ¡ }t  |||¡}t d¡| }t dtj | | ¡d	t d
tj | | ¡  }	t j	|	d|dd�}
t j
g t  |||¡¢|	‘R Ž d d d… }t|
|ƒ t j	|	d|dd�}t jg t  |||¡¢|	‘R Ž d d d… }t||ddd� d S )NrÛ   rB   ç     @�@rF   r3  )r  Úfsr`   r™  rQ  r*  Fr‚  TrŠ  ç‚vIhÂ%<=rÇ   )r   r%   rj   rW  rÓ   rõ   ru  r„  r   ri  r"   r&   r	   r$   r   )rO   ÚfcentreÚfwidthr�  rc   rd  r"  r†  rÄ   r¾   ÚynzpÚynzprefÚyzpÚyzprefrS   rS   rT   Útest_complex_iir_dltiU
  s2    &""ÿÿÿ
ÿÿz"TestDecimate.test_complex_iir_dltic                 C   s  d}d}d}d}t j||d |d�}t |¡}|t dtj | | ¡ }|d t |¡ }t  |d	¡}	t d
¡| }
t dtj | |
 ¡dt dtj | |
 ¡  }t j	|d|	dd�}t j
||d	dd�d d… }t||ƒ t j	|d|	dd�}t j|d	d|d�}t||ƒ d S )NrÛ   rB   rŽ  rÚ   rF   )r�  r`   r   rE   r™  rQ  r*  Fr‚  )ra  rb  r­   Tr+  )r   rž  rj   Úrootsru  rW  Úpolyr„  r   ri  Zupfirdnr	   r4  )rO   r‘  r’  r�  ZnumtapsZbbaseZzbaseZzrotZbzr†  rÄ   r¾   r“  r”  r•  r–  rS   rS   rT   Útest_complex_fir_dltiu
  s&    
ÿ
z"TestDecimate.test_complex_fir_dltiN)r“   r”   r•   rj  rr  rt  ru  r{  r|  r~  r  ry  rŠ  rŒ  r�  r—  rš  rS   rS   rS   rT   rg  æ	  s   0 rg  c                   @   sB   e Zd Zdd„ Zdd„ Zdd„ Zej de	j
e	jg¡dd	„ ƒZd
S )ÚTestHilbertc                 C   s6   t  dg¡}ttt|ƒ t  d¡}ttt|dd� d S )Nr�   r)  r   ©r  )rj   r   r�   r�   r    r   ræ  rS   rS   rT   rj  œ
  s    
zTestHilbert.test_bad_argsc                 C   sj  d}t j}t  dd| |d ¡}t  |¡}t  |¡}t  d| ¡}t  d| ¡}t  ||||g¡}t|ƒ}	t  |	¡}
t  |	¡}t  	|	¡}t
|||ƒ t
|
t  |j¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|	d j||ƒ d S )Nr  r   rF   r'  rE   r&  r@   )rj   rW  r   r=  r;  r:  r    rª  r…  r<  r
   r$  rA  r  )rO   r  rW  rÄ   rÕ  Úa1Úa2Úa3rP   rò   Zh_absZh_angleZh_realrS   rS   rT   Útest_hilbert_theoretical¢
  s:    




þ ÿþ ÿz$TestHilbert.test_hilbert_theoreticalc                 C   sª   t  d¡ dd¡}t|dd�}tt|jdd�|jƒ tt|d ƒ|d dƒ t|ddd	�}t|jddgƒ tt|jddd	�jddgƒ t  g d
¢¡}t|d |ddƒ d S )NrØ  r@   rC   r„   rP  r   r  rÚ   )r  r2  )y        Bm}¶Ä…û¿y      ð?ðãâa Àyûÿÿÿÿÿÿ?¥®0fÓóÀy      @Wëa©94ô¿y      @"nÈWñ¿y      @‡hûIX@yš™™™™™™<ÃnmÑèÃ@yåFˆ8›¼ûO2k{…ï?yœ™™™™™©¼Ú‰o�íPõ?yÎÌÌÌÌÌ¼¼ùYC›à?y433333£<c4¸Qõeå?yðÈ’40¡¼òŒ³p$Î?yœ™™™™™©¼E¥SÐUÒ?yffffff¶<‚?Žüó7 ?y433333£<wE¶oÿ¼“¿y�!5P±¼àÐ{Ø3'Å¿y        _úN@Õ¿yš™™™™™¹<Ú}§ØÙ¿yš™™™™™™<§‚-cè¿yåFˆ8›<“Á2OW\é¿zN regression)	rj   r   rk   r    r	   rv  r
   rA  r   )rO   rP   ZaaZaanZa0hilbrS   rS   rT   Útest_hilbert_axisNË
  s    zTestHilbert.test_hilbert_axisNrÑ   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )Nr‚   rá   )rj   rD  r	   r<  r   r    rÑ   rí  rS   rS   rT   Útest_hilbert_typesð
  s    zTestHilbert.test_hilbert_typesN)r“   r”   r•   rj  r   r¡  r3  r4  r5  rj   r²   r¯   r¢  rS   rS   rS   rT   r›  š
  s
   )%r›  c                   @   s2   e Zd Zdd„ Zej dejej	g¡dd„ ƒZ
dS )ÚTestHilbert2c                 C   s€   t  dgg¡}ttt|ƒ t  d¡ ddd¡}ttt|ƒ t  d¡ dd¡}ttt|dd� ttt|d	d� ttt|d
d� d S )Nr�   rø   rF   r@   rA   rv   r   rœ  )rF   r   )rF   )rj   r   r�   r�   r!   r   rk   ræ  rS   rS   rT   rj  ø
  s    zTestHilbert2.test_bad_argsrÑ   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )N)rF   rJ   rá   )rj   rD  r	   r<  r   r!   rÑ   rí  rS   rS   rT   Útest_hilbert2_types  s    z TestHilbert2.test_hilbert2_typesN)r“   r”   r•   rj  r3  r4  r5  rj   r²   r¯   r¤  rS   rS   rS   rT   r£  ö
  s   r£  c                   @   s’   e Zd Zed#dd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )$ÚTestPartialFractionExpansionru   c                 C   s„   t  |¡}t  |¡}t  t|d d …d f | ƒt| d d …d f | ƒ¡}t|ƒ\}}t|| || |d� t| | || |d� d S )Nr  )rj   r€  Úhypotrª  r   r
   )r;  rd  Zr_trueZp_truer  ZdistanceÚrowsÚcolsrS   rS   rT   Úassert_rp_almost_equal  s    

ÿz3TestPartialFractionExpansion.assert_rp_almost_equalc                 C   sP  t g d¢g d¢ƒ\}}tt|ƒdƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d	¢¡ƒ t|t g d
¢¡ƒ t g d¢g d¢dd�\}}tt|ƒdƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d	¢¡ƒ t|t g d
¢¡ƒ d S )NrD   ru  r@   r   )rF   rF   r@   rE   )rE   rE   rE   r@   rF   )rE   rE   rE   rF   rF   )rE   rE   rE   rF   rF   r@   T)Zinclude_powersrC   )rE   rE   rF   rF   r@   )rE   rF   rF   r@   )rE   rE   rE   rF   r@   rA   rB   )r8   r	   rp  r
   rj   r™  )rO   Zfactorsr™  rS   rS   rT   Útest_compute_factors  s"    ÿ
z1TestPartialFractionExpansion.test_compute_factorsc                 C   s4   t g d¢ddƒ\}}t|g d¢ƒ t|g d¢ƒ d S )N)rÑ  gj¼t“ð?g?5^ºIð?r  g /Ý$ @r  r�  Úminré  ru  )r9   r	   ©rO   ÚuniqueÚmultiplicityrS   rS   rT   Útest_group_poles-  s
    
ÿz-TestPartialFractionExpansion.test_group_polesc                 C   s>  t g d¢g d¢ƒ\}}}t|g d¢dd� t|g d¢dd� t|dgdd� t dd	gg d
¢ƒ\}}}t|d	dgƒ t|ddgƒ t|jdƒ t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddgg d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t ddgg d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t g d¢g d¢ƒ\}}}t|g d¢ƒ t|g d¢ƒ t|ddgƒ t dgg d¢ƒ\}}}t|ddgƒ t|dd gƒ t|jdƒ t g d!¢g d"¢ƒ\}}}|  ||g d#¢g d$¢¡ t|jdƒ t g d%¢g d&¢ƒ\}}}|  ||g d'¢g d(¢¡ t|jdƒ t ddgg d)¢ƒ\}}}t|dd*gƒ t|ddgƒ t|jdƒ t g d+¢g d)¢ƒ\}}}t|dd,gƒ t|ddgƒ t|dgƒ t g d-¢g d)¢ƒ\}}}t|d.d/gƒ t|ddgƒ t|d0d1gƒ t g d+¢g d2¢ƒ\}}}|  ||g d3¢g d4¢¡ t|jdƒ d S )5N©rB   r@   rZ  ru   ©r�  r   r‚   r@   )gZd;ßOõ?gîëÀ9#Jå¿g&äƒžÍªö¿rA   r  )gà-� ø1Ú¿gþe÷äa¡ò¿gvqà-ù?g      ô¿r�  r‚   ©rE   rC   r‚   iôÿÿÿrZ  r   rE   )rE   r„   rZ  r@   r„   rF   )rF   g333333Àg®Gáz®ÿ?g–C‹lçûÙ¿)y      2À     @*Ày      2À     @*@g      B@)y      à?š™™™™™É¿y      à?š™™™™™É?gffffffæ?)rE   rB   r‚   rA   )r„   rE   r@   )r„   rZ  rZ  )r@   gš™™™™™ñ¿g)\�Âõ(ì?g^ºI+ÀgÅ °rh‘õ?)rE   gffffffæ¿gìQ¸…ëÁ¿gú~j¼t“¨?)éýÿÿÿrA   rE   )rš  g333333Ó¿r€  )rE   rF   r³  rD  ç      Ð¿r³  )rE   r   r¤  )rE   r   r   r   r„   )rE   y              ø?y       €      ø¿r„   )r„   ù       €      ð¿rƒ   rE   )r@   r‚   rC   ©rE   r@   r@   rE   rD   ©r„   r„   r„   )rE   r³  rF   rB   )rF   r@   r„   r�  )ru   rF   r@   r„   r¥  éE   ru   rK   )rE   r³  rA   rZ  )rA   y      ð¿      @y      ð¿      À)rE   ù      ð?      ð¿r]   )r4   r
   r	   r¼   r©  ©rO   r;  rd  r"  rS   rS   rT   Útest_residue_general3  sp    
þÿ
ÿÿz1TestPartialFractionExpansion.test_residue_generalc                 C   s¾   t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}	t g d¢g d¢ƒ\}
}}t||ƒ t||ƒ t||
ƒ t||ƒ t||ƒ t||ƒ t||ƒ t||	ƒ t||ƒ d S )Nr°  r±  )r   rB   r@   rZ  ru   )r   r�  r   r‚   r@   )r   r   rB   r@   rZ  ru   )r   r   r   r�  r   r‚   r@   )r4   r
   ©rO   Zr0Úp0Zk0Úr1Úp1Zk1Úr2Zp2Zk2Zr3Zp3Zk3rS   rS   rT   Útest_residue_leading_zerosw  s    







z7TestPartialFractionExpansion.test_residue_leading_zerosc                 C   s°   t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W d   ƒ n1 s¢0    Y  d S )Nr   r²  rZ  r�  rE   úDenominator `a` is zero.r  )r4   r
   r	   r¼   r3  r   r�   rº  rS   rS   rT   Útest_resiude_degenerate‡  s    z4TestPartialFractionExpansion.test_resiude_degeneratec                 C   s¸  t g d¢g d¢ƒ\}}}|  ||g d¢g d¢¡ t|dgƒ t g d¢g d¢ƒ\}}}| j||dd	gd
dgdd� t|dgdd� t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t g d¢g d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t g d¢g d¢ƒ\}}}t|ddgƒ t|ddgƒ t|ddgƒ t dgg d¢ƒ\}}}|  ||g d ¢g d!¢¡ t|jdƒ t ddgt dd"gdd#g¡ƒ\}}}t|d$d%gƒ t|d&dgƒ t|jdƒ t g d'¢ddgƒ\}}}t|dgƒ t|dgƒ t|ddgƒ t ddd(gƒ\}}}t|dgƒ t|d)gƒ t|jdƒ t dg d*¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t dg d+¢ƒ\}}}t|ddgƒ t|d#dgƒ t|jdƒ t g d,¢g d'¢ƒ\}}}t|d-d.gƒ t|ddgƒ t|dgƒ t d/dgg d'¢ƒ\}}}t|d0d1gƒ t|ddgƒ t|jdƒ t g d¢g d'¢ƒ\}}}t|d2d3gƒ t|ddgƒ t|d4dgƒ t g d5¢g d6¢ƒ\}}}| j||g d7¢g d8¢dd� t|jdƒ d S )9N)rE   rC   rC   rF   )rE   y       À      ð¿rc  rµ  )y       À      @y      @      @y      À      (À)rƒ   rE   rE   r`   )rE   rF   rE   )rE   r„   g'Â†§WÊÖ?y	Šcîì¿à-� øÀy	Šcîì¿à-� ø@y      à?*©ÐDØÔ?y      à?*©ÐDØÔ¿rA   r  g�Å�1w@rE   r„   )rE   r¤  rC   rF   r@   r   rs   r¶  )rA   r¤  r@   r·  )rE   r�  r�  rA   )rF   rZ  r�  rQ  g      ø¿ç      ø?rØ  )rØ  r@   r�  r„   )g
×£p=
×?g¸…ëQ¸Î?çš™™™™™Ù?)rQ  çUUUUUUÕ¿rÆ  r†  rD  g«ªªªªª
ÀgUUUUUU@r´  ©rE   rZ  rE   rµ  rƒ   )rE   r„   rD  )rE   g      è¿r6  )rE   rC   rF   r�  rë   rC   rZ  r‚   ièÿÿÿrÜ  rG   ry  )rE   r   r   r   r   r„   )yoð…ÉTÁÐ?cÙ=yXÈ?yoð…ÉTÁÐ?cÙ=yXÈ¿rÅ  yjMóŽ£?%uš¾¿yjMóŽ£?%uš¾?)yÙÎ÷Sãé¿s×òAÏâ?yÙÎ÷Sãé¿s×òAÏâ¿rÑ  y-²�ï§ÆÓ?8gDioî?y-²�ï§ÆÓ?8gDioî¿)r5   r©  r
   r	   r¼   rj   Zpolymulrº  rS   rS   rT   Útest_residuez_general–  s†    ÿýÿ$ûz2TestPartialFractionExpansion.test_residuez_generalc                 C   s¾   t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}	t g d¢g d¢ƒ\}
}}t||ƒ t||ƒ t||
ƒ t||ƒ t||ƒ t||ƒ t||ƒ t||	ƒ t||ƒ d S )Nr°  r±  )rB   r@   rZ  ru   r   )r�  r   r‚   r@   r   )rB   r@   rZ  ru   r   r   )r�  r   r‚   r@   r   r   r   )r5   r
   r¼  rS   rS   rT   Útest_residuez_trailing_zerosç  s    







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc                 C   sì   t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W d   ƒ n1 s¢0    Y  tjtdd�� t dg d	¢ƒ W d   ƒ n1 sÞ0    Y  d S )
Nr   r²  rZ  r�  rE   rÂ  r  z6First coefficient of determinant `a` must be non-zero.rÊ  )r5   r
   r	   r¼   r3  r   r�   rº  rS   rS   rT   Útest_residuez_degenerateø  s    (ÿz5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s‚   g d¢}g d¢}g }g d¢}g d¢}dD ]T}t ||||d�\}}t||ƒ t||ƒ t||||d�\}}t||ƒ t||ƒ q(d S )N)rS  çUUUUUUÅ¿gÁ¿)r   rZ  r¤  )r   rE   r@   )rE   ru   rG   r   ©Úavgr   r«  r"  rX  r#  ©Úrtype©r(   r   r)   )	rO   r;  rd  r"  Ú
b_expectedÚ
a_expectedrÏ  rQ   rP   rS   rS   rT   Ú*test_inverse_unique_roots_different_rtypes  s    


zGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s’   g d¢}g d¢}g }g d¢}g d¢}g d¢}dD ]\}t ||||d�\}}	t||dd	� t|	|ƒ t||||d�\}}	t||dd	� t|	|ƒ q0d S )
N©g333333Ã?g9Žã8ŽãÈ¿rË  glÁlÁ¦?©r   rZ  rZ  r¤  )r   r   rE   r@   )rË  gUUUUUUå¿gUUUUUUý?r@   )rE   rë   rø   rÚ   r   rÌ  rÎ  rA  r—  rÐ  )
rO   r;  rd  r"  rÑ  Zb_expected_zrÒ  rÏ  rQ   rP   rS   rS   rT   Ú,test_inverse_repeated_roots_different_rtypes  s    
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc                 C   s”   g d¢}g d¢}g }t jtdd��  t|||dd� W d   ƒ n1 sH0    Y  t jtdd��  t|||dd� W d   ƒ n1 s†0    Y  d S )NrÔ  rÕ  z`rtype` must be one ofr  r!  rÎ  )r3  r   r�   r(   r)   rº  rS   rS   rT   Útest_inverse_bad_rtype/  s    .z3TestPartialFractionExpansion.test_inverse_bad_rtypec                 C   s@   dg}dg}dg}t |||ƒ\}}t|dgƒ t|ddgƒ d S )NrE   rF   r   rÑ  g       À)r)   r   )rO   r;  rd  r"  rQ   rP   rS   rS   rT   Ú test_invresz_one_coefficient_bug8  s    z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc                 C   s
  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgdd	gg d
¢ƒ\}}t|g d¢ƒ t|g d¢ƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgddgddgƒ\}}t|g d¢ƒ t|g d¢ƒ d S )NrE   r„   ©r¹  rF   ù      à?      À©rE   r¿   r]   ©y      @      Ày      !À      Ð?y      @      
@©rE   y       À      ø¿y      à?       @y      à?      à¿rQ  r¹  rW  rD   )rE   ù      ð¿      ð¿ù      ð?       ÀrÚ  rG   ©rE   ù      À      ð¿rA   ©r„   rF   rƒ   r}  rA   rZ  ©r„   r›   r›   r@   r@   r@   )y      @      ð¿y      <À      0@y      D@      OÀy      Y@      8@y     @rÀ     `k@y      h@     ÀpÀ©rE   y      (À       @y     €J@      4Ày      XÀ      Q@y      ;@      RÀy      [@      KÀy     @TÀ      [@rƒ   rF   )rE   r   r�  r_   rÇ  )r(   r
   ©rO   rQ   rP   rS   rS   rT   Útest_invresA  s"    ÿz(TestPartialFractionExpansion.test_invresc                 C   s
  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgdd	gg d
¢ƒ\}}t|g d¢ƒ t|g d¢ƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgddgddgƒ\}}t|g d¢ƒ t|g d¢ƒ d S )NrE   r„   rÙ  rÛ  rÜ  rÝ  rQ  r¹  rW  rD   )g      @rá  rß  y      ð¿      ÀrL   rà  râ  rã  )rC   y      IÀ      &@y      Y@      RÀy      T@      M@y      vÀ     €l@y     @m@     �rÀrä  rƒ   rF   )rƒ   rE   r³  rF   rÇ  )r)   r
   rå  rS   rS   rT   Útest_invreszY  s"    ÿz)TestPartialFractionExpansion.test_invreszc                 C   s\   t dddƒ\}}t|ddgƒ t|ddgƒ tdddƒ\}}t|ddgƒ t|ddgƒ d S )NrE   r   r„   rF   )r(   r
   r)   rå  rS   rS   rT   Útest_inverse_scalar_argumentsq  s    z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)ru   )r“   r”   r•   Ústaticmethodr©  rª  r¯  r»  rÁ  rÃ  rÈ  rÉ  rÊ  rÓ  rÖ  r×  rØ  ræ  rç  rè  rS   rS   rS   rT   r¥    s"   DQ		r¥  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestVectorstrengthc                 C   s`   t  dg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )NrQ  rù  rÑ  r�  r   rF   ©rj   r   r*   r	   r²  r
   rW  ©rO   ÚeventsÚperiodÚtarg_strengthZ
targ_phaseÚstrengthÚphaserS   rS   rT   Útest_single_1dperiod}  s    
z'TestVectorstrength.test_single_1dperiodc                 C   st   t  dg¡}g d¢}dgd }t  g d¢¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )NrQ  )rE   rF   rù  rÑ  r@   )rQ  rD  r�  rE   rF   )rj   r   r*   r	   r²  r   r
   rW  rì  rS   rS   rT   Útest_single_2dperiodŠ  s    

z'TestVectorstrength.test_single_2dperiodc                 C   sb   t  g d¢¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )N©rD  rD  rD  rD  rD  rD  rF   rÑ  r6  r   rë  rì  rS   rS   rT   Útest_equal_1dperiod—  s    
z&TestVectorstrength.test_equal_1dperiodc                 C   sv   t  g d¢¡}ddg}dgd }t  ddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nrô  rE   rF   rÑ  rD  r6  rë  rì  rS   rS   rT   Útest_equal_2dperiod¤  s    

z&TestVectorstrength.test_equal_2dperiodc                 C   sb   t  g d¢¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )N©r�  gš™™™™™ñ?gÍÌÌÌÌÌ @gffffff@g333333$@rE   rÑ  r�  r   rF   rë  rì  rS   rS   rT   Útest_spaced_1dperiod±  s    
z'TestVectorstrength.test_spaced_1dperiodc                 C   sv   t  g d¢¡}ddg}dgd }t  ddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr÷  rE   rQ  rÑ  rF   r�  rš  rë  rì  rS   rS   rT   Útest_spaced_2dperiod¾  s    

z'TestVectorstrength.test_spaced_2dperiodc                 C   sb   t  g d¢¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )N©rD  rQ  ç      è?rE   çUUUUUUÕ?rQ  r   rF   rë  rì  rS   rS   rT   Útest_partial_1dperiodË  s    
z(TestVectorstrength.test_partial_1dperiodc                 C   sv   t  g d¢¡}g d¢}dgd }t  g d¢¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nrú  )rÑ  rÑ  rÑ  rÑ  rü  rA   )rQ  rQ  rQ  rQ  rE   rF   rë  rì  rS   rS   rT   Útest_partial_2dperiodØ  s    

z(TestVectorstrength.test_partial_2dperiodc                 C   sJ   t  g d¢¡}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )N©r   rD  rQ  rû  rÑ  r   ©rj   r   r*   r	   r²  r
   ©rO   rí  rî  rï  rð  rñ  rS   rS   rT   Útest_opposite_1dperiodå  s    z)TestVectorstrength.test_opposite_1dperiodc                 C   sV   t  g d¢¡}dgd }dgd }t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )Nrÿ  rÑ  rG   rR  rE   r   r  rS   rS   rT   Útest_opposite_2dperiodð  s    

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t  ddgg¡}d}ttt||ƒ d S )NrE   rF   rÑ  ©rj   r   r�   r�   r*   ©rO   rí  rî  rS   rS   rT   Útest_2d_events_ValueErrorû  s    z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t  dgg¡}ttt||ƒ d S )NrÑ  rE   r  r  rS   rS   rT   Útest_2d_period_ValueError   s    z,TestVectorstrength.test_2d_period_ValueErrorc                 C   s   d}d}t tt||ƒ d S )NrÑ  r   ©r�   r�   r*   r  rS   rS   rT   Útest_zero_period_ValueError  s    z.TestVectorstrength.test_zero_period_ValueErrorc                 C   s   d}d}t tt||ƒ d S )NrÑ  r„   r  r  rS   rS   rT   Útest_negative_period_ValueError
  s    z2TestVectorstrength.test_negative_period_ValueErrorN)r“   r”   r•   rò  ró  rõ  rö  rø  rù  rý  rþ  r  r  r  r  r	  r
  rS   rS   rS   rT   rê  {  s   rê  rf  c                 C   sF   | j jdkr4t | jd ¡j }|  |¡| |¡ } }t| |||ƒ dS )z1Wrap assert_allclose while casting object arrays.r~  r   N)rÑ   rÒ   rj   r   ZflatrÓ   r   )ÚactualÚdesiredrÈ   rÉ   rÑ   rS   rS   rT   Úassert_allclose_cast  s    r  r  c                 C   s0  t dƒt dƒt dƒg}t dƒt dƒt dƒg}t dƒt dƒt dƒg}t |¡}|jjdks\J ‚tt |t¡t |t¡| t¡ƒ}| tu r˜t|| g|ƒ}nt|||ƒ}t	dd„ |D ƒƒsºJ ‚t
| t¡| t¡ƒ | tu râddg}ntddƒg}tjtdd	�� | |d
diŽ W d   ƒ n1 �s"0    Y  d S )NrE   rF   r@   r~  c                 s   s   | ]}t |tƒV  qd S r¶  )r]  r   )rµ   ra   rS   rS   rT   Ú	<genexpr>$  rÅ   z)test_nonnumeric_dtypes.<locals>.<genexpr>rÑ  zmust be at least 1-Dr  ra   )r   rj   r   rÑ   rÒ   r"   r,  rÓ   r-   Úallr   r,   r3  r   r�   )r  ra   rQ   rP   r  r  rÖ   rS   rS   rT   Útest_nonnumeric_dtypes  s     
"
r  ZfdFDc                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSOSFiltc                 C   s  t  ddd¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}t  g d¢¡ |¡}t||ƒ}ttt||ƒ|ƒ|ƒ t  ddg¡ |¡}t  ddg¡ |¡}t  g d	¢¡ |¡}ttt||ƒ|ƒ|ƒ g d
¢}g d¢}t  d¡}t  ||f¡}d|_	t||ƒ}t
|g d¢ƒ d S )Nr   rB   rC   rE   r„   rQ  r†  r‡  rŒ  )rE   rE   r   rÆ  r‚   )rE   rC   )rE   rF   rF   rF   rF   rF   rF   rF   )rj   r:  rÓ   r   r,   r   r-   r$  r  rA  r   )rO   rî  ra   rQ   rP   rŠ  r1  rb   rS   rS   rT   Ú
test_rank14  s"    


zTestSOSFilt.test_rank1c           	      C   sæ   d}t  dt  |¡d t  |¡¡ |¡}| |¡}t  ddg¡ |¡}t  ddg¡ |¡}t jg d¢g d¢g d¢g d¢g|d�}t jg d	¢g d
¢g d¢g d¢g|d�}tt||ƒ|dd�}t||ƒ tt||ƒ|dd�}t||ƒ d S )Nr™  r   rE   r„   rQ  rš  r›  rá   rž  rŸ  r   r¡  rP  )	rj   r:  r{  rk   rÓ   r   r-   r,   r   )	rO   rî  rA  ra   rQ   rP   rœ  r¢  rb   rS   rS   rT   Ú
test_rank2M  s"    $
ÿÿÿ
zTestSOSFilt.test_rank2c           	   
   C   s®   d}t  dt  |¡d t  |¡¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}tt||ƒ|ƒ}t|j	d ƒD ]:}t|j	d ƒD ]&}t
|||f t|||||f ƒƒ q€qnd S )Nr«  r   rE   r„   rQ  )rj   r:  r{  rk   r   rÓ   r-   r,   rl   rA  r   r"   )	rO   rî  rA  ra   rQ   rP   rb   rm   r   rS   rS   rT   r%  a  s    $zTestSOSFilt.test_rank3c                 C   s<  t  ddd¡\}}t  ddd¡\}}t  ddd¡\}}t t ||¡|¡}t t ||¡|¡}	t tj||f tj||f tj||f f¡}
tj d¡ |¡}t	||	|d d… t 
d¡d�\}}tj|t	||	|dd … |d�d	 f }t|t	||	|ƒƒ t|
|d d… t 
d
¡d�\}}tj|t|
|dd … |d�d	 f }t||ƒ t|
ƒ}t d|¡}t|
||d�\}}t|t d¡ƒ t||ƒ d|j |_ttt|
||d� | ¡ }|jd	 dd|jd f|_ttt|
||d d …d d …d d …g d¢f d� t|
||d�\}}t|d t d¡ƒ t|d d …d	d	d d …f |ƒ d S )NrF   rD  Úlowrû  rÛ   rÚ   rC   r‘  r   r«   r‚   r  rE   r„   )r   rE   rE   r  )r   r%   rj   r   r   Zr_rÍ   rŒ  rÓ   r"   rD  r  r-   r/   r$  rA  r�   r�   rG  )rO   rî  Úb1r�  Úb2rž  Zb3rŸ  rQ   rP   r1  ra   Zy_truer’  rM  rb   r–  Zzi_ndrS   rS   rT   Útest_initial_conditionsn  s8    ."& $


ÿz#TestSOSFilt.test_initial_conditionsc                 C   s¼  t j d¡jdddd�}| |¡}tjdddd	�}t|Ž }|jd }d
}t	|jƒ}d||< |g| }t  
|¡}t||||d�\}	}
t||d d …d d…d d …f ||d�\}}t||d d …dd …d d …f ||d�\}}t j||f|d�}t||	ddd� t||
ddd� t|ƒ}|d
dd
g|_||d d …dd
…d d …f  }t||||d�d }t|Ž \}}t||ƒ}d
|jd
g|_||d d …dd
…d d …f  }t|||||d�d }t||ddd� d S )NéŸ   r   rB   )rF   rÜ  r@   r»   rC   rK  r3  rÂ  rE   rF   r§  rP  rŠ  r�  rÇ   )rj   rÍ   r¥  r¦  rÓ   r   r%   r'   rA  r¤  rD  r-   r  r  r/   r&   r#   r¼   r"   )rO   rî  ra   r3  r1  Z	nsectionsr2  ZshpZz0ri  r–  r?  rE  rt  rF  rb   r’  rQ   rP   Zy_tfrS   rS   rT   Ú test_initial_conditions_3d_axis1”  s4    




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c                 C   s°   t  d|¡}t  d¡}t  d¡}tjtdd��  t|||dd� W d   ƒ n1 sT0    Y  d|d d …d	f< tjtd
d��  t|||dd� W d   ƒ n1 s¢0    Y  d S )N)r@   rÜ  r@   )rA   rC   )rA   r@   r@   rF   zshould be all onesr  rE   )r’  r2  rÑ  r@   zInvalid zi shape)rj   r�  rD  r3  r   r�   r-   )rO   rî  ra   r1  r’  rS   rS   rT   Útest_bad_zi_shapeÂ  s    

.zTestSOSFilt.test_bad_zi_shapec                 C   s¼   t jdddd�}t|ƒ}t|t d|¡|d�\}}t||dd� t |d d …d d	…f jd
d�|d d …d	d …f jd
d� ¡}t||dd� t|t d|¡| 	¡ d�\}}t||dd� d S )NrC   rš  r1  rÂ  rú   r‘  r�  r‹  r@   r„   rP  )
r   r%   r/   r-   rj   r$  r  r{  rO  r§  )rO   rî  r1  r’  rb   r–  Ússrˆ  rS   rS   rT   Útest_sosfilt_ziÎ  s    >zTestSOSFilt.test_sosfilt_ziN)
r“   r”   r•   r  r  r%  r  r  r  r  rS   rS   rS   rT   r  0  s   &.r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDeconvolvec                 C   s6   g d¢}ddg}g d¢}t  ||¡\}}t||ƒ d S )N)r   rE   r   r   rE   rE   r   r   rF   rE   )	r   rF   rE   r   rF   r@   rE   r   r   )r   Ú
deconvolver   )rO   ÚoriginalÚimpulse_responseÚrecordedZ	recoveredÚ	remainderrS   rS   rT   rU   à  s
    zTestDeconvolve.test_basicc                 C   sZ   ddgddgg}ddg}t jtdd��  t ||¡\}}W d   ƒ n1 sL0    Y  d S )Nr   zsignal must be 1-D.r  ©r3  r   r�   r   r  ©rO   r!  r   Zquotientr"  rS   rS   rT   Útest_n_dimensional_signalè  s    z(TestDeconvolve.test_n_dimensional_signalc                 C   sZ   ddg}ddgddgg}t jtdd��  t ||¡\}}W d   ƒ n1 sL0    Y  d S )Nr   zdivisor must be 1-D.r  r#  r$  rS   rS   rT   Útest_n_dimensional_divisorî  s    z)TestDeconvolve.test_n_dimensional_divisorN)r“   r”   r•   rU   r%  r&  rS   rS   rS   rT   r  Þ  s   r  c                   @   sx   e Zd Zdd„ Zdd„ Zej dddg¡ej dg d	¢¡d
d„ ƒƒZdd„ Z	ej de
 ddg¡ddgg¡dd„ ƒZdS )ÚTestDetrendc                 C   s*   t tg d¢ƒƒ}tg d¢ƒ}t||ƒ d S )NrD   )r   r   r   )r2   r   r   )rO   Ú	detrendedZdetrended_exactrS   rS   rT   rU   ÷  s    zTestDetrend.test_basicc                 C   s2   t g d¢ƒ}t|dd�}t|dd�}t||ƒ d S )N)rE   ç333333ó?rÄ  gš™™™™™ù?g333333@F)Zoverwrite_dataT)r   r2   r   )rO   ra   Z
copy_arrayZinplacerS   rS   rT   Ú	test_copyü  s    zTestDetrend.test_copyrÒ   Úlinearre  r2  rÉ  c                 C   s6   t  d¡ ddd¡}t|||d�}|j|jks2J ‚d S )NéÒ   rB   rC   ru   )r‚  r2  )rj   r   rk   r2   rA  )rO   r2  rÒ   r  r(  rS   rS   rT   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   ƒ n1 sŽ0    Y  d S )NrÉ  )rB   r   r¤  r�  r+  r@   )r‚  Úbpr   rA  r—  rE   )r‚  r-  r2  )r2   r   rj   r€  r�   r�   )rO   r  r(  rS   rS   rT   Útest_bp	  s    
zTestDetrend.test_bpr-  r   rF   c                 C   sB   t j d¡}| d¡}t||d�}t  g d¢¡}t||dd� d S )Ni90  rG   )r-  )
g¢3   À¼g¢3   °¼gÿ_ìòêr¼¿g�b	6±Å¿gq üç­]½?g=~¹›D°?g@âzI Ö?gØñòƒÙÕ¢¿gˆ»Ý?Ô…”¿g1ï
ÛàÈ¿rA  r—  )rj   rÍ   r¥  rŒ  r2   r   r   )rO   r-  r¡  ra   rÓ  Zres_scipy_191rS   rS   rT   Útest_detrend_array_bp  s
    
z!TestDetrend.test_detrend_array_bpN)r“   r”   r•   rU   r*  r3  r4  r5  r@  r.  rj   r   r/  rS   rS   rS   rT   r'  õ  s   r'  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestUniqueRootsc                 C   s:   g d¢}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )N)r  r†  rS  r)  rO  rÜ  r  ©r3   r
   r	   rj   r$  rp  ©rO   rd  r­  r®  rS   rS   rT   Útest_real_no_repeat(  s    z#TestUniqueRoots.test_real_no_repeatc                 C   s¢   g d¢}t |ddd�\}}t|g d¢dd� t|g d¢ƒ t |dd	d�\}}t|g d
¢dd� t|g d¢ƒ t |ddd�\}}t|g d¢dd� t|g d¢ƒ d S )N)r  çffffffî¿ç{®Gázì¿çš™™™™™é¿rQ  rÑ  çÍÌÌÌÌÌð?r�  r«  ©ÚtolrÏ  )r  r5  rQ  rÑ  rÜ  r  ©rF   rF   rE   rF   rX  )r4  r6  rQ  r7  rÍ  )g333333ï¿g
×£p=
ë¿rQ  gffffffð?©r3   r
   r	   r2  rS   rS   rT   Útest_real_repeat.  s    z TestUniqueRoots.test_real_repeatc                 C   s:   g d¢}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )N)r  rƒ   ù      à?      à?rÞ  r8  rÜ  r  r1  r2  rS   rS   rT   Útest_complex_no_repeat=  s    z&TestUniqueRoots.test_complex_no_repeatc                 C   s¢   g d¢}t |ddd�\}}t|g d¢dd� t|g d¢ƒ t |dd	d�\}}t|g d
¢dd� t|g d¢ƒ t |ddd�\}}t|g d¢dd� t|g d¢ƒ d S )N)r  ù      ð¿š™™™™™©?ùffffffî¿333333Ã?ùÍÌÌÌÌÌì¿333333Ã?rR  r=  ùÍÌÌÌÌÌÜ?š™™™™™á?r�  r«  r8  )r  r@  rR  rB  rÜ  r  r:  rX  )r?  rA  rR  r=  rÍ  )y      ð¿š™™™™™™?yš™™™™™í¿333333Ã?rR  yffffffÞ?ÍÌÌÌÌÌà?r;  r2  rS   rS   rT   Útest_complex_repeatC  s$    
ÿþþz#TestUniqueRoots.test_complex_repeatc                 C   sb   t  t  t  d¡t  d¡¡¡}g d¢}t|ƒ\}}t  |¡}tt  |¡|dd� t|g d¢ƒ d S )NrB   )y¨ô—›wãé¿^Zu#Ïâ¿y§ô—›wãé¿_Zu#Ïâ?yNé/7ïÆÓ? UDoî¿yPé/7ïÆÓ?ÿTDoî?ru   r  )rF   rF   rF   rF   )rj   r˜  r   r$  r3   Úsortr
   r	   )rO   rd  Z
true_rootsr­  r®  rS   rS   rT   Útest_gh_4915X  s    
zTestUniqueRoots.test_gh_4915c                 C   sh   t g d¢ƒ\}}t|ddgdd� t|ddgƒ t g d¢d	d
�\}}t|ddgdd� t|ddgƒ d S )N)rÑ  rƒ   rÑ  rÑ  rƒ   rÜ  r  rF   rE   )rE   g_p‰   ð?ù•Ö&è.>      ð?r�  )r9  rF  r;  r¬  rS   rS   rT   Útest_complex_roots_extrab  s    z(TestUniqueRoots.test_complex_roots_extrac                 C   sP   t j d¡dt j d¡  }t|dƒ\}}t|t  |¡gdd� t|dgƒ d S )Nr­   rƒ   rF   rÜ  r  )rj   rÍ   rŒ  r3   r
   r«  r	   r2  rS   rS   rT   Útest_single_unique_rootk  s    z'TestUniqueRoots.test_single_unique_rootN)
r“   r”   r•   r3  r<  r>  rC  rE  rG  rH  rS   rS   rS   rT   r0  '  s   
	r0  )N)rf  r   )�rÿ  Úconcurrent.futuresr   r   r  r   Ú	itertoolsr   Úmathr   r3  r   r�   Znumpy.testingr	   r
   r   r   r   r   r   r   Únumpyr   r   rj   Z	scipy.fftr   r*  r   Zscipy.optimizer   r   Zscipyr   Zscipy.signalr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Zscipy.signal.windowsr6   Zscipy.signal._signaltoolsr7   r8   r9   Zscipy.signal._upfirdnr:   Z
scipy._libr;   Zscipy._lib._utilr<   r=   r>   r?   r–   ræ   r6  rJ  r©  r°  r³  r´  rµ  rÌ  r×  r  rm  r%  rn  rx  rz  rÚ  rÜ  rÝ  rÞ  rà  râ  rä  rç  rë  rí  r4  r5  r  r  r  r  r  r²   r¯   rÕ  rï  r  r  Zcsingler  rÖ  r  r(  r,  r.  rJ  rY  r[  ra  rf  rg  r›  r£  r¥  rê  r  r  r  r  r'  r0  rS   rS   rS   rT   Ú<module>   sÀ   (€hp B  m 	P  O   
ýz-_'`,
  5\  p 

 .2