U
    Q»{j‘ ã                   @   sÚ  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlZd d	lmZ d d
lmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZFmGZG d dlHmIZI d dlJmKZK G dd„ dƒZLG dd„ deLƒZMG dd„ dƒZNG dd„ deNƒZOG dd„ dƒZPdd„ ZQdd„ ZRd d!„ ZSd"d#„ ZTG d$d%„ d%ƒZUG d&d'„ d'ƒZVG d(d)„ d)ƒZWG d*d+„ d+ƒZXd,d-d.d/d0gZYeYeI7 ZYG d1d2„ d2ƒZZG d3d4„ d4ƒZ[G d5d6„ d6ƒZ\G d7d8„ d8ƒZ]G d9d:„ d:e]ƒZ^G d;d<„ d<e]ƒZ_G d=d>„ d>e]ƒZ`G d?d@„ d@e]ƒZaG dAdB„ dBe]ƒZbG dCdD„ dDe]ƒZcG dEdF„ dFe]ƒZdG dGdH„ dHe]ƒZedIdJ„ ZfdKdL„ Zge
jh idMejjejkejlejmejneoejpejpejqejrejseg¡G dNdO„ dOƒƒZtG dPdQ„ dQƒZue
jh idRdSdTdUg¡e
jh idVdWdXg¡e
jh idYdZd[d\d]d^d_g¡d`da„ ƒƒƒZve
jh idMejwejxejyg¡G dbdc„ dcƒƒZzG ddde„ deƒZ{G dfdg„ dgƒZ|G dhdi„ diƒZ}G djdk„ dke}ƒZ~dldm„ Zd�dndo„Z€dpdq„ Z�drds„ Z‚G dtdu„ duƒZƒG dvdw„ dwƒZ„G dxdy„ dyƒZ…G dzd{„ d{ƒZ†G d|d}„ d}ƒZ‡d~d„ Zˆd�d�d‚„Z‰e
jh idƒe9e.f¡d„d…„ ƒZŠe
jh idMd†¡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)Ú
_testutilsc                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú_TestConvolvec                 C   sF   ddddddg}dddg}t ||ƒ}t|tdddd	d
d
ddgƒƒ d S )Né   é   é   é   é   é   é
   é   é   é    é   é   ©r   r   r   ©ÚselfÚaÚbÚc© rO   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/scipy/signal/tests/test_signaltools.pyÚ
test_basic'   s    

z_TestConvolve.test_basicc                 C   s<   dddg}ddddg}t ||dd�}t|tdd	d
gƒƒ d S )Nr=   r>   r?   rA   rB   Úsame©ÚmoderC   rD   é"   rI   rJ   rO   rO   rP   Ú	test_same-   s    
z_TestConvolve.test_samec                 C   s:   dddg}dddg}t ||dd�}t|tdd	d	gƒƒ d S )
Nr=   r>   r?   rA   rB   rR   rS   rC   rD   rI   rJ   rO   rO   rP   Útest_same_eq3   s    

z_TestConvolve.test_same_eqc                 C   s>   t dddgƒ}t ddgƒ}t||ƒ}t|t ddddgƒƒ d S )Nù      ð?      ð?ù       @      ð?ù      @      ð?ù               @y       @      @y      @       @y      @      @)r   r   r   )rK   ÚxÚyÚzrO   rO   rP   Útest_complex9   s    
z_TestConvolve.test_complexc                 C   s$   d}d}t ||ƒ}t||| ƒ d S )Ni	  i×  )r   r	   rJ   rO   rO   rP   Útest_zero_rank?   s    
z_TestConvolve.test_zero_rankc                 C   st   t  d¡ ddd¡}t  d¡}tdƒD ]H}dgd }d||< t|| |¡dd�}t|| |¡dd�}t||ƒ q&d S )Né   r=   rA   Údirect©Úmethodr   )Únpr   ÚreshapeÚranger   r   )rK   rL   rM   ÚiÚb_shaper\   r]   rO   rO   rP   Útest_broadcastableE   s    

z _TestConvolve.test_broadcastablec                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S ©Nig  iP  )r   r   r	   rJ   rO   rO   rP   Útest_single_elementO   s    


z!_TestConvolve.test_single_elementc                 C   sl   dddgdddgg}dddgdddgg}t ||ƒ}tdddd	d
gdddddgd
ddddggƒ}t||ƒ d S ©NrA   rB   r=   r>   r?   r@   é   é   é   rH   rC   é   é>   é:   é&   é   é1   ©r   r   r   ©rK   rL   rM   rN   ÚdrO   rO   rP   Útest_2d_arraysU   s    
þz_TestConvolve.test_2d_arraysc                 C   sÀ  t dƒ ddd¡}dt dƒ ddd¡ }|t dƒd d d…  ddd¡7 }tddd	d
gddddgddddgddddggddddgddddgdd d!d"gd#d$d%d&ggd'd(d)d*gd+d,d-d.gd/d0d1d2gd3d4d5d6ggd7d8d9d:gd;d<d=d>gd?d@dAdBgdCdDdEdFgggƒ}tt||dGƒ|ƒ tt||dGƒ|ƒ tt||dHƒ|dId…dId…dId…f ƒ tt||dHƒ|dJd…dJd…dJd…f ƒ tt||dKƒ|dId…dId…dId…f ƒ tt||dKƒ|dId…dId…dId…f ƒ d S )LNé   rB   ù              ð?ra   r=   éÿÿÿÿù                y      :@        y      9@      ð?y      8@       @y      J@        y     àb@      @y      b@      &@y     @W@      &@y      G@      @y      `@      7@y     À_@      =@y     @T@      7@y      D@      (@y     €X@      @@y     @W@     €B@y      K@      8@y      Z@        y     àn@      *@y      m@      7@y     à`@      5@y      q@      >@y     Àƒ@      X@y     à‚@      _@y      t@     €U@y     Àn@     €P@y      �@     €f@y     @€@      j@y      q@     À`@y     Àa@     €P@y     0s@      d@y     r@     `f@y      c@     ÀZ@y      Q@      B@y      c@     ÀY@y     `b@     @\@y     @T@     ÀR@y     Àe@     @a@y     Àw@     Àu@y      v@     €w@y     @g@     Àl@y     @a@     Àe@y     €r@      {@y     Àp@     À|@y     @a@     `q@y     €Q@     @a@y      b@     0t@y     À_@     Pu@y     €O@      h@y      @@      R@y      Q@     Àd@y     €M@     àe@y      >@      Y@y      Q@      h@y     `a@     {@y     @]@     p|@y     €L@     ào@y      C@     Àk@y     @R@     0@y     €I@     H€@y      5@     0r@y      (@      b@y      4@     às@y      @     °t@y             Àf@ÚfullrR   rA   r   Úvalid)r   rf   r   r   r   )rK   ZsmallÚbigZ	out_arrayrO   rO   rP   Útest_input_swapping^   sP     



ý



ý



ý



ýñÿÿÿÿÿz!_TestConvolve.test_input_swappingc                 C   sz   dddg}dddg}t tt||dd� t tt||dd	d
� t tt||ddd
� t tt||ddd
� t tt||ddd
� d S ©Nr=   r>   r?   rA   rB   ZspamrS   Úeggsr   ©rT   rd   Zhamrb   r   ÚbaconrR   ©Úassert_raisesÚ
ValueErrorr   ©rK   rL   rM   rO   rO   rP   Útest_invalid_paramsƒ   s    

z!_TestConvolve.test_invalid_paramsN)Ú__name__Ú
__module__Ú__qualname__rQ   rV   rW   r_   r`   rj   rl   rz   r‚   r‹   rO   rO   rO   rP   r<   %   s   
	%r<   c                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚTestConvolvec              	   C   s¨   ddddddg}dddddddddg	}ddd	d
g}t ||dƒ}t||ƒ t ||dƒ}t||ƒ dddg}ddg}ddg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )NrA   rB   r=   r@   r?   r>   éF   éN   éI   éA   r€   y      ð?      @ù       @      ð¿y      @        ù       @      Àù      ð?        y       @      $À)r   r   ©rK   rL   rM   ÚexpectedÚoutrO   rO   rP   Útest_valid_mode2�   s    



zTestConvolve.test_valid_mode2c                 C   s\   ddddddg}dddddddddddddg}t ||dƒ}td	d
dd	ddgƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rn   rR   é9   é=   é?   é-   é$   rw   rx   rO   rO   rP   Útest_same_mode¥   s
    zTestConvolve.test_same_modec                 C   s\   t  dd¡ d¡}t  dd¡ d¡}tttf||fžddiŽ tttf||fžddiŽ d S ©	NrA   rn   ©rB   r=   éúÿÿÿr   ©r=   rB   rT   r€   )re   r   rf   rˆ   r‰   r   rŠ   rO   rO   rP   Útest_invalid_shapes¬   s    z TestConvolve.test_invalid_shapeséd   c           	         s   t dd„ tj ¡ D ƒg ƒ‰dd„ ˆD ƒ‰dD ]}|ˆkr,ˆ |¡ q,‡fdd„ˆD ƒ}tj d¡ tjjdd	g|d
�tj |¡dœ}|d  |d< |d< |d d|d   |d< |D ]æ\}}‰ |t 	|¡j
  |¡‰|t 	|¡j
  |¡‰‡ ‡‡fdd„dD ƒ}t|d j	|d j	ƒ d|k�r<d|k�r<ttˆˆƒdƒ q´tdd„ ||fD ƒƒ�r`dddœ}n$d||fk�rzdddœ}n
dddœ}t|d |d f|Ž q´d S ) Nc                 S   s   g | ]\}}|‘qS rO   rO   )Ú.0Ú_ÚtrO   rO   rP   Ú
<listcomp>¹   s     z5TestConvolve.test_convolve_method.<locals>.<listcomp>c                 S   s   h | ]}t  |¡j’qS rO   )re   ÚdtypeÚname©r§   r©   rO   rO   rP   Ú	<setcomp>º   s     z4TestConvolve.test_convolve_method.<locals>.<setcomp>)
Ú
complex256Ú
complex192Zfloat128Zfloat96ÚstrÚvoidÚbytesÚobjectÚunicodeÚstringc                    s*   g | ]"}ˆ D ]}d D ]}|||f‘qqqS ))r€   r   rR   rO   )r§   Út1Út2rT   )ÚtypesrO   rP   rª   Ã   s       ÿé*   r   rA   ©Úsize)rh   Úfrh   rM   Úur½   ù              à?rN   c              	      s   i | ]}|t ˆˆ|ˆ d �“qS ))rd   rT   )r   )r§   Úkey)rT   Úx1Úx2rO   rP   Ú
<dictcomp>Ò   s   ÿ z5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rb   r   rb   Úboolc                 S   s   g | ]}|d k‘qS )>   Úfloat32Ú	complex64rO   r­   rO   rO   rP   rª   Ý   s     ç-Cëâ6?g�íµ ÷Æ°>©ÚrtolÚatolÚfloat16çü©ñÒMbP?çñhãˆµøä>ç:Œ0âŽyE>)Úsumre   ZsctypesÚitemsÚremoveÚrandomÚseedÚchoiceÚrandnr«   ÚkindÚastyper	   r   Úanyr   )	rK   Únr«   ÚargsZarray_typesr·   r¸   ÚresultsÚkwargsrO   )rT   r¹   rÁ   rÂ   rP   Útest_convolve_method¸   s8    
ÿÿ
z!TestConvolve.test_convolve_methodc                 C   sv   dD ]l}t jd| gt jd�}t||dd�}t||dd�}|dk rt||ƒ t|dd|  ƒ t|dd|  ƒ qd S )N)	rC   é   é2   é3   é4   é5   é6   é<   rr   rB   ©r«   r   rc   rb   rß   )re   r   Úint64r   r	   )rK   rÙ   r^   r   rb   rO   rO   rP   Ú test_convolve_method_large_inputè   s    
z-TestConvolve.test_convolve_method_large_inputc                 C   sx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S ©NrA   rB   rb   rc   r   r=   r‡   ©rK   rO   rO   rP   Útest_mismatched_dims÷   s    z!TestConvolve.test_mismatched_dimsN)r¦   )	rŒ   r�   rŽ   rš   r    r¥   rÝ   rç   rê   rO   rO   rO   rP   r�   �   s   
0r�   c                
   @   s¬   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
ej deeg¡ej ddddddggfdddddggfg¡dd„ ƒƒZdd„ Zdd „ Zd!d"„ Zd#S )$Ú_TestConvolve2dc                 C   sl   dddgdddgg}dddgdddgg}t dddd	d
gdddddgd
ddddggƒ}t||ƒ}t||ƒ d S rm   ©r   r   r   )rK   rL   rM   ry   ÚerO   rO   rP   rz     s    þ
z_TestConvolve2d.test_2d_arraysc                 C   s|   dddddddgddddddd	gg}d
ddgdddgg}t dddddggƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )NrB   r=   r>   r?   r@   rn   r{   é	   rC   rA   rr   éP   éb   ét   é†   r€   rì   ©rK   rí   r½   ÚhÚgrO   rO   rP   Útest_valid_mode  s    $
z_TestConvolve2d.test_valid_modec                 C   sŠ   dddddddgddddddd	gg}t jd
ddgdddggtd�d }tdddddggƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )NrB   r=   r>   r?   r@   rn   r{   rî   rC   rA   rå   r|   y      O@      8@y      T@      >@y     €X@      B@y      ]@      E@y     À`@      H@r€   )re   r   Úcomplexr   r   r   ró   rO   rO   rP   Útest_valid_mode_complx  s    $"
z&_TestConvolve2d.test_valid_mode_complxc                 C   sv   dddgdddgg}dddgdddgg}d}t ||dd|ƒ}td	d
dddgdddddgdddddggƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   r   Úfillé   é   ru   rU   rF   rE   é(   rr   é@   rá   é.   éC   é0   ©r   r   r   )rK   rL   rM   ZfillvalrN   ry   rO   rO   rP   Útest_fillvalue$  s    þz_TestConvolve2d.test_fillvaluec              
   C   s”   d}t j ¡ �D}| t jd¡ tt|d�� tdggddggdd� W 5 Q R X W 5 Q R X d}tt|d��" tdggddggddgd� W 5 Q R X d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex values©ÚmatchrA   rB   r|   ©Ú	fillvaluez,`fillvalue` must be scalar or an array with )re   Ztestingr   ÚfilterZComplexWarningrˆ   r‰   r   )rK   ÚmsgÚsuprO   rO   rP   Útest_fillvalue_errors.  s    ,z%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d� d S )NrA   rB   r  ©rˆ   r‰   r   ré   rO   rO   rP   Útest_fillvalue_empty9  s    ÿz$_TestConvolve2d.test_fillvalue_emptyc                 C   sp   dddgdddgg}dddgdddgg}t ||ddƒ}td	d	d
d	d	gdddddgd	d	d
d	d	ggƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   r   Úwraprï   éJ   éD   rr   r  rx   rO   rO   rP   Útest_wrap_boundary>  s    þz"_TestConvolve2d.test_wrap_boundaryc                 C   sp   dddgdddgg}dddgdddgg}t ||ddƒ}td	d
dddgdddddgdddddggƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   r   ÚsymmrU   rq   é,   rr   éB   rá   r   rï   éT   éR   r‘   é\   én   ér   r  rx   rO   rO   rP   Útest_sym_boundaryG  s    þz!_TestConvolve2d.test_sym_boundaryÚfunczboundary, expectedr  g     €B@g      E@g      F@g     €F@r  ç     €E@ç     €C@c                 C   s<   t  ddddgg¡}t  d¡}|||d|d�}t||ƒ d S )Nç       @ç      ð¿ç      @ç      @)rA   é   rR   ©rT   Úboundary)re   r   Úonesr   )rK   r  r#  r˜   ÚimageZkernelÚresultrO   rO   rP   Útest_same_with_boundaryP  s    	
z'_TestConvolve2d.test_same_with_boundaryc                 C   sh   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t||j||d	dd�ƒ d S )Nr   rA   ru   rå   rC   r=   ée   rR   r  r"  )r}   r}   )rT   Úorigin)	Úscipy.ndimageÚndimagere   r   Úfloatrf   r   r   r   )rK   ÚndirL   rM   rN   rO   rO   rP   Útest_boundary_extension_samea  s
    z,_TestConvolve2d.test_boundary_extension_samec                 C   s„   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t |dd	¡}t||j	||d	d�d d…d d…f ƒ d S )Nr   rA   rC   rå   r=   é%   r@   r   r  r"  )©r=   r=   r0  rS   r}   )
r*  r+  re   r   r,  rf   r   Úpadr   r   )rK   r-  rL   rM   rN   ZapadrO   rO   rP   Útest_boundary_extension_fullk  s    z,_TestConvolve2d.test_boundary_extension_fullc                 C   s\   t  dd¡ d¡}t  dd¡ d¡}tttf||fžddiŽ tttf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   rŠ   rO   rO   rP   r¥   v  s    z#_TestConvolve2d.test_invalid_shapesN)rŒ   r�   rŽ   rz   rö   rø   r  r
  r  r  r  ÚpytestÚmarkÚparametrizer   r   r'  r.  r2  r¥   rO   rO   rO   rP   rë     s$   	
		ÿÿ
rë   c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	ej 
d	¡d
d„ ƒƒZdS )ÚTestConvolve2dc                 C   sj   dddgdddgg}dddddddgdddddd	d
gg}t ||dƒ}tdddgdddggƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rn   r{   rî   rC   rR   rD   rE   rU   rï   rð   rñ   r  )rK   rí   r½   rõ   rô   rO   rO   rP   r    …  s    $
ÿzTestConvolve2d.test_same_modec                 C   sÒ   dddgdddgg}dddddddgdddddd	d
gg}dddddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ ddgddgg}dddgdddgg}ddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rn   r{   rî   rC   rr   rï   rð   rñ   rò   r€   rX   r•   rZ   y      @        r”   ù      @       @y      @      ð?y      @      Ày      ;@      ð¿y      G@       @)r   r   )rK   rí   r½   r˜   r™   rO   rO   rP   rš   �  s    $



zTestConvolve2d.test_valid_mode2c              	   C   sv   t  d¡}t  dddg¡}dD ]R}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )Nr?   çš™™™™™	@çffffffö?r=   ©r   r€   rR   rS   )re   r   r   r
   r   r   Úsqueezer   ©rK   rL   rM   rT   rO   rO   rP   Útest_consistency_convolve_funcs¤  s    
ÿÿþz.TestConvolve2d.test_consistency_convolve_funcsc                 C   s>   t ttddƒ t ttdgdgƒ t ttdgggdgggƒ d S )Nr=   r>   r  ré   rO   rO   rP   Útest_invalid_dims¯  s    z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s¢   ddt  ¡ j  }t d| d t  ¡ j d ¡ t jd| t jd�}d|d d d…< t jjj||dfdd	�}t	 
|ddgg¡}t  |dk¡}|d
 jd
ksžt‚d S )Nl        éè  rB   éé  g    €„.Arå   rA   )iH  r{   )ÚshapeÚstridesr   )re   ræ   Úitemsizer;   Zcheck_free_memoryÚzerosÚlibZstride_tricksZ
as_stridedr   r   Úwherer¼   ÚAssertionError)rK   rÙ   rL   ÚcountZfailsrO   rO   rP   Útest_large_array´  s     zTestConvolve2d.test_large_arrayN)rŒ   r�   rŽ   r    rš   r=  r>  r3  r4  ÚslowZxfail_on_32bitrI  rO   rO   rO   rP   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   sP   t dddgƒ}t dddddgƒ}|dkr4t||ƒ}nt|||d	�}t||ƒ d S )
NrA   rB   r=   r>   rC   rH   ç      "@rM  ©rL  ©r   r   r   ©rK   rL  rL   r˜   r™   rO   rO   rP   Ú	test_realÇ  s    zTestFFTConvolve.test_realrA   c                 C   s\   t dddgƒ}t dddddgƒ}t |ddg¡}t |ddg¡}t|||d�}t||ƒ d S )	NrA   rB   r=   r>   rC   rH   rN  rO  ©r   re   Útiler   r   rQ  rO   rO   rP   Útest_real_axesÓ  s    zTestFFTConvolve.test_real_axesc                 C   sP   t dddgƒ}t dddddgƒ}|d	kr4t||ƒ}nt|||d
�}t||ƒ d S )NrX   ù       @       @ù      @      @r[   ù               @ù              4@ù              8@ù              2@rM  rO  rP  rQ  rO   rO   rP   r_   Þ  s    zTestFFTConvolve.test_complexc                 C   s\   t dddgƒ}t dddddgƒ}t |d	d
g¡}t |d	d
g¡}t|||d�}t||ƒ d S )NrX   rV  rW  r[   rX  rY  rZ  r[  rB   rA   rO  rS  rQ  rO   rO   rP   Útest_complex_axesé  s    z!TestFFTConvolve.test_complex_axeséþÿÿÿc                 C   st   t dddgdddggƒ}t ddddd	gd
ddddgdddddggƒ}|dkrXt||ƒ}nt|||d�}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rC   rH   rî   r{   rû   é8   rã   rŸ   ro   rü   r’   rä   rM  rO  rP  rQ  rO   rO   rP   Útest_2d_real_sameô  s    
ÿþz!TestFFTConvolve.test_2d_real_samerB   c                 C   s„   t dddgdddggƒ}t ddddd	gd
ddddgdddddggƒ}t |dddg¡}t |dddg¡}t|||d�}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rC   rH   rî   r{   rû   r^  rã   rŸ   ro   rü   r’   rä   rO  rS  rQ  rO   rO   rP   Útest_2d_real_same_axes  s    	
ÿþz&TestFFTConvolve.test_2d_real_same_axesc                 C   st   t dddgdddggƒ}t ddd	d
dgdddddgdddddggƒ}|dkrXt||ƒ}nt|||d�}t||ƒ d S )Nù      ð?       @ù      @      @ù      @      @rY   ù      @      @ù      @      @ù      À      @ù      $À      4@ù      5À      L@ù      2À      S@ù      &À      N@ù              $@ù              F@ù             €]@ù             €c@ù             €^@ù      $@      4@ù      5@      L@ù      2@      S@ù      &@      N@rM  rO  rP  rQ  rO   rO   rP   Útest_2d_complex_same   s    
ÿýz$TestFFTConvolve.test_2d_complex_samec                 C   s„   t dddgdddggƒ}t ddd	d
dgdddddgdddddggƒ}t |dddg¡}t |dddg¡}t|||d�}t||ƒ d S )Nra  rb  rc  rY   rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rB   rA   rO  rS  rQ  rO   rO   rP   Útest_2d_complex_same_axes:  s    	
ÿýz)TestFFTConvolve.test_2d_complex_same_axesc              
   C   s´   t dddgƒ}t dddddddd	dg	ƒ}t d
ddgƒ}t dddd
dddddg	ƒ}|dkrft||dƒ}nt||d|d�}t||ƒ |dkr–t||dƒ}nt||d|d�}t||ƒ d S )NrA   rB   r=   r?   r@   r{   rn   rî   r   ç     €A@ç     €D@ç     €G@rN  ç      4@ç      9@r  ç      <@r  rM  rR   rO  rP  ©rK   rL  rL   rM   Z
expected_1Z
expected_2r™   rO   rO   rP   Útest_real_same_modeQ  s    
z#TestFFTConvolve.test_real_same_modec              
   C   sÈ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddgƒ}t dddd
dddddg	ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )NrA   rB   r=   r?   r@   r{   rn   rî   r   rv  rw  rx  rN  ry  rz  r  r{  r  rR   rO  rS  r|  rO   rO   rP   Útest_real_same_mode_axesd  s    
z(TestFFTConvolve.test_real_same_mode_axesc              
   C   s¢   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}|dkrTt||dƒ}nt||d|d�}t||ƒ |dkr„t||dƒ}nt||d|d�}t||ƒ d S )Nr=   rB   rA   r?   r@   r{   rn   rî   r   ç      8@ç      ?@rw  r  ç     €H@rz  ç      (@rM  r€   rO  rP  ©rK   rL  rL   rM   r˜   r™   rO   rO   rP   Útest_valid_mode_realv  s    
z$TestFFTConvolve.test_valid_mode_realc              
   C   sŒ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ d S ©Nr=   rB   rA   r?   r@   r{   rn   rî   r   r  r€  rw  r  r�  rz  r‚  r€   rO  rS  rƒ  rO   rO   rP   Útest_valid_mode_real_axes‰  s    z)TestFFTConvolve.test_valid_mode_real_axesc                 C   s’   t dddgƒ}t dddddgƒ}t d	d
dgƒ}|dkrDt||dƒ}nt||d|d�}t||ƒ |dkrtt||dƒ}nt||d|d�}t||ƒ d S )Nù      @      ð¿ù       @      @r–   r7  ù      @      Àù      @        ù      @      ð¿ù       @        ù     €F@      (@ù      >@      7@ù      H@      @@rM  r€   rO  rP  rƒ  rO   rO   rP   Útest_valid_mode_complex—  s    
z'TestFFTConvolve.test_valid_mode_complexc                 C   s–   t dddgƒ}t dddddgƒ}t d	d
dgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )Nr‡  rˆ  r–   r7  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  rB   rA   r€   rO  rS  rƒ  rO   rO   rP   Útest_valid_mode_complex_axes©  s    
z,TestFFTConvolve.test_valid_mode_complex_axesc              
   C   sŒ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||ddd�}t||ƒ d S r…  rS  r—   rO   rO   rP   Útest_valid_mode_ignore_nonaxes¹  s    z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S ©Nr   r?   r@   rn   )r   r   r¼   ré   rO   rO   rP   Ú
test_emptyÆ  s    zTestFFTConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rk   ©r   r   r	   ©rK   rL   rM   r™   rO   rO   rP   r`   Ì  s    
zTestFFTConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rk   r•  r–  rO   rO   rP   rl   Ò  s    


z#TestFFTConvolve.test_single_elementc                 C   s�   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}|dkrht||dƒ}nt||d|d�}tt j||dd	�ƒ d S )
NéÒ  éÑ  r|   é)  r   rM  rO  ç»½×Ùß|Û=©rÉ   )re   rÒ   rÓ   Úrandr   r   r   Úallcloserƒ  rO   rO   rP   Útest_random_dataØ  s    z TestFFTConvolve.test_random_datac                 C   sª   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}t  |ddg¡}t  |ddg¡}t  |ddg¡}t||d|d�}tt j||d	d
�ƒ d S )Nr—  r˜  r|   r™  r   rB   rA   rO  rš  r›  )	re   rÒ   rÓ   rœ  r   rT  r   r   r�  rƒ  rO   rO   rP   Útest_random_data_axeså  s    z%TestFFTConvolve.test_random_data_axesr>   éüÿÿÿc                 C   sN  d\}}t j d¡ t jj|Ž dt jj|Ž   }t jj|Ž dt jj|Ž   }t||dƒ}|d d …d d …d d d f }|d d …d d …d d d f }|d d …d d …d d d f }t  | dd¡dd¡}t  | dd¡dd¡}t  | dd¡dd¡}t  |ddd	ddg¡}t  |dddddg¡}t  |ddd	ddg¡}t||d|d
�}t	||ddd� d S )N))é{   rD   )é„   é   r—  r|   r   r   rB   rA   r>   r=   rO  rš  rÈ   )
re   rÒ   rÓ   rœ  r   ZmoveaxisÚswapaxesrT  r   r   )rK   rL  Za_shaperi   rL   rM   r˜   r™   rO   rO   rP   Útest_random_data_multidim_axesó  s     	z.TestFFTConvolve.test_random_data_multidim_axesrÙ   r¦   r?  iÜ  r—  r@  é'  r?   c                 C   s„   t j |¡dt j |¡  }t j |¡dt j |¡  }t  ||d¡}t||dƒ}t||dd� t||ddgd�}t||dd� d S )Nr|   r   rš  ©rÊ   r   rO  )re   rÒ   rœ  r   r   r   )rK   rÙ   rL   rM   r˜   r™   rO   rO   rP   Útest_many_sizes  s    zTestFFTConvolve.test_many_sizesc              
   C   sp   d}t j d¡}| |¡}t jt jfD ]D}||d< t dd¡}tj	t
dd�� tj||dd	d
� W 5 Q R X q&d S )Nr?  l   [<zn( r¦   éÈ   çš™™™™™É?zUse of fft convolutionr  rR   r   r…   )re   rÒ   Zdefault_rngÚstandard_normalÚnanÚinfr   Úfirwinr3  ÚwarnsÚRuntimeWarningr   )rK   rÙ   ÚrngZsig_nanÚvalZcoeffsrO   rO   rP   Útest_fft_nan#  s    
zTestFFTConvolve.test_fft_nan)%rŒ   r�   rŽ   r3  r4  r5  rR  rU  r_   r\  r_  r`  rt  ru  r}  r~  r„  r†  r�  r‘  r’  r”  r`   rl   rž  rŸ  r¥  rJ  Úlistrg   re   rÒ   ÚRandomStateÚrandintÚtolistr¨  r³  rO   rO   rO   rP   rK  Å  sº   







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

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

ù








ù
ÿþþrK  c                  O   s   t dƒ‚d S )NzFell back to fftconvolve)ÚRuntimeError)rÚ   rÜ   rO   rO   rP   Úfftconvolve_err/  s    r¹  c                 C   s   dd„ t | dd�D ƒS )Nc                 S   s(   g | ] \}}t || ƒd kr||f‘qS )r=   )Úabs©r§   rL   rM   rO   rO   rP   rª   4  s    ÿz!gen_oa_shapes.<locals>.<listcomp>rB   ©Úrepeatr   ©ÚsizesrO   rO   rP   Úgen_oa_shapes3  s    rÀ  c                 C   sB   t | ƒ}t | ƒ}dd„ t||ƒD ƒ}dddg}dd„ t||ƒD ƒS )Nc                 S   s   g | ]\}}|| ‘qS rO   rO   )r§   Zishapes0Zishapes1rO   rO   rP   rª   ;  s     z$gen_oa_shapes_2d.<locals>.<listcomp>r   r€   rR   c                 S   sb   g | ]Z\}}|d ksT|d |d kr4|d |d ksT|d |d k r|d |d k r||f ‘qS )r€   r   rA   rB   r=   rO   )r§   ZishapesZimoderO   rO   rP   rª   ?  s      ý)rÀ  Úzipr   )r¿  Zshapes0Zshapes1ZshapesÚmodesrO   rO   rP   Úgen_oa_shapes_2d8  s    ÿ
rÃ  c                 C   s   dd„ t | dd�D ƒS )Nc                 S   s    g | ]\}}||kr||f‘qS rO   rO   r»  rO   rO   rP   rª   F  s    ÿz$gen_oa_shapes_eq.<locals>.<listcomp>rB   r¼  r   r¾  rO   rO   rP   Úgen_oa_shapes_eqE  s    rÄ  c                   @   sÔ  e Zd Zej ¡ ej deee	dƒƒee	dddƒƒ ƒ¡dd„ ƒƒZ
ej deddd	d
dgƒ¡ej dddg¡ej ddddg¡dd„ ƒƒƒZej dddg¡ej deddd	d
gƒ¡ej dddg¡ej dddg¡ej dddg¡ej ddddg¡dd„ ƒƒƒƒƒƒZej deddd	d
gƒ¡ej dddg¡dd„ ƒƒZej dddgddgddgg¡ej deddd	d
gƒ¡ej dddg¡ej dddg¡ej dddg¡d d!„ ƒƒƒƒƒZd"d#„ Zd$d%„ Zd&d'„ Zd(S ))ÚTestOAConvolvezshape_a_0, shape_b_0r¦   r?  rG   c                 C   s:   t j |¡}t j |¡}t||ƒ}t||ƒ}t||ƒ d S ©N)re   rÒ   rœ  r   r   r   )rK   Ú	shape_a_0Ú	shape_b_0rL   rM   r˜   r™   rO   rO   rP   Útest_real_manylensK  s
    

z!TestOAConvolve.test_real_manylensrß   é/   r@   r>   rA   Ú
is_complexTFrT   r   r€   rR   c           
      C   s~   t j |¡}t j |¡}|rD|dt j |¡  }|dt j |¡  }t|||d�}| tjdt¡ t|||d�}	t	|	|ƒ d S ©Nr|   rS   r   ©
re   rÒ   rœ  r   Úsetattrr   Z_signaltoolsr¹  r   r   )
rK   rÇ  rÈ  rË  rT   ÚmonkeypatchrL   rM   r˜   r™   rO   rO   rP   Útest_1d_noaxesY  s    
ÿzTestOAConvolve.test_1d_noaxesrL  r   Úshape_a_extrar=   Úshape_b_extrac	                 C   s¦   |gd }	|gd }
||	|< ||
|< t jj|	Ž }t jj|
Ž }|rh|dt jj|	Ž   }|dt jj|
Ž   }t||||d�}| tjdt¡ t||||d�}t	||ƒ d S )NrB   r|   ©rT   rL  r   rÍ  )rK   rL  rÇ  rÈ  rÑ  rÒ  rË  rT   rÏ  Úax_aÚax_brL   rM   r˜   r™   rO   rO   rP   Útest_1d_axesm  s    



ÿzTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s†   t j ||¡}t j ||¡}	|rL|dt j ||¡  }|	dt j ||¡  }	t||	|d�}
| tjdt¡ t||	|d�}t	||
ƒ d S rÌ  rÍ  )rK   rÇ  rÈ  Ú	shape_a_1Ú	shape_b_1rT   rË  rÏ  rL   rM   r˜   r™   rO   rO   rP   Útest_2d_noaxesŠ  s    
ÿzTestOAConvolve.test_2d_noaxesrB   c                 C   sÆ   |gd }|gd }|||d < |||d < |||d < |||d < t jj|Ž }t jj|Ž }|	rˆ|dt jj|Ž   }|dt jj|Ž   }t||||d�}|
 tjdt¡ t||||d�}t	||ƒ d S )Nr=   r   rA   r|   rÓ  r   rÍ  )rK   rL  rÇ  rÈ  r×  rØ  rT   rÑ  rÒ  rË  rÏ  rÔ  rÕ  rL   rM   r˜   r™   rO   rO   rP   Útest_2d_axesŸ  s"    


ÿzTestOAConvolve.test_2d_axesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S r“  )r   r   r¼   ré   rO   rO   rP   r”  ¿  s    zTestOAConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rk   ©r   r   r	   r–  rO   rO   rP   r`   Å  s    
zTestOAConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rk   rÛ  r–  rO   rO   rP   rl   Ë  s    


z"TestOAConvolve.test_single_elementN)rŒ   r�   rŽ   r3  r4  rJ  r5  rÄ  r´  rg   rÉ  rÀ  rÐ  rÖ  rÃ  rÙ  rÚ  r”  r`   rl   rO   rO   rO   rP   rÅ  J  sL   ÿÿ	ÿÿþþrÅ  c                   @   s¼   e Zd Zej deeg¡dd„ ƒZej deeg¡dd„ ƒZ	ej ddgdfddgfd	gdggfg¡ej deeg¡d
d„ ƒƒZ
ej deeg¡dd„ ƒZej dejejg¡dd„ ƒZdS )ÚTestAllFreqConvolvesÚconvapproachc              	   C   sN   t  dd¡ d¡}t  dd¡ d¡}ttdd�� |||d	d
� W 5 Q R X d S )NrA   rn   r¢   r£   r   r¤   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r€   rS   )re   r   rf   rˆ   r‰   ©rK   rÝ  rL   rM   rO   rO   rP   r¥   Ô  s    ÿz(TestAllFreqConvolves.test_invalid_shapesc              	   C   sR   t  ddddg¡}t  ddddg¡}ttdd�� |||ddgd	� W 5 Q R X d S )
Nr?   r@   rB   rA   r=   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rO  )re   rD  rˆ   r‰   rÞ  rO   rO   rP   Útest_invalid_shapes_axesÞ  s    ÿz-TestAllFreqConvolves.test_invalid_shapes_axesza,brA   rB   r=   c              	   C   s&   t tdd�� |||ƒ W 5 Q R X d S )Nz/in1 and in2 should have the same dimensionalityr  ©rˆ   r‰   )rK   rL   rM   rÝ  rO   rO   rP   rê   é  s    ÿz)TestAllFreqConvolves.test_mismatched_dimsc              	   C   sF  t tdd�� |dgdgdd� W 5 Q R X t tdd�� |dgdgg d� W 5 Q R X t td	d��$ |dgdgddgd
dggd� W 5 Q R X t td	d��  |dgdgddddgd� W 5 Q R X t tdd�� |dgdgdgd� W 5 Q R X t tdd�� |dgdgdgd� W 5 Q R X t tdd�� |dgdgddgd� W 5 Q R X d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rA   rB   ZchipsrS   z#when provided, axes cannot be emptyrO  z-axes must be a scalar or iterable of integersr=   r>   ç      ð?r  r  r   z$axes exceeds dimensionality of inputr]  zall axes must be uniquer   rà  )rK   rÝ  rO   rO   rP   Útest_invalid_flagsõ  s0    ÿÿ($ÿÿÿz'TestAllFreqConvolves.test_invalid_flagsr«   c                 C   sp   t j d¡ |¡}t j d¡ |¡}t  |ƒ ¡r@|d7 }|d8 }t||ƒ}t|t||dd�ƒ |j|kslt‚d S )N)ra   ra   )r>   r>   y        š™™™™™¹?rb   rc   )	re   rÒ   r×   Ziscomplexobjr   r   r   r«   rG  )rK   r«   r\   r]   ÚresrO   rO   rP   Útest_longdtype_input  s    
z)TestAllFreqConvolves.test_longdtype_inputN)rŒ   r�   rŽ   r3  r4  r5  r   r   r¥   rß  rê   râ  re   Z	longfloatZlongcomplexrä  rO   rO   rO   rP   rÜ  Ò  s0   ÿ
ÿ
	þÿÿÿ
rÜ  c                   @   s€  e Zd Zddddddddddg
dddddddd	d
dg
dddddddddd	g
ddddddddddg
ddddddddddg
dddd
dd	ddddg
ddddd
d dd
d!d"g
d#d$dd%d&dd'd(d)d*g
d+d,ddd-dd!d.dd/g
d dd0d+d1d2ddd3dg
g
Zddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
dddddddd(ddg
d$ddddddd.d(d/g
d ddddddd3d(d/g
d+ddddddd.d3dg
dd d$d1d d d.d.d.dg
dd+d,d+d2d2ddd!dg
g
Zd+d#gZd4d5„ Zej 	d6e
je
je
je
je
jee
je
je
je
je
jg¡d7d8„ ƒZej 	d6e
je
je
je
je
jg¡d9d:„ ƒZd;d<„ Zd=d>„ Zd?d@„ Zej 	d6e
je
je
jg¡dAdB„ ƒZdCS )DÚTestMedFiltrß   r  é   ra   r“   rþ   r   éH   éM   r  r  rÊ  é   rý   rº   é   é   é_   é#   rU   rî   r!  r�   éa   rE   r‘   rœ   rs   éG   râ   r  rF   rú   r  r=   é!   rÿ   rA   r  é7   rH   éS   rn   r£  rä   é+   rû   éX   é'   r>   rž   c                 C   sB   t  | j| j¡}t  t | jt¡| j¡}t|| j	ƒ t||ƒ d S rÆ  )
r   ÚmedfiltÚINÚKERNEL_SIZEÚ	medfilt2dre   r   r,  r   ÚOUT)rK   ry   rí   rO   rO   rP   rQ   <  s    zTestMedFilt.test_basicr«   c                 C   s8   t j| j|d�}tt |¡j|ƒ tt |¡j|ƒ d S ©Nrå   )re   r   r÷  r	   r   rö  r«   rù  ©rK   r«   Úin_typedrO   rO   rP   Ú
test_typesB  s    zTestMedFilt.test_typesc              	   C   s\   t j| j|d�}tjtdd�� t |¡ W 5 Q R X tjtdd�� t |¡ W 5 Q R X d S )Nrå   Zorder_filterNDr  )	re   r   r÷  r3  r   r‰   r   rö  rù  rü  rO   rO   rP   Útest_invalid_dtypesK  s
    zTestMedFilt.test_invalid_dtypesc              	   C   s^   t  t¡� tttjd ƒ W 5 Q R X tjdtj	d�}|dd… }d|_
tt |d¡dkƒ d S )NrC   rå   r?   r@   ro   rA   ç      @)r3  r¯  ÚUserWarningrˆ   Ú	TypeErrorr   rö  re   r   Úfloat64rB  r   )rK   ÚdummyrL   rO   rO   rP   Ú	test_noneU  s    zTestMedFilt.test_nonec              	   C   s”   t dƒ}tj||gtd�}ttdƒr4dt |¡ }nd}t t	¡� t
|ƒD ]}t |¡ qLW 5 Q R X ttdƒr‚tt |¡|k ƒ t|||gƒ d S )Nr¡  rå   ÚgetrefcountrB   rC   )r   re   r   r´   ÚhasattrÚsysr  r3  r¯  r  rg   r   rö  r   r	   )rK   rL   r\   rÙ   ÚjrO   rO   rP   Útest_refcountinga  s    

zTestMedFilt.test_refcountingc                 C   s8   t j| jtd�}t j| jtd�}tt || j¡|ƒ d S rû  )	re   r   r÷  r´   rú  r   r   rö  rø  )rK   Z	in_objectZ
out_objectrO   rO   rP   Útest_objectq  s
    ÿzTestMedFilt.test_objectc           
   	      sü   t jˆj|d�‰t jˆj|d�}ˆj|jks0t‚|jd d ‰ |jd d ‰ˆjd d d ‰ˆjd d d ‰‡ ‡‡‡‡‡fdd„‰t  |¡}tdd��N‰d	d
ddh}‡‡fdd„|D ƒ}t	|ƒD ]}| 
¡ \}}}	||||	f< qÄW 5 Q R X t||ƒ d S )Nrå   r   rB   rA   c                    sÔ   | \}}|dkr6t dˆ ˆ ƒ}t dˆ ƒ}t dˆ ƒ}n"t ˆ ˆ d ƒ}t ˆd ƒ}t ˆ d ƒ}|dk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ÚoffNrK   rO   rP   Úapply‡  s$    



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyr>   )Úmax_workers©r   r   ©r   rA   )rA   r   ©rA   rA   c                    s   h | ]}ˆ  ˆ |¡’qS rO   )Zsubmit)r§   r  )r  ÚpoolrO   rP   r®   ¦  s     z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)re   r   r÷  rú  rA  rG  rø  Z
zeros_liker   r   r&  r   )
rK   r«   r˜   ÚoutputÚchunksZfuturesÚfutureÚdataZMsliceZNslicerO   )r  r  r  rý  r  r  r  rK   rP   Útest_medfilt2d_parallelw  s     
z#TestMedFilt.test_medfilt2d_parallelN) rŒ   r�   rŽ   r÷  rú  rø  rQ   r3  r4  r5  re   ÚubyteÚbyteÚushortÚshortÚuintÚintÚ	ulonglongrÅ   r  Ú
longdoublerþ  Zbool_ZcfloatÚcdoubleÚclongdoublerË   rÿ  r  r
  r  r  rO   rO   rO   rP   rå  "  sX   ÷÷     þ
 ÿ
rå  c                   @   s   e Zd Zdd„ ZdS )Ú
TestWienerc                 C   s’   t ddddgddddgddddgddddggd	ƒ}t d
dddgddddgddddgddddggƒ}tt |¡|dd� ttj|dd�|dd� d S )Nr?   r@   r>   r=   rB   rA   rî   rn   ry   g‘ÔSXO@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º“@­_)@©Údecimal)Zmysize)r   r   r   Zwiener)rK   rõ   rô   rO   rO   rP   rQ   ²  s    


ýý


ýzTestWiener.test_basicN©rŒ   r�   rŽ   rQ   rO   rO   rO   rP   r)  °  s   r)  ÚmeanÚmedianÚminimumÚmaximumÚlinec                	   @   s  e Zd Zdd„ Zej dd¡ej dd¡ej dd¡d	d
„ ƒƒƒZdd„ Zej dd¡ej dd¡ej dd¡dd„ ƒƒƒZ	ej de
¡dd„ ƒZej de
¡dd„ ƒZej de
¡ej dejejg¡dd„ ƒƒZej ddgeedgddge
ƒƒ ¡d d!„ ƒZd"d#„ Zd$d%„ Zd&S )'ÚTestResamplec              	   C   s¶   t  d¡}d}t dd¡}tttj|||d� tttj|ddƒ tttj|ddƒ tttj|d	dd
d� tttj|d	dddd� t  t  d¡d¡}tj||d|d� t	|j
dkƒ d S )Né€   é   )Úkaiserç       @é    ©ÚwindowÚyorA   r   rB   rM  ©Úpadtyper-  rC   )r<  Úcval)rB   rA   r}   ©Úaxisr9  )r7  )re   r   r   Z
get_windowrˆ   r‰   ÚresampleÚresample_polyrT  r   rA  )rK   ÚsigÚnumÚwinZsig2rO   rO   rP   rQ   Ä  s    
 ÿzTestResample.test_basicr9  )NÚhammingr  )rÞ   ré  rC  )r¦   r(  rC   r£  c                 C   s´   t jdd|dd�}t  |d  d ¡}ttj|||d�tj|d ||d�jƒ t  t  |d  d ¡t  |d  d ¡g¡}|d }ttj||d	|d
�tj||d	|d
�jdd� d S )Nr   rC   F)ZendpointrB   g      @r8  r~   rA   r>  ç•Ö&è.>r§  )	re   ÚlinspaceÚcosr   r   r@  Úrealr   Úsin)rK   r  rC  r9  r\   r]   Z	y_complexrO   rO   rP   Ú	test_rfftÚ  s    ÿ.ýzTestResample.test_rfftc                 C   sD   t  d¡d }t|ƒ}d}ttj||dd�tj||dd�dd� d S )Nr4  r~   Úfreq)ÚdomainÚtimerF  r§  )re   r   r   r   r   r@  )rK   ZtsigZfsigrC  rO   rO   rP   Útest_input_domainì  s    ýzTestResample.test_input_domainÚnx)rA   rB   r=   r?   r{   Únyr«   )r,  r÷   c                 C   s2   t  dg| |¡}t ||¡}t|dg| ƒ d S )NrA   )re   r   r   r@  r   )rK   rP  rQ  r«   r\   r]   rO   rO   rP   Útest_dcö  s    zTestResample.test_dcr<  c                 C   sF   t  d¡}t j d¡ d¡}| ¡ }tj|dd||d� t||ƒ d S )Nr=   r   rB   r?   rA   ©r9  r<  )	re   rD  rÒ   rµ  rÕ   Úcopyr   rA  r   )rK   r<  Zimpulser9  Zwindow_origrO   rO   rP   Útest_mutable_windowþ  s
    
z TestResample.test_mutable_windowc                 C   sN   t jdt jd�}t jdddgt jd�}tj|dd||d�}|jt jksJt‚d S )NrC   rå   rA   rB   rS  )re   r   rÅ   r   r   rA  r«   rG  )rK   r<  r\   rô   r]   rO   rO   rP   Útest_output_float32  s    z TestResample.test_output_float32c                 C   s4   t jd|d�}tj|dd|d�}|j|jks0t‚d S )NrC   rå   rA   rB   r;  )re   r   r   rA  r«   rG  )rK   r<  r«   r\   r]   rO   rO   rP   Útest_output_match_dtype  s    z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc               	   C   s   d}ddddddddd	g	}t  |¡t|ƒ }t  d
¡d d …t jf }t  dt j | | ¡t|ƒ }|D �]j}	t  |	¡t|	ƒ }
t  dt j | |
 ¡t|	ƒ }|dk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k�rŒt||dd� nt||dd� n4t|j|jƒ t  ||¡d }t|dk|||	fd� �qPqht j d ¡}t|ƒt  | |¡¡ }|D ]~}	t  |	¡t|	ƒ }
t  |
||¡}|dk�r:t 	||	¡}ntj||	||d!�}t|j|jƒ t  ||¡d }t|dk|d� �qþ|dk�rüt  d"d#g¡}t 	|d$¡}t  d"d%d#d%g¡}t||d&d� t  ddddg¡}t 	|d¡}t  ddg¡}t||d&d� d S )'Nr¦   rv   rß   rà   éc   r(  éÇ   r©  éÉ   )rá  ç      $@g      D@rB   r   r}   ©r?  rá  rC   rA   )r5  r   r8  rS  r<  r?  ç      à?ç        )r/  r0  ç333333Ó?r§  rÌ   r  g®Gáz®ï?)r  r   r;  r–   r~   r>   y      à?        çê-�™—q=)re   r   r,  r   ÚnewaxisrJ  Úpir6   r   r@  r   Úmaxr®  rA  rÁ  rù   r   r   rA  Zcorrcoefr   rÒ   rµ  ZcumsumrÕ   Úinterp) rK   rd   Úextr<  ÚrateÚrates_tor©   Úfreqsr\   Úrate_toÚt_toZy_tosÚ	y_resampsrõ   ÚupÚdownZmax_rateZf_cZhalf_lenr9  ZpolyargsZy_toZy_resamprL  Zcorrr±  rÁ   Zy1_testZy1_truerÂ   Zy2_testZy2_truerO   rO   rP   Útest_resample_methods  sp     
 

ÿÿ



ÿ
z"TestResample.test_resample_methodsc                 C   sê   t j d¡}tt jt jttf}d}dddg}|D ]´}| |¡ 	|¡}|t jt j
fkrf|d| |¡ 7 }d|d< d|d< |D ]h}tjd	d
| dd�}t|d
|dd�d d |… }	t||d d d… ƒ}
tj|d||
d�}t|	|ddd� qzq0d S )Nrp   r¦  rB   r£  éO   r|   r   r}   ru   rá  rE  r8  Úconstantr;  rA   çH¯¼šò×z>©rÊ   rÉ   )re   rÒ   rµ  r$  rÅ   rÆ   r,  r÷   rÕ   r×   Ú
complex128r   r®  r$   r   rA  r   )rK   Zrandom_stateZ	try_typesr¼   Zdown_factorsr«   r\   rm  rô   ÚyfZhcr]   rO   rO   rP   Útest_poly_vs_filtfilti  s     
z"TestResample.test_poly_vs_filtfiltc              	   C   s„   dD ]z}t dd|ƒD ]h}dD ]^}tj |f¡}tj |f¡}t||d d d… dd�}tj|d||d�}t|d d |… |ƒ qqqd S )	N)rB   r>   rA   rü   )rF   rð  r}   rp  rS   )rl  rm  r9  )rg   re   rÒ   r   r   rA  r   )rK   rm  rP  Znweightsr\   ÚweightsZy_gZy_srO   rO   rP   Útest_correlate1d…  s       ÿzTestResample.test_correlate1dN)rŒ   r�   rŽ   rQ   r3  r4  r5  rK  rO  rR  Úpadtype_optionsrU  rV  re   rÅ   r  rW  r´  r   rn  ru  rw  rO   rO   rO   rP   r2  Ã  s@   


  ÿÿÿþ	
Ir2  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCSpline1DEvalc              
   C   s†   t dddddddddg	ƒ}tt|ƒƒ}|d |d  }t |¡}tt|ƒd ƒd }tj||||d d�}t|d d d	… |d
d� d S )NrA   rB   r=   r>   r  r   r[  )ÚdxZx0rC   r?   r*  )r   r   Úlenr   Ú	cspline1dÚcspline1d_evalr   )rK   r]   r\   rz  ÚcjrÂ   Úy2rO   rO   rP   rQ   “  s    
zTestCSpline1DEval.test_basicc                 C   st   t  d¡}t j|jt jd�}d}d| }t  dt j | | ¡}t |¡}t  	dg¡}t 
||¡}t|j|jƒ d S )NrB   rå   r[  rá  r[   r]  )re   r   rD  rA  rÆ   Úexprb  r   r|  r   r}  r	   r«   )rK   r\   r]   ÚTr½   ÚcyZxnewZynewrO   rO   rP   r_   Ÿ  s    

zTestCSpline1DEval.test_complexN)rŒ   r�   rŽ   rQ   r_   rO   rO   rO   rP   ry  ‘  s   ry  c                   @   s   e Zd Zdd„ ZdS )ÚTestOrderFiltc                 C   s*   t t dddgdddgd¡dddgƒ d S ©NrA   rB   r=   r   )r   r   Zorder_filterré   rO   rO   rP   rQ   ²  s    ÿzTestOrderFilt.test_basicNr,  rO   rO   rO   rP   rƒ  °  s   rƒ  c                   @   sÔ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3S )4Ú_TestLinearFilterc                 C   s.   t  dt  |¡d t  |¡¡ |¡}|  |¡S )Nr   rA   )re   rG  Úprodrf   Úconvert_dtype)rK   rA  r\   rO   rO   rP   Úgenerate¹  s    $z_TestLinearFilter.generatec                 C   s‚   | j t  d¡krlt |¡}t |j| j ¡}t ||gddgdgdgg¡}|D ]\}}|  |d ¡|d< qL|S tj|| j dd	�S d S )
NÚOZrefs_okZzerosize_okÚreadonlyZ	writeonlyrO   .F)rT  )r«   re   ÚasarrayÚemptyrA  ZnditerÚtyper   )rK   Zarrr™   Úiterr\   r]   rO   rO   rP   r‡  ½  s    

ÿz_TestLinearFilter.convert_dtypec                 C   sR   |   d¡}|  ddg¡}|  ddg¡}|  dddd	d
dg¡}tt|||ƒ|ƒ d S ©N©r@   rA   r}   r]  ç      à¿r   rB   r>   r@   r{   r[  ©rˆ  r‡  r   r"   ©rK   r\   rM   rL   Úy_rrO   rO   rP   Útest_rank_1_IIRÉ  s
    
z!_TestLinearFilter.test_rank_1_IIRc                 C   sP   |   d¡}|  ddg¡}|  dg¡}|  ddddddg¡}tt|||ƒ|ƒ d S )Nr�  rA   r   r=   r?   rn   rN  r’  r“  rO   rO   rP   Útest_rank_1_FIRÐ  s
    
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s†   |   d¡}|  dddg¡}|  ddg¡}|  ddg¡}|  ddd	d
ddg¡}|  d
dg¡}t||||d�\}}t||ƒ t||ƒ d S )Nr�  rA   r   r}   r]  r‘  rB   r?   rî   é   rp   r!  éöÿÿÿ©Úzi©rˆ  r‡  r"   r   ©	rK   r\   rM   rL   rš  r”  Úzf_rr]   ÚzfrO   rO   rP   Útest_rank_1_IIR_init_cond×  s    

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   s„   |   d¡}|  dddg¡}|  dg¡}|  ddg¡}|  ddddddg¡}|  ddg¡}t||||d	�\}}t||ƒ t||ƒ d S )
Nr�  rA   rB   r=   r@   rî   r‚  r?   r™  r›  rœ  rO   rO   rP   Útest_rank_1_FIR_init_condâ  s    

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sn   |   d¡}|  ddg¡}|  ddg¡}|  dddgdddgdddgdddgg¡}t|||dd	�}t||ƒ d S )
N©r>   r=   rA   r}   r]  r   rB   r>   r@   r\  r›  )rK   r\   rM   rL   Úy_r2_a0r]   rO   rO   rP   Útest_rank_2_IIR_axis_0í  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sn   |   d¡}|  ddg¡}|  ddg¡}|  dddgdddgd	d
d	gdddgg¡}t|||dd�}t||ƒ d S )Nr¡  rA   r}   r]  r   rB   r@   r   rH   r˜  ræ  éðÿÿÿr\  r›  )rK   r\   rM   rL   Úy_r2_a1r]   rO   rO   rP   Útest_rank_2_IIR_axis_1ö  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s®   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  dddgdddgdd	dgd
dd
gg¡}|  ddddg¡d d …tjf }t|||d|d�\}}t||ƒ t||ƒ d S )Nr¡  rA   r}   r]  )r>   rA   rn   éûÿÿÿr—  éõÿÿÿré  iïÿÿÿiãÿÿÿi×ÿÿÿ©r?  rš  )rˆ  r‡  re   r$  ra  r"   r   )	rK   r\   rM   rL   rš  Z	y_r2_a0_1r�  r]   rž  rO   rO   rP   Ú test_rank_2_IIR_axis_0_init_condÿ  s    
ÿ 
z2_TestLinearFilter.test_rank_2_IIR_axis_0_init_condc           	      C   s    |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  dddgdddgdddgdddgg¡}|  dddgg¡}t|||d	|d
�\}}t||ƒ t||ƒ d S )Nr¡  rA   r}   r]  )rA   r=   r=   r?   iéÿÿÿr   r©  )rˆ  r‡  re   r$  r"   r   )	rK   r\   rM   rL   rš  Z	y_r2_a0_0r�  r]   rž  rO   rO   rP   Ú test_rank_2_IIR_axis_1_init_cond  s    
 ÿ
z2_TestLinearFilter.test_rank_2_IIR_axis_1_init_condc                    sj   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]4}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ q0d S )N©r>   r=   rB   rA   r}   r]  c                    s   t ˆˆ | ƒS rÆ  ©r"   ©Úw©rL   rM   rO   rP   Ú<lambda>   ó    z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>©rˆ  r‡  rg   Úndimr"   re   Úapply_along_axisr   ©rK   r\   r?  r]   r”  rO   r°  rP   Útest_rank_3_IIR  s    
z!_TestLinearFilter.test_rank_3_IIRc                    sÌ   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]–}t|jƒ}d||< |  t |¡¡}|  dg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q0d S )Nr¬  rA   r}   r]  c                    s   t ˆˆ | ˆd�d S ©Nr™  r   r­  r®  ©rL   rM   Úzi1rO   rP   r±  .  r²  z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>c                    s   t ˆˆ | ˆd�d S ©Nr™  rA   r­  r®  r¹  rO   rP   r±  /  r²  ©rˆ  r‡  rg   r´  r´  rA  re   r$  r"   rµ  r   ©rK   r\   r?  Zzi_shaperš  r]   rž  Zlf0Zlf1r”  r�  rO   r¹  rP   Útest_rank_3_IIR_init_cond#  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sj   |   d¡}|  dddg¡‰|  dg¡‰ t|jƒD ]4}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ q0d S )Nr¬  rA   r   r}   c                    s   t ˆˆ | ƒS rÆ  r­  r®  r°  rO   rP   r±  <  r²  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r³  r¶  rO   r°  rP   Útest_rank_3_FIR5  s    
z!_TestLinearFilter.test_rank_3_FIRc                    sÎ   |   d¡}|  dddg¡‰|  dg¡‰ t|jƒD ]˜}t|jƒ}d||< |  t |¡¡}|  ddg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q0d S )	Nr¬  rA   r   r}   rB   c                    s   t ˆˆ | ˆd�d S r¸  r­  r®  r¹  rO   rP   r±  J  r²  z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>c                    s   t ˆˆ | ˆd�d S r»  r­  r®  r¹  rO   rP   r±  K  r²  r¼  r½  rO   r¹  rP   Útest_rank_3_FIR_init_cond?  s    


z+_TestLinearFilter.test_rank_3_FIR_init_condc              
   C   sÆ   |   d¡}tjdddd�\}}|  |¡}|  |¡}|jd d }|  t dd	|f¡¡}|  t dd|f¡¡}t||||d
�\}}t||||d
�\}	}
t|	|ƒ t||
ƒ t	t
t|||dt |¡ƒ d S )N)r>   r?   rÞ   r{   rª  Úba©r  r   rA   r>   r?   r™  r}   )rˆ  r   r%   r‡  rA  re   r$  r"   r   rˆ   r‰   )rK   r\   rM   rL   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrO   rO   rP   Útest_zi_pseudobroadcastQ  s    




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sZ   |   d¡}|  dddg¡}|  dg¡}|  ddddddg¡}t||d |ƒ}t||ƒ d S )Nr@   rA   r   r}   rB   r›  )rK   r\   rM   rL   r”  r]   rO   rO   rP   Útest_scalar_af  s    
z_TestLinearFilter.test_scalar_ac                 C   s8  |   t dd¡¡}|   t dd¡¡}|   t dddg¡¡}t dd¡}|dd d …d d …f  d9  < |dd d …d d …f  d9  < |   |¡}|   t d	d¡¡}t dd¡}dggdggdggg|d d …d d …d d
…f< |   |¡}t|||d|ƒ\}}t||ƒ t||ƒ t||d |d|ƒ\}	}
t|	|ƒ t|
|ƒ d S )N)r=   rB   r?   Úlr?   rA   r   )r=   rA   r>   rB   r=   )r=   rB   r>   r>   r}   )r‡  re   rD  r$  r   r"   r   )rK   r\   rM   rL   rš  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrO   rO   rP   Útest_zi_some_singleton_dimsp  s"    
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |   |¡}|   |¡}|   |¡}|   |¡}ttt|||||ƒ d S rÆ  )r‡  rˆ   r‰   r"   )rK   rM   rL   r\   r?  rš  rO   rO   rP   Úbase_bad_size_zi‹  s
    



z"_TestLinearFilter.base_bad_size_zic                 C   sz
  t  d¡}|  dgdg|ddg¡ |  ddgdg|dddg¡ |  ddgdg|ddgg¡ |  ddgdg|ddddg¡ |  dddgdg|ddgg¡ |  dddgdg|ddddg¡ |  dgddg|dddg¡ |  dgddg|ddgg¡ |  dgddg|ddddg¡ |  dddgddg|ddg¡ |  dddgddg|ddgdgg¡ |  dddgddg|ddddg¡ |  dddgddg|dddddg¡ |  ddgdddg|ddg¡ |  ddgdddg|ddgdgg¡ |  ddgdddg|ddddg¡ |  ddgdddg|dddddg¡ t  d¡ d¡}|  dgdg|ddg¡ |  ddgdg|ddddg¡ |  ddgdg|ddddggg¡ |  ddgdg|ddgdgdgg¡ |  ddgdg|dddgg¡ |  ddgdg|dddddgg¡ |  dddgdg|dddddd	d
g¡ |  dddgdg|ddddgdd	d
ggg¡ |  dddgdg|dddgddgd	d
gg¡ |  dddgdg|dddgddgg¡ |  dddgdg|dddddgd	d
ddgg¡ |  dgddg|ddddg¡ |  dgddg|ddddggg¡ |  dgddg|ddgdgdgg¡ |  dgddg|dddgg¡ |  dgddg|dddddgg¡ |  dgdddg|dddddd	d
g¡ |  dgdddg|ddddgdd	d
ggg¡ |  dgdddg|dddgddgd	d
gg¡ |  dgdddg|dddgddgg¡ |  dgdddg|dddddgd	d
ddgg¡ |  dddgddg|dddddd	d
g¡ |  dddgddg|ddddgdd	d
ggg¡ |  dddgddg|dddgddgd	d
gg¡ |  dddgddg|dddgddgg¡ |  dddgddg|dddddgd	d
ddgg¡ |  dgdg|ddg¡ |  ddgdg|dddddg¡ |  ddgdg|ddgdgdgdggg¡ |  ddgdg|dddddgg¡ |  ddgdg|ddgdgdgg¡ |  ddgdg|ddgdgdgdgd	gg¡ |  dddgdg|dddddd	d
ddg¡ |  dddgdg|dddgddgd	d
gddggg¡ |  dddgdg|dddddgd	d
ddgg¡ |  dddgdg|dddgddgd	d
gg¡ |  dddgdg|dddgddgd	d
gddgddgg¡ |  dgddg|dddddg¡ |  dgddg|ddgdgdgdggg¡ |  dgddg|dddddgg¡ |  dgddg|ddgdgdgg¡ |  dgddg|ddgdgdgdgd	gg¡ |  dgdddg|dddddd	d
ddg¡ |  dgdddg|dddgddgd	d
gddggg¡ |  dgdddg|dddddgd	d
ddgg¡ |  dgdddg|dddgddgd	d
gg¡ |  dgdddg|dddgddgd	d
gddgddgg¡ |  dddgddg|dddddd	d
ddg¡ |  dddgddg|dddgddgd	d
gddggg¡ |  dddgddg|dddddgd	d
ddgg¡ |  dddgddg|dddgddgd	d
gg¡ |  dddgddg|dddgddgd	d
gddgddgg¡ d S )Nr@   rA   r}   r   rB   r=   rH   r¡  r>   r?   rn   r{   rî   )re   r   rÇ  rf   )rK   rÁ   rÂ   rO   rO   rP   Útest_bad_size_zi’  sŽ    
 $"$$"$	"$"&,,&."$"&,,&.(..(0 *"$,*4.,8 *"$,*4.,8,60.z"_TestLinearFilter.test_bad_size_zic                 C   sh   |   d¡}|  dg¡}|  dg¡}|  g ¡}t||||d�\}}t||ƒ t|j| jƒ t|jdƒ d S )N)r?   rA   r™  r   )rˆ  r‡  r"   r   r	   r«   r¼   )rK   r\   rL   rM   rš  r]   rž  rO   rO   rP   Útest_empty_ziò  s    


z_TestLinearFilter.test_empty_zic                 C   s`   |   dg¡}|   dg¡}t||ddgƒ}t||ddgƒ}t||ddgƒ}t||ƒ t||ƒ d S )NrA   rá  r   TF)r‡  r+   r   )rK   rL   rM   rš  Zzi_1Zzi_2rO   rO   rP   Útest_lfiltic_bad_ziý  s    
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   s|   |   dg¡}|   dddg¡}|   ddg¡}|   dg¡}|   dg¡}|   ddg¡}t||||d	�\}}t||ƒ t||ƒ d S )
NrA   r   r}   rB   rn   rç  r  é¸ÿÿÿr™  ©r‡  r"   r   ©	rK   rL   rM   rš  r\   ZyeZzfer]   rž  rO   rO   rP   Útest_short_x_FIR  s    
z"_TestLinearFilter.test_short_x_FIRc           	      C   s~   |   ddg¡}|   dddg¡}|   ddg¡}|   dg¡}|   dg¡}|   dd	g¡}t||||d
�\}}t||ƒ t||ƒ d S )NrA   r   r}   rB   rn   rç  r  i½ÿÿÿrË  r™  rÌ  rÍ  rO   rO   rP   Útest_short_x_IIR  s    
z"_TestLinearFilter.test_short_x_IIRc                 C   sz   |   d¡}|  ddg¡}| ¡ }|  ddg¡}| ¡ }|  dddd	d
dg¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S r�  ©rˆ  r‡  rT  r"   r   r	   ©rK   r\   rM   Zb0rL   Úa0r”  Úy_frO   rO   rP   Útest_do_not_modify_a_b_IIR"  s    


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sz   |   d¡}|  dddg¡}| ¡ }|  dg¡}| ¡ }|  ddddddg¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S )Nr�  rA   r   rB   r]  r=   r   rÐ  rÑ  rO   rO   rP   Útest_do_not_modify_a_b_FIR.  s    


z,_TestLinearFilter.test_do_not_modify_a_b_FIRN)rŒ   r�   rŽ   rˆ  r‡  r•  r–  rŸ  r   r£  r¦  rª  r«  r·  r¾  r¿  rÀ  rÃ  rÄ  rÆ  rÇ  rÈ  rÉ  rÊ  rÎ  rÏ  rÔ  rÕ  rO   rO   rO   rP   r…  ·  s2   		


`r…  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloat32r½   N©rŒ   r�   rŽ   re   r«   rO   rO   rO   rP   rÖ  ;  s   rÖ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloat64ry   Nr×  rO   rO   rO   rP   rØ  ?  s   rØ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterFloatExtendedrõ   Nr×  rO   rO   rO   rP   rÙ  C  s   rÙ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplex64ÚFNr×  rO   rO   rO   rP   rÚ  G  s   rÚ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplex128ÚDNr×  rO   rO   rO   rP   rÜ  K  s   rÜ  c                   @   s   e Zd Ze d¡ZdS )ÚTestLinearFilterComplexExtendedÚGNr×  rO   rO   rO   rP   rÞ  O  s   rÞ  c                   @   s   e Zd Ze d¡Zdd„ ZdS )ÚTestLinearFilterDecimalr‰  c                 C   s   t t|ƒƒS rÆ  )r   r±   ©rK   r\   rO   rO   rP   r�  U  s    zTestLinearFilterDecimal.typeN)rŒ   r�   rŽ   re   r«   r�  rO   rO   rO   rP   rà  R  s   
rà  c                   @   s   e Zd Ze d¡ZeZdS )ÚTestLinearFilterObjectr‰  N)rŒ   r�   rŽ   re   r«   r,  r�  rO   rO   rO   rP   râ  Y  s   
râ  c                   C   sR   t ttdgdgdd dgƒ t ttdgd gdddgƒ t ttd gdgdddgƒ d S )Nrá  r  r  )rˆ   r  r"   rO   rO   rO   rP   Útest_lfilter_bad_object^  s    rã  c                
   C   s&   t ttddgddgdddddgƒ d S )NrB   r=   r>   r?   rA   )rˆ   ÚNotImplementedErrorr"   rO   rO   rO   rP   Ú!test_lfilter_notimplemented_inputf  s    rå  Údtc                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestCorrelateRealc                 C   sL   t  ddd¡ |¡}t  ddd¡ |¡}t  dddddg¡ |¡}|||fS )Nr   r=   r>   rA   rB   r?   r{   )re   rG  r×   r   ©rK   ræ  rL   rM   r”  rO   rO   rP   Ú_setup_rank1p  s    zTestCorrelateReal._setup_rank1c                 C   sJ   d}z,t  |¡}t|dƒr.tdt  |j¡ ƒ}W n tk
rD   Y nX |S )Nr@   Ú
resolutionr‘  )re   Úfinfor  r$  Úlog10rê  Ú	Exception)rK   Úres_dtr+  Zdt_inforO   rO   rP   Úequal_tolerancew  s    

z!TestCorrelateReal.equal_tolerancec                 C   s$   |t jkr|  t j¡S |  |¡S d S rÆ  )re   r&  rï  Údouble)rK   rî  rO   rO   rP   Úequal_tolerance_fft‚  s    
z%TestCorrelateReal.equal_tolerance_fftc                 C   sž   |t kr*tt dƒgt dƒgƒ}t|dƒ np|  |¡\}}}t||dd�}t||dd�}t|||  |j¡d� t|||  |j¡d� t|j|ƒ t|j|ƒ d S )Nr>   r=   rb   r   rc   r*  )	r   r   r	   Ú_setup_rank3r   r   rñ  r«   rï  )rK   ræ  rd   rL   rM   r”  Zy_fftZy_directrO   rO   rP   Útest_methodŠ  s    zTestCorrelateReal.test_methodc                 C   sr   |   |¡\}}}t||dƒ}t||dd… ƒ t|j|ƒ t||dƒ}t||dd… d d d… ƒ t|j|ƒ d S )Nr€   rA   r>   r}   ©ré  r   r   r	   r«   ©rK   ræ  rL   rM   r”  r]   rO   rO   rP   Útest_rank1_valid˜  s    z"TestCorrelateReal.test_rank1_validc                 C   s>   |   |¡\}}}t||dƒ}t||d d… ƒ t|j|ƒ d S )NrR   r}   rô  rõ  rO   rO   rP   Útest_rank1_same£  s    z!TestCorrelateReal.test_rank1_samec                 C   s6   |   |¡\}}}t||dƒ}t||ƒ t|j|ƒ d S )Nr   rô  rõ  rO   rO   rP   Útest_rank1_full©  s    
z!TestCorrelateReal.test_rank1_fullc                 C   sœ  t  ddd¡jddd� |¡}t  ddd¡jd	dd� |¡}td
dddddddgddddddddgddddddd d!gd"d#d$d%d&d'd(d)gd*d+d,d-d.d/d0d1gd2d3d4d5d6d7d8d9ggd:d;d<d=d>d?d@dAgddBdCdDdEdFdGdHgdIdJdKdLdMdNdOdPgdQdRdSdTdUdVdWdXgdYddZdd[d\d]d^gd_d`dadbdcdddedfggdgdhdidjdkdldmdngdodpdqd=drdsdtdugdvdwddxdydzd{d|gd}d~dd€d�d‚dƒd^gd^d„d,d…d†d‡dˆd‰gdŠd‹dŒd�dŽd�d�d
ggg|d‘�}|||fS )’Nr   rõ  rü   )rB   r>   r?   rÛ  )ÚorderrG   rú   )rB   r=   r>   r^  g      g@g     €@g     €Œ@g     @•@g     À‹@g     €}@g      d@g      G@g      {@g     ˜�@g     Àœ@g     à¤@g     ˆš@g      ‹@g      p@g     À`@g      ‡@g     ø™@g      ¥@g      ®@g     ä¢@g     @’@g      s@g     @p@g     À�@g     0ž@g     à§@g     p°@g     (¤@g     `“@g     Àt@g     @i@g     À„@g     (”@g      Ÿ@g      ¥@g     Ø˜@g     @†@g     Àb@g     €\@g     €u@g     „@g      Ž@g      ”@g     °†@g     €r@g      C@g      7@g      y@g     ,�@g      œ@g     ¥@g     $›@g     @Œ@g     Pr@g     ÀŒ@g     ì @g     À¬@g      ´@g     Ô©@g      ™@g      }@g     Pt@g      ˜@g     Rª@g     ˆµ@g     (¾@g     K²@g      ¡@g     ¸€@g     Ø�@g     °ž@g     f®@g     °·@g     (À@g     }³@g     (¢@g     ¨�@g      {@g     4¤@g     �´@g     Ü§@g     €”@g     Àl@g      n@g     à…@g     ”@g     €�@g     €£@g     œ•@g      €@r  g      6@g     Àj@g     €€@g      Œ@g     Ð”@g     pŠ@g     àz@g     €`@g     €U@g     @~@g     (‘@g     P¤@g     ™@g      ˆ@g     Ài@g     €g@g     ‰@g     X¥@g     ˜­@g      ¡@g     Ð�@g     @k@g     @s@g     p�@g     xž@g     h§@g     ¨¯@g     À¢@g     Ø�@g      …@g      ž@g     ¤@g     È–@g      ‚@g     €S@g     €_@g      v@g     àƒ@g     àŒ@g     ð’@g     p„@g     @m@rå   )re   rG  rf   r×   r   rè  rO   rO   rP   rò  ¯  s>    ÿÿûûûòìzTestCorrelateReal._setup_rank3c                 C   s    |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ t||dƒ}t||dd…dd…dd…f d d d…d d d…d d d…f ƒ t|j|ƒ d S )Nr€   rA   rB   r>   r=   r?   r}   ©rò  r   r   r	   r«   rõ  rO   rO   rP   Útest_rank3_validÍ  s     <z"TestCorrelateReal.test_rank3_validc                 C   sL   |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ d S )NrR   r   r}   rA   r]  rú  rõ  rO   rO   rP   Útest_rank3_sameØ  s     z!TestCorrelateReal.test_rank3_samec                 C   s4   |   |¡\}}}t||ƒ}t||ƒ t|j|ƒ d S rÆ  rú  rõ  rO   rO   rP   Útest_rank3_allÞ  s    

z TestCorrelateReal.test_rank3_allN)rŒ   r�   rŽ   ré  rï  rñ  ró  rö  r÷  rø  rò  rû  rü  rý  rO   rO   rO   rP   rç  k  s   rç  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestCorrelatec                 C   s\   t  dd¡ d¡}t  dd¡ d¡}tttf||fžddiŽ tttf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   rŠ   rO   rO   rP   r¥   è  s    z!TestCorrelate.test_invalid_shapesc                 C   sz   dddg}dddg}t tt||dd� t tt||dd	d
� t tt||ddd
� t tt||ddd
� t tt||ddd
� d S rƒ   ©rˆ   r‰   r   rŠ   rO   rO   rP   r‹   ô  s    

z!TestCorrelate.test_invalid_paramsc                 C   sx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S rè   rÿ  ré   rO   rO   rP   rê   ý  s    z"TestCorrelate.test_mismatched_dimsc                 C   s’   dddg}ddg}t t||dd�ddd	gƒ dddg}ddd
g}t t||dd�ddd	gƒ t t||dd�d
ddd	dgƒ t t||dd�dgƒ d S )NrA   rB   r=   r>   r?   rR   rS   é   rG   r@   rp   rF   r   rH   r€   )r   r   rŠ   rO   rO   rP   Útest_numpy_fastpath  s    


z!TestCorrelate.test_numpy_fastpathN)rŒ   r�   rŽ   r¥   r‹   rê   r  rO   rO   rO   rP   rþ  å  s   		rþ  rT   r€   rR   r   ÚbehindTFÚ
input_sizer¦   r(  r?  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   rC   rS   )re   rÒ   rµ  r«  r$  Úconcatenater   r   r¼   Zargmaxr	   rA  )rT   r  r  r±  Zin1ÚoffsetZin2r˜   ZcorrelationZlagsZ	lag_indexrO   rO   rP   Útest_correlation_lags  s    

r  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestCorrelateComplexc                 C   s(   |t jkrt j}tdt  |¡j d ƒS )NrB   r=   )re   r(  r'  r$  rë  Ú	precision)rK   ræ  rO   rO   rP   r+  7  s    
zTestCorrelateComplex.decimalc                 C   sÆ   t j d¡ t j d¡ |¡}|dt j d¡ |¡ 7 }t j d¡ |¡}|dt j d¡ |¡ 7 }t|j|j|d�t|j|j|d�  |¡}|dt|j|j|d� t|j|j|d�  7 }|||fS )Nrî   rC   r|   r{   rS   )re   rÒ   rÓ   rÕ   r×   r   rI  Úimag)rK   ræ  rT   rL   rM   r”  rO   rO   rP   ré  <  s    ÿÿÿz!TestCorrelateComplex._setup_rank1c                 C   s|   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ t||dƒ}t||d d d…  ¡ |  |¡d� t|j|ƒ d S )Nr€   r*  r}   )ré  r   r   r+  r	   r«   Úconjrõ  rO   rO   rP   rö  I  s    "z%TestCorrelateComplex.test_rank1_validc                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )NrR   r*  ©ré  r   r   r+  r	   r«   rõ  rO   rO   rP   r÷  T  s    z$TestCorrelateComplex.test_rank1_samec                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )Nr   r*  r  rõ  rO   rO   rP   rø  Z  s    z$TestCorrelateComplex.test_rank1_fullc                 C   sN   t jdddg|d�}t jddddg|d�}t||ƒ}t|dd	d
dddgƒ d S )Nr~   rX   rV  rå   ù      ð?      @ù       @      @ù      @      @ù      @      @ù      $@       Àù      <@      Àù      6@      Ày      0@      Ày       @      À)re   r   r   r	   ©rK   ræ  ry   Úkr]   rO   rO   rP   Útest_swap_full`  s    
z#TestCorrelateComplex.test_swap_fullc                 C   s8   dddg}ddddg}t ||dd	�}t|d
ddgƒ d S )Nr~   rX   rV  r  r  r  r  rR   rS   r  r  r  )r   r	   r  rO   rO   rP   Útest_swap_samef  s    
z#TestCorrelateComplex.test_swap_samec                 C   sä   t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt|j|jƒ t|j|jƒ  7 }t||dƒ}t|||  |¡d d� t	|j
|ƒ d S )	NrC   r{   r@   r|   r>   r   rA   r*  )re   rÒ   rÕ   r×   r   rI  r	  r   r+  r	   r«   rõ  rO   rO   rP   Ú
test_rank3l  s    ÿÿ&zTestCorrelateComplex.test_rank3c                 C   s8  t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt  t|j|jƒ t|j|jƒ ¡ 7 }t||dƒ}t|||  	|¡d d� t
|j|ƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ d S )Nr|   r   rA   r*  r[   ù              @r>   )re   r   rÒ   rÕ   r×   r   rI  r	  r   r+  r	   r«   rõ  rO   rO   rP   Ú
test_rank0z  s$    ÿÿÿ
zTestCorrelateComplex.test_rank0N)rŒ   r�   rŽ   r+  ré  rö  r÷  rø  r  r  r  r  rO   rO   rO   rP   r  .  s   	r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCorrelate2dc              	   C   sÌ   t  d¡}t  dddg¡}dD ]¨}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ |dkrtt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )Nr?   r8  r9  r=   r:  rS   r€   )re   r   r   r
   r   r   r;  r   r<  rO   rO   rP   Ú test_consistency_correlate_funcs�  s(    
ÿÿþÿÿþz0TestCorrelate2d.test_consistency_correlate_funcsc                 C   s`   t  dd¡ d¡}t  dd¡ d¡}tttjf||fžddiŽ tttjf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   r   rŠ   rO   rO   rP   r¥   £  s    z#TestCorrelate2d.test_invalid_shapesc                 C   sR   t t dggdgg¡dƒ t t dggdgg¡dƒ t t dggdgg¡dƒ d S )NrA   r[   y       €       Àr  r@   r>   y              (@)r	   r   r   ré   rO   rO   rP   Útest_complex_input¯  s    z"TestCorrelate2d.test_complex_inputN)rŒ   r�   rŽ   r  r¥   r  rO   rO   rO   rP   r  Ž  s   r  c                   @   s:   e Zd Zdd„ Zdd„ Zej dej	ej
g¡dd„ ƒZdS )	ÚTestLFilterZIc                 C   sF   t  dddg¡}t  dddg¡}t  ddg¡}t||ƒ}t||ƒ d S )Nrá  r  r]  r^  r  r   )re   r   r#   r   )rK   rL   rM   Zzi_expectedrš  rO   rO   rP   rQ   ·  s
    
zTestLFilterZI.test_basicc                 C   sN   t  dddg¡}t  dddg¡}t||ƒ}td| d| ƒ}t||dd� d S )NrB   r{   r?   rA   r`  r›  )re   r   r#   r   )rK   rM   rL   rº  Zzi2rO   rO   rP   Útest_scale_invariance¾  s
    
z#TestLFilterZI.test_scale_invariancer«   c                 C   s<   t jd|d�}t jdg|d�}tt  t ||¡¡j|ƒ d S )Nr{   rå   rA   )re   rD  r   r	   rI  r   r#   r«   )rK   r«   rM   rL   rO   rO   rP   rþ  Ç  s    zTestLFilterZI.test_typesN)rŒ   r�   rŽ   rQ   r  r3  r4  r5  re   rÅ   r  rþ  rO   rO   rO   rP   r  µ  s   	r  c                   @   sJ   e Zd ZdZddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFiltFiltÚtfr}   Ú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.   )rK   Úzpkr\   r?  r<  Úpadlenrd   ÚirlenrM   rL   r"  rO   rO   rP   r$   Ñ  s    

zTestFiltFilt.filtfiltc                 C   s>   t dddgdddgƒ}|  |t d¡¡}t|tdƒdd� d S )NrA   rB   r=   rH   g6Â‹{ðÍ=r§  )r0   r$   re   r   r   )rK   r$  r™   rO   rO   rP   rQ   Ú  s    zTestFiltFilt.test_basicc                 C   s*  d}t  dd|d ¡}t  dt j | ¡}t  dt j | ¡}|| }tddd	d
�}t  |d ¡ ¡ }d}tt  t  	|¡t  	|¡ ¡ƒ}	| j
|||	d�}
t  |
| ¡ ¡ }t|dk ƒ t  ||| g¡}| j
|||	dd�}t|j|jƒ t  || ¡ ¡ }t|dk ƒ | j
||j|	dd�}t||jƒ d S )NiÐ  r   rá  rA   rC   iô  r{   ç      À?r$  rÂ  rÍ   )r%  rÇ   ©r%  r?  )re   rG  rJ  rb  r%   rº  rc  r$  ÚceilÚlogr$   r   Úvstackr	   rA  r�  )rK   rf  r©   ZxlowZxhighr\   r$  ÚrÚepsrÙ   r]   ÚerrZx2dZy2dZy2dtrO   rO   rP   Ú	test_sineß  s&    zTestFiltFilt.test_sinec                 C   s˜   t  d¡ ddd¡}tdddd�}| j||d	d	d
�}| j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ | j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ d S )Ng      ”@rC   r£  rH   r=   r'  r$  rÂ  r   r(  rA   rB   )re   r   rf   r%   r$   r¤  r   )rK   r\   r$  Zy0Úy1r  rO   rO   rP   Ú	test_axis	  s    zTestFiltFilt.test_axisc                 C   s@   | j dkrd S t ddgdt d¡¡}t|t d¡ddd� d S )Nr   r]  rA   rC   ç›+¡†›„=rÈ   )r#  r   r$   re   r   r   )rK   r™   rO   rO   rP   Útest_acoeff	  s    
zTestFiltFilt.test_acoeffc                 C   sò   | j dkrt d¡ t ddg¡}t dg¡}t ddg¡}t|||ƒ\}}}t|d |d gd|d  d	|d
   d	|d  d|d
   gƒ t||d d|d   d|d   d|d
   d|d  |d  d|d   d|d
   gƒ d S )Nr   ú$gust only implemented for TF systemsrá  r  r]  r‘  r   r_  rª  rA   ç      Ð?r'  )r#  r3  Úskipre   r   r7   r   )rK   r\   rM   rL   r]   Úz1Úz2rO   rO   rP   Útest_gust_simple	  s    

.ÿ.*ÿzTestFiltFilt.test_gust_simplec                 C   sT   | j dkrt d¡ t d¡}d}d}t|||dd�}|| d | }t||ƒ d S )	Nr   r4  rH   r  r  Úgustrc   rB   )r#  r3  r6  re   r   r$   r   )rK   r\   rM   rL   r]   r˜   rO   rO   rP   Útest_gust_scalars 	  s    


zTestFiltFilt.test_gust_scalars)r}   r!  Nr1  N)rŒ   r�   rŽ   r#  r$   rQ   r/  r1  r3  r9  r;  rO   rO   rO   rP   r  Î  s       ÿ
	"
r  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSOSFiltFiltr"  c           	      C   st   t j d¡ d¡}tddƒD ]R}tj|ddd�}t|Ž \}}t|Ž }t	|||ƒ}t
||ƒ}t||dd	| d
� qdS )z1Test equivalence between sosfiltfilt and filtfiltr   r?  rA   r@   çffffffÖ?r$  rÂ  r`  zorder=%s)rÊ   Úerr_msgN)re   rÒ   rµ  rÕ   rg   r   r%   r&   r'   r$   r.   r   )	rK   r\   rù  r$  rM   rL   r"  r]   Úy_sosrO   rO   rP   Útest_equivalence1	  s    
z TestSOSFiltFilt.test_equivalenceN)rŒ   r�   rŽ   r#  r@  rO   rO   rO   rP   r<  .	  s   r<  c                 C   sø   dd„ }t t|ƒt| ƒƒd }t| |ƒ}t |d|…  ¡ | || d…  ¡ | f¡}t||| ||fdddddd	d
�	}|\}}	}
}}|dkrštd| ƒ‚|d|… }||d… }t| ||ddd… |d�d ddd… }t| |||d�d }|||fS )aP  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significanly faster than this implementation.
    c                 S   s¼   t t|ƒt|ƒƒd }| d|… }| |d… }t||||d�d }t|||ddd… |d�d ddd… }t|||ddd… |d�d ddd… }	t|||	|d�d }
t ||
 d ¡}|S )z-Objective function used in filtfilt_gust_opt.rA   Nr™  r   r}   rB   )rc  r{  r"   re   rÏ   )ÚicsrM   rL   r\   ÚmÚz0fÚz0brÓ  Zy_fbÚy_bZy_bfÚvaluerO   rO   rP   Úfiltfilt_gust_opt_funcF	  s    ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrA   Nrš  r`  r¦  TF)rÚ   ZxtolZftolZmaxfunÚmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr}   r™  )	rc  r{  r#   re   r  r-  r   r¸  r"   )rM   rL   r\   rG  rB  rš  rA  r&  ÚoptZfoptZniterZfuncallsZwarnflagrC  rD  rE  r]   rO   rO   rP   Úfiltfilt_gust_opt=	  s,    	
0   ýÿ(rJ  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¡  r:  )r?  rd   r&  )r?  r&  r}   rA   c                 S   s   g | ]}t |ƒ‘qS rO   )rg   )r§   ry   rO   rO   rP   rª   }	  s     z'check_filtfilt_gust.<locals>.<listcomp>rÎ   rF  rÈ   )re   rÒ   rÓ   rÕ   r$   r7   r¤  rA  Z
empty_likerc  r{  rŒ  r   rJ  r   )rM   rL   rA  r?  r&  r\   r]   ZygZzg1Zzg2ZxxZ	out_shaper:  rB  Zzo1Zzo2ZindxrO   rO   rP   Úcheck_filtfilt_gusti	  s&    
$rK  c                  C   sP  dD �]D} dD ]–}d\}}}t jj|f| Ž }t jj|f| Ž }t||| d�}t||ƒ t||| dd�\}}	t|dkƒ tt|	ƒtkƒ td|	 ¡ ko d	|	 ¡ kƒ 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 )N)r€   rR   r   )rA   rB   )r{   r@   rb   rS   T)rT   Úmeasure>   rb   r   r   rb   rC   )r¯   r°   rå   l         @ r=   rB   rA   r>   )re   rÒ   rÕ   r   r	   r   r�  ÚdictÚkeysr  r$  rT  r   ræ   r   )rT   r´  rÙ   r  Ztrue_methodr\   rô   rd   Z
method_tryÚtimesZnot_fft_conv_supprO   rO   rP   Útest_choose_conv_method‰	  s.    



rP  c                  C   sâ   t jdddddd�\} }}d}t t |¡¡}tt t |¡t |¡ ¡ƒ}tj 	d¡ t
| ||ƒ\}}d |fD ]N}d	| }	t|||	fd
|ƒ tdƒD ]&}
dddg}|	||
< t||||
|ƒ q–qpd| d }t|||fd
|ƒ d S )Nr=   ç{®Gáz„?éx   gffffff¶?r$  rÂ  rš  r¡  r?   r   rB   rß   )r   Zellipre   rc  rº  r$  r)  r*  rÒ   rÓ   r&   rK  rg   )r^   Úpr  r-  r,  Zapprox_impulse_lenrM   rL   r&  Z
signal_lenr?  rA  ÚlengthrO   rO   rP   Útest_filtfilt_gust¨	  s    
rU  c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDecimatec                 C   s6   t  d¡}tttj|ddd� tttj|ddd� d S )NrH   r]  rA   )ÚqrÙ   rB   )re   r   rˆ   r  r   Údecimaterá  rO   rO   rP   Útest_bad_argsÈ	  s    
zTestDecimate.test_bad_argsc                 C   s:   t  d¡}tj|ddddd� ¡ }t||d d d… ƒ d S )NrH   rB   rA   ÚiirF©rÙ   ÚftypeÚ
zero_phase©re   r   r   rX  Úroundr   ©rK   r\   r]   rO   rO   rP   Útest_basic_IIRÍ	  s    
zTestDecimate.test_basic_IIRc                 C   s:   t  d¡}tj|ddddd� ¡ }t||d d d… ƒ d S )NrH   rB   rA   ÚfirFr[  r^  r`  rO   rO   rP   Útest_basic_FIRÒ	  s    
zTestDecimate.test_basic_FIRc                 C   sJ   t  d¡}tj|dddd�}t|jdƒ tj|dddd�}t|jdƒ d S )	N)rq   rq   rB   r   F)r?  r]  )rê  rq   rA   )rq   rê  )re   rD  r   rX  r	   rA  )rK   r^   Zd0Zd1rO   rO   rP   Ú
test_shape×	  s
    
zTestDecimate.test_shapec              	   C   s0   t ƒ � }| td¡ | jddd� W 5 Q R X d S )NúBadly conditioned filterrb  F©rd   r]  ©r   r  r1   Ú_test_phaseshift©rK   r	  rO   rO   rP   Útest_phaseshift_FIRß	  s    z TestDecimate.test_phaseshift_FIRc              	   C   s0   t ƒ � }| td¡ | jddd� W 5 Q R X d S )Nre  rb  Trf  rg  ri  rO   rO   rP   Útest_zero_phase_FIRä	  s    z TestDecimate.test_zero_phase_FIRc                 C   s   | j ddd� d S )NrZ  Frf  ©rh  ré   rO   rO   rP   Útest_phaseshift_IIRé	  s    z TestDecimate.test_phaseshift_IIRc                 C   s   | j ddd� d S )NrZ  Trf  rl  ré   rO   rO   rP   Útest_zero_phase_IIRì	  s    z TestDecimate.test_zero_phase_IIRc                 C   sø  d}ddddg}t dƒ}t || d ¡t|ƒ }t |¡d d	 }t d
tj |d d …tjf  | ¡tj	 
|jd¡ }|D �]r}	||	 }
t |	| d ¡t|	ƒ }t d
tj |d d …tjf  | ¡tj	 
|jd¡ }|dk�rd}t tj|d d|
 dd�d¡}n6|dk�rBd}dtj |
 }tjt |d|tj ¡Ž }|dk�r€t |j|j|| d	 tj ¡\}}|t |¡ }n
t |¡}tj|j|
|||d�}tj| ¡ | dd�}|t |¡ }|d|	 k }tt | ¡ | ¡| dddd� q~d S )NrR  rê  rÞ   rq   rü   r¦   rA   çš™™™™™é?rB   r[   çš™™™™™¹?rb  rá  rE  r8  rZ  r{   gš™™™™™©?F)r\  r]  r}   r\  r]  r   rÌ   rr  )r$  re   r   r,  r   r€  rb  ra  r   ÚwindowsZtukeyr¼   Zdltir®  Zcheby1ZfreqzrC  Zdenrº  Z	ones_likerX  rI  rÏ   r
  r   Úangle)rK   rd   r]  rf  rg  Zt_totr©   rh  ry   ri  rW  rj  Zd_tosrÙ   ÚsystemÚwcr¨   Zh_respsrk  Z	h_resampsZsubnyqrO   rO   rP   rh  ï	  sR    $ÿ
$ÿ
ÿÿ

ÿ
ÿ ÿzTestDecimate._test_phaseshiftc                 C   s|   d}d}t  |¡| }t  d| ¡t  dt j |d  | ¡ }tt j |¡ddd� tj	|d	d
d�}t
t j |¡dƒ d S )Ng      Y@r?  r  rB   g      >@rá  rÌ   r›  rq   rb  )r\  rQ  )re   r   ÚsqrtrJ  rb  r   ZlinalgZnormr   rX  r   )rK   ZsfreqrÙ   r©   r\   Zx_outrO   rO   rP   Útest_auto_n
  s    *zTestDecimate.test_auto_nc                 C   s.   t  tjdtjd�d¡}tt |¡ƒr*t‚d S )Nr¦  rå   rC   )r   rX  re   r$  rÅ   rØ   ÚisnanrG  rá  rO   rO   rP   Útest_long_float32+
  s    zTestDecimate.test_long_float32c                 C   s.   t  tjdtjd�d¡}|jjtjks*t‚d S )Nr¦   rå   rC   )	r   rX  re   r$  rË   r«   r�  r  rG  rá  rO   rO   rP   Útest_float16_upcast1
  s    z TestDecimate.test_float16_upcastN)rŒ   r�   rŽ   rY  ra  rc  rd  rj  rk  rm  rn  rh  rv  rx  ry  rO   rO   rO   rP   rV  Ç	  s   0rV  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–   r6  r   ©r  )re   r   rˆ   r‰   r    r   rá  rO   rO   rP   rY  9
  s    
zTestHilbert.test_bad_argsc                 C   sj  d}t j}t  dd| |d ¡}t  |¡}t  |¡}t  d| ¡}t  d| ¡}t  ||||g¡}t|ƒ}	t  |	¡}
t  |	¡}t  	|	¡}t
|||ƒ t
|
t  |j¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|	d j||ƒ d S )Nr   r   rB   r4  rA   r3  r=   )re   rb  r   rJ  rH  r+  r    rº  rr  rI  r
   r$  rA  r	  )rK   r+  rb  r©   rÒ  Úa1Úa2Úa3rL   rô   Zh_absZh_angleZh_realrO   rO   rP   Útest_hilbert_theoretical?
  sB    




þ  ÿþ  ÿz$TestHilbert.test_hilbert_theoreticalc                 C   sÎ   t  d¡ dd¡}t|dd�}tt|jdd�|jƒ tt|d ƒ|d dƒ t|ddd	�}t|jddgƒ tt|jddd	�jddgƒ t  d
dddddddddddddddddddg¡}t|d |ddƒ d S )Nræ  r=   r@   r}   r\  r   r   rÞ   )r  r?  y        Bm}¶Ä…û¿y      ð?ðãâa Àyûÿÿÿÿÿÿ?¥®0fÓóÀy      @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)	re   r   rf   r    r	   r�  r
   rA  r   )rK   rL   ZaaZaanZa0hilbrO   rO   rP   Útest_hilbert_axisNh
  s:    ízTestHilbert.test_hilbert_axisNr«   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )Nr{   rå   )re   rD  r	   rI  r   r    r«   rü  rO   rO   rP   Útest_hilbert_types�
  s    zTestHilbert.test_hilbert_typesN)rŒ   r�   rŽ   rY  r  r€  r3  r4  r5  re   rÅ   r  r�  rO   rO   rO   rP   rz  7
  s
   )%rz  c                   @   s2   e Zd Zdd„ Zej dejej	g¡dd„ ƒZ
dS )ÚTestHilbert2c                 C   s€   t  dgg¡}ttt|ƒ t  d¡ ddd¡}ttt|ƒ t  d¡ dd¡}ttt|dd� ttt|d	d� ttt|d
d� d S )Nr–   rú   rB   r=   r>   ro   r   r{  )rB   r   )rB   )re   r   rˆ   r‰   r!   r   rf   rá  rO   rO   rP   rY  •
  s    zTestHilbert2.test_bad_argsr«   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )N)rB   rF   rå   )re   rD  r	   rI  r   r!   r«   rü  rO   rO   rP   Útest_hilbert2_types¤
  s    z TestHilbert2.test_hilbert2_typesN)rŒ   r�   rŽ   rY  r3  r4  r5  re   rÅ   r  rƒ  rO   rO   rO   rP   r‚  “
  s   r‚  c                   @   s’   e Zd Zed#dd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )$ÚTestPartialFractionExpansionrn   c                 C   s„   t  |¡}t  |¡}t  t|d d …d f | ƒt| d d …d f | ƒ¡}t|ƒ\}}t|| || |d� t| | || |d� d S )Nr*  )re   r‹  Úhypotrº  r   r
   )r,  rS  Zr_trueZp_truer+  ZdistanceÚrowsÚcolsrO   rO   rP   Úassert_rp_almost_equal«
  s    

ÿz3TestPartialFractionExpansion.assert_rp_almost_equalc              
   C   s�  t dddgdddgƒ\}}tt|ƒdƒ t|d t dddg¡ƒ t|d t ddddg¡ƒ t|d t dddddg¡ƒ t|t ddddddg¡ƒ t dddgdddgdd�\}}tt|ƒdƒ t|d t dddddg¡ƒ t|d t ddddg¡ƒ t|d t dddg¡ƒ t|d t dddddg¡ƒ t|d t ddddg¡ƒ t|d	 t dddddg¡ƒ t|t ddddddg¡ƒ d S )
NrA   rB   r=   r   T)Zinclude_powersr@   r>   r?   )r8   r	   r{  r
   re   Úpoly)rK   Zfactorsr‰  rO   rO   rP   Útest_compute_factors·
  s"    ÿ
z1TestPartialFractionExpansion.test_compute_factorsc                 C   s@   t ddddddgddƒ\}}t|dddgƒ t|d	d
dgƒ d S )Nrá  gj¼t“ð?g?5^ºIð?r  g /Ý$ @r  rp  Úminr=   rB   rA   )r9   r	   ©rK   ÚuniqueÚmultiplicityrO   rO   rP   Útest_group_polesÊ
  s      ÿz-TestPartialFractionExpansion.test_group_polesc              	   C   sž  t ddddgddddgƒ\}}}t|dd	d
gdd� t|dddgdd� t|dgdd� t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddgddddgƒ\}}}|  ||dddgdddg¡ t|jdƒ t ddgddddgƒ\}}}|  ||dddgdddg¡ t|jdƒ t ddd d!d"gdd#d$d%gƒ\}}}t|d&ddgƒ t|d'd(d)gƒ t|ddgƒ t dgddd&gƒ\}}}t|d*d+gƒ t|dd&gƒ t|jdƒ t ddd,gdddddgƒ\}}}|  ||dd-d.dgdd/d0dg¡ t|jdƒ t dddgddddgƒ\}}}|  ||dddgdddg¡ t|jdƒ t ddgdd&dgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t dddgdd&dgƒ\}}}t|dd1gƒ t|ddgƒ t|dgƒ t ddddgdd&dgƒ\}}}t|d2d3gƒ t|ddgƒ t|dd4gƒ t dddgdd&ddgƒ\}}}|  ||dd5d6gdd7d8g¡ t|jdƒ d S )9Nr?   r=   r]  rn   r   r   r{   gZd;ßOõ?gîëÀ9#Jå¿g&äƒžÍªö¿r>   r*  gà-� ø1Ú¿gþe÷äa¡ò¿gvqà-ù?g      ô¿rA   r@   iôÿÿÿr}   rB   g333333Àg®Gáz®ÿ?g–C‹lçûÙ¿y      2À     @*Ày      2À     @*@g      B@y      à?š™™™™™É¿y      à?š™™™™™É?gffffffæ?gš™™™™™ñ¿g)\�Âõ(ì?g^ºI+ÀgÅ °rh‘õ?gffffffæ¿gìQ¸…ëÁ¿gú~j¼t“¨?éýÿÿÿrª  g333333Ó¿ro  r5  ç      Ð¿r§  y              ø?y       €      ø¿ù       €      ð¿r|   r—  r¨  éE   rG   y      ð¿      @y      ð¿      Àù      ð?      ð¿rX   )r4   r
   r	   r¼   rˆ  ©rK   r,  rS  r  rO   rO   rP   Útest_residue_generalÐ
  sv       þ
ÿ
 
 
ÿÿz1TestPartialFractionExpansion.test_residue_generalc              	   C   sì   t ddddgddddgƒ\}}}t dddddgddddgƒ\}}}t ddddgdddddgƒ\}}}	t ddddddgdddddddgƒ\}
}}t||ƒ t||ƒ t||
ƒ t||ƒ t||ƒ t||ƒ t||ƒ t||	ƒ t||ƒ d S ©Nr?   r=   r]  rn   r   r   r{   )r4   r
   ©rK   Zr0Úp0Zk0Úr1Úp1Zk1Úr2Zp2Zk2Zr3Zp3Zk3rO   rO   rP   Útest_residue_leading_zeros  s     ""*







z7TestPartialFractionExpansion.test_residue_leading_zerosc              	   C   sž   t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W 5 Q R X d S )	Nr   rA   r@   r{   r]  r   úDenominator `a` is zero.r  )r4   r
   r	   r¼   r3  r   r‰   r•  rO   rO   rP   Útest_resiude_degenerate$  s    z4TestPartialFractionExpansion.test_resiude_degeneratec              	   C   s
  t ddddgddddgƒ\}}}|  ||ddd	gd
ddg¡ t|dgƒ t dddgdddgƒ\}}}| j||ddgddgdd� t|dgdd� t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t dddgddddgƒ\}}}|  ||dddgdddg¡ t|jdƒ t ddddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|ddgƒ t dgddddgƒ\}}}|  ||dd d!gdd"d"g¡ t|jdƒ t ddgt dd#gdd$g¡ƒ\}}}t|d%d&gƒ t|d'dgƒ t|jdƒ t dddgddgƒ\}}}t|dgƒ t|dgƒ t|ddgƒ t dddgƒ\}}}t|dgƒ t|d
gƒ t|jdƒ t dddd$gƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddd(d)gƒ\}}}t|ddgƒ t|d$dgƒ t|jdƒ t dddgdddgƒ\}}}t|dd*gƒ t|ddgƒ t|dgƒ t ddgdddgƒ\}}}t|dd+gƒ t|ddgƒ t|jdƒ t ddddgdddgƒ\}}}t|d,d-gƒ t|ddgƒ t|d.dgƒ t dddgddddddgƒ\}}}| j||d/d0d!d1d2gd3d4d5d6d7gdd� t|jdƒ d S )8NrA   r@   rB   y       À      ð¿ra  r’  y       À      @y      @      @y      À      (Àr|   r[   r}   g'Â†§WÊÖ?y	Šcîì¿à-� øÀy	Šcîì¿à-� ø@y      à?*©ÐDØÔ?y      à?*©ÐDØÔ¿r>   r*  g�Å�1w@r§  r=   r   r˜  r   r]  r]  g      ø¿ç      ø?ræ  g
×£p=
×?g¸…ëQ¸Î?gš™™™™™Ù?gUUUUUUÕ¿r‘  r5  g«ªªªªª
ÀgUUUUUU@r‘  g      è¿r'  rî   r{   ièÿÿÿrê  rC   yoð…ÉTÁÐ?cÙ=yXÈ?yoð…ÉTÁÐ?cÙ=yXÈ¿yjMóŽ£?%uš¾¿yjMóŽ£?%uš¾?yÙÎ÷Sãé¿s×òAÏâ?yÙÎ÷Sãé¿s×òAÏâ¿rá  y-²�ï§ÆÓ?8gDioî?y-²�ï§ÆÓ?8gDioî¿)r5   rˆ  r
   r	   r¼   re   Zpolymulr•  rO   rO   rP   Útest_residuez_general3  s˜     ÿý ÿ$"  ÿ  ÿûz2TestPartialFractionExpansion.test_residuez_generalc              	   C   sì   t ddddgddddgƒ\}}}t dddddgddddgƒ\}}}t ddddgdddddgƒ\}}}	t ddddddgdddddddgƒ\}
}}t||ƒ t||ƒ t||
ƒ t||ƒ t||ƒ t||ƒ t||ƒ t||	ƒ t||ƒ d S r—  )r5   r
   r˜  rO   rO   rP   Útest_residuez_trailing_zeros„  s     ""*







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc              	   C   sÊ   t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W 5 Q R X tjtd	d�� t dddd
dgƒ W 5 Q R X d S )Nr   rA   r@   r{   r]  r   rž  r  z6First coefficient of determinant `a` must be non-zero.rB   r=   )r5   r
   r	   r¼   r3  r   r‰   r•  rO   rO   rP   Útest_residuez_degenerate•  s    ÿz5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   sŒ   dddg}dddg}g }dddg}dd	d
dg}dD ]T}t ||||d�\}}t||ƒ t||ƒ t||||d�\}}t||ƒ t||ƒ q2d S )Nr_  çUUUUUUÅ¿gÁ¿r   r]  r§  rA   r=   rn   rC   ©Úavgr-  r‹  r/  rc  r0  ©Úrtype©r(   r   r)   )	rK   r,  rS  r  Ú
b_expectedÚ
a_expectedr¨  rM   rL   rO   rO   rP   Ú*test_inverse_unique_roots_different_rtypes¨  s    





zGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s¨   ddddg}ddddg}g }dddd	g}dd
dd	g}dddddg}dD ]\}t ||||d�\}}	t||dd� t|	|ƒ t||||d�\}}	t||dd� t|	|ƒ qFd S )Nç333333Ã?ç9Žã8ŽãÈ¿r¤  çlÁlÁ¦?r   r]  r§  rA   r=   gUUUUUUå¿gUUUUUUý?rî   rú   rÞ   r¥  r§  r2  r§  r©  )
rK   r,  rS  r  rª  Zb_expected_zr«  r¨  rM   rL   rO   rO   rP   Ú,test_inverse_repeated_roots_different_rtypes»  s    
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc              	   C   st   ddddg}ddddg}g }t jtdd	�� t|||d
d� W 5 Q R X t jtdd	�� t|||d
d� W 5 Q R X d S )Nr­  r®  r¤  r¯  r   r]  r§  z`rtype` must be one ofr  r.  r§  )r3  r   r‰   r(   r)   r•  rO   rO   rP   Útest_inverse_bad_rtypeÌ  s    z3TestPartialFractionExpansion.test_inverse_bad_rtypec                 C   s@   dg}dg}dg}t |||ƒ\}}t|dgƒ t|ddgƒ d S )NrA   rB   r   rá  g       À)r)   r   )rK   r,  rS  r  rM   rL   rO   rO   rP   Ú test_invresz_one_coefficient_bugÕ  s    z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc              	   C   sF  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t dddgdddgg ƒ\}}t|dd	d
gƒ t|ddddgƒ t ddgddgdddgƒ\}}t|dddddgƒ t|dddgƒ t ddddddgddddddgg ƒ\}}t|ddddddgƒ t|dd d!d"d#d$d%gƒ t ddgddgddgƒ\}}t|dd&d'd(gƒ t|dddgƒ d S ))NrA   r}   r”  rB   ù      à?      Àr¿   rX   ù      @      Àù      !À      Ð?ù      @      
@ù       À      ø¿ù      à?       @ù      à?      à¿r]  rV  r=   ù      ð¿      ð¿ù      ð?       ÀrC   ù      À      ð¿r>   r|   r‡  r]  r”   y      @      ð¿y      <À      0@y      D@      OÀy      Y@      8@y     @rÀ     `k@y      h@     ÀpÀù      (À       @ù     €J@      4Àù      XÀ      Q@ù      ;@      RÀù      [@      KÀù     @TÀ      [@r   r   rZ   )r(   r
   ©rK   rM   rL   rO   rO   rP   Útest_invresÞ  s0     ÿ ÿ ÿz(TestPartialFractionExpansion.test_invresc              	   C   sF  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t dddgdddgg ƒ\}}t|dd	d
gƒ t|ddddgƒ t ddgddgdddgƒ\}}t|dddddgƒ t|dddgƒ t ddddddgddddddgg ƒ\}}t|dddddd gƒ t|dd!d"d#d$d%d&gƒ t ddgddgddgƒ\}}t|ddd'dgƒ t|dddgƒ d S )(NrA   r}   r”  rB   r³  r¿   rX   r´  rµ  r¶  r·  r¸  r¹  r]  rV  r=   g      @r¼  r»  y      ð¿      ÀrH   r>   r|   r‡  r]  r”   r@   y      IÀ      &@y      Y@      RÀy      T@      M@y      vÀ     €l@y     @m@     �rÀr½  r¾  r¿  rÀ  rÁ  rÂ  r�  )r)   r
   rÃ  rO   rO   rP   Útest_invreszö  s0     ÿ ÿ ÿz)TestPartialFractionExpansion.test_invreszc                 C   s\   t dddƒ\}}t|ddgƒ t|ddgƒ tdddƒ\}}t|ddgƒ t|ddgƒ d S )NrA   r   r}   rB   )r(   r
   r)   rÃ  rO   rO   rP   Útest_inverse_scalar_arguments  s    z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)rn   )rŒ   r�   rŽ   Ústaticmethodrˆ  rŠ  r�  r–  r�  rŸ  r¡  r¢  r£  r¬  r°  r±  r²  rÄ  rÅ  rÆ  rO   rO   rO   rP   r„  ª
  s"   DQ		r„  c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestVectorstrengthc                 C   s`   t  dg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr]  r   rá  rp  r   rB   ©re   r   r*   r	   r´  r
   rb  ©rK   ÚeventsÚperiodÚtarg_strengthZ
targ_phaseÚstrengthÚphaserO   rO   rP   Útest_single_1dperiod  s    
z'TestVectorstrength.test_single_1dperiodc                 C   sx   t  dg¡}dddg}dgd }t  dddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )	Nr]  rA   rB   r   rá  r=   r5  rp  )re   r   r*   r	   r´  r   r
   rb  rÊ  rO   rO   rP   Útest_single_2dperiod'  s    


z'TestVectorstrength.test_single_2dperiodc                 C   sj   t  ddddddg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr5  rB   rá  r'  r   rÉ  rÊ  rO   rO   rP   Útest_equal_1dperiod4  s    
z&TestVectorstrength.test_equal_1dperiodc                 C   s~   t  ddddddg¡}ddg}dgd }t  ddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr5  rA   rB   rá  r'  rÉ  rÊ  rO   rO   rP   Útest_equal_2dperiodA  s    

z&TestVectorstrength.test_equal_2dperiodc                 C   sh   t  dddddg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|d	t j | ƒ d S )
Nrp  çš™™™™™ñ?çÍÌÌÌÌÌ @çffffff@ç333333$@rA   rá  r   rB   rÉ  rÊ  rO   rO   rP   Útest_spaced_1dperiodN  s    
z'TestVectorstrength.test_spaced_1dperiodc                 C   s|   t  dddddg¡}ddg}dgd	 }t  dd
g¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|d	t j | ƒ d S )Nrp  rÔ  rÕ  rÖ  r×  rA   r]  rá  rB   rª  rÉ  rÊ  rO   rO   rP   Útest_spaced_2dperiod[  s    

z'TestVectorstrength.test_spaced_2dperiodc                 C   sd   t  dddg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr5  r]  ç      è?rA   çUUUUUUÕ?r   rB   rÉ  rÊ  rO   rO   rP   Útest_partial_1dperiodh  s    
z(TestVectorstrength.test_partial_1dperiodc                 C   s€   t  dddg¡}ddddg}dgd }t  ddddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )	Nr5  r]  rÚ  rá  rÛ  r>   rA   rB   rÉ  rÊ  rO   rO   rP   Útest_partial_2dperiodu  s    

z(TestVectorstrength.test_partial_2dperiodc                 C   sN   t  ddddg¡}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )Nr   r5  r]  rÚ  rá  ©re   r   r*   r	   r´  r
   ©rK   rË  rÌ  rÍ  rÎ  rÏ  rO   rO   rP   Útest_opposite_1dperiod‚  s    z)TestVectorstrength.test_opposite_1dperiodc                 C   sZ   t  ddddg¡}dgd }dgd }t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )	Nr   r5  r]  rÚ  rá  rC   r^  rA   rÞ  rß  rO   rO   rP   Útest_opposite_2dperiod�  s    

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t  ddgg¡}d}ttt||ƒ d S )NrA   rB   rá  ©re   r   rˆ   r‰   r*   ©rK   rË  rÌ  rO   rO   rP   Útest_2d_events_ValueError˜  s    z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t  dgg¡}ttt||ƒ d S )Nrá  rA   râ  rã  rO   rO   rP   Útest_2d_period_ValueError�  s    z,TestVectorstrength.test_2d_period_ValueErrorc                 C   s   d}d}t tt||ƒ d S )Nrá  r   ©rˆ   r‰   r*   rã  rO   rO   rP   Útest_zero_period_ValueError¢  s    z.TestVectorstrength.test_zero_period_ValueErrorc                 C   s   d}d}t tt||ƒ d S )Nrá  r}   ræ  rã  rO   rO   rP   Útest_negative_period_ValueError§  s    z2TestVectorstrength.test_negative_period_ValueErrorN)rŒ   r�   rŽ   rÐ  rÑ  rÒ  rÓ  rØ  rÙ  rÜ  rÝ  rà  rá  rä  rå  rç  rè  rO   rO   rO   rP   rÈ    s   rÈ  c                 C   s8   t  | ¡j}t  | t j¡} t  |t j¡}t| |ƒ |¡S )zEConvert TF2SOS, casting to complex128 and back to the original dtype.)re   r‹  r«   r   rs  r,   r×   )rM   rL   r«   rO   rO   rP   Úcast_tf2sos­  s    ré  rq  c                 C   sF   | j jdkr4t | jd ¡j }|  |¡| |¡ } }t| |||ƒ dS )z1Wrap assert_allclose while casting object arrays.r‰  r   N)r«   rÖ   re   r   Zflatr×   r   )ÚactualÚdesiredrÉ   rÊ   r«   rO   rO   rP   Úassert_allclose_cast»  s    rì  r  c              	   C   s  t dƒt dƒt dƒg}t dƒt dƒt dƒg}t dƒt dƒt dƒg}t |¡}|jjdks\t‚tt |t¡t |t¡| t¡ƒ}| t	kr˜t	|| g|ƒ}nt|||ƒ}t
dd„ |D ƒƒsºt‚t| t¡| t¡ƒ | tkrâddg}ntddƒg}tjtdd	�� | |d
diŽ W 5 Q R X d S )NrA   rB   r=   r‰  c                 s   s   | ]}t |tƒV  qd S rÆ  )Ú
isinstancer   )r§   r\   rO   rO   rP   Ú	<genexpr>Ï  s     z)test_nonnumeric_dtypes.<locals>.<genexpr>rá  zmust be at least 1-Dr  r\   )r   re   r   r«   rÖ   rG  r"   r,  r×   r-   Úallr   r,   r3  r   r‰   )r  r\   rM   rL   rë  rê  rÚ   rO   rO   rP   Útest_nonnumeric_dtypesÃ  s     
"
rð  ZfdgFDGOc                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSOSFiltc              
   C   s<  t  ddd¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}t  ddd	dd
dg¡ |¡}t||ƒ}|jj|ksrt‚tt	t||ƒ|ƒ|ƒ t  ddg¡ |¡}t  ddg¡ |¡}t  ddddddg¡ |¡}tt	t||ƒ|ƒ|ƒ dddg}dddg}t  
d
¡}t  ||f¡}d|_t	||ƒ}t|ddddddddgƒ d S )Nr   r?   r@   rA   r}   r]  r‘  rB   r>   r{   r[  r=   rn   rN  )rA   r@   )re   rG  r×   r   ré  r«   ÚcharrG  r   r-   r$  r  rA  r   )rK   ræ  r\   rM   rL   r”  r"  r]   rO   rO   rP   Ú
test_rank1ß  s$    




zTestSOSFilt.test_rank1c           	      C   sö   d}t  dt  |¡d t  |¡¡ |¡}| |¡}t  ddg¡ |¡}t  ddg¡ |¡}t jdddgdddgdddgdddgg|d	�}t jdddgdd
dgdddgdddgg|d	�}tt||ƒ|dd�}t||ƒ tt||ƒ|dd�}t||ƒ d S )Nr¡  r   rA   r}   r]  rB   r>   r@   rå   r   rH   r˜  ræ  r¤  r\  )	re   rG  r†  rf   r×   r   r-   ré  r   )	rK   ræ  rA  r\   rM   rL   r¢  r¥  r]   rO   rO   rP   Ú
test_rank2ù  s"    $
&ÿÿÿ
zTestSOSFilt.test_rank2c           	   
   C   s®   d}t  dt  |¡d t  |¡¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}tt||ƒ|ƒ}t|j	d ƒD ]:}t|j	d ƒD ]&}t
|||f t|||||f ƒƒ q€qnd S )Nr¬  r   rA   r}   r]  )re   rG  r†  rf   r   r×   r-   ré  rg   rA  r   r"   )	rK   ræ  rA  r\   rM   rL   r]   rh   r	  rO   rO   rP   r    s    $zTestSOSFilt.test_rank3c                 C   s>  t  ddd¡\}}t  ddd¡\}}t  ddd¡\}}t t ||¡|¡}t t ||¡|¡}	t tj||f tj||f tj||f f¡}
tj d¡ |¡}t	||	|d d… t 
d¡d�\}}tj|t	||	|dd … |d�d	 f }t|t	||	|ƒƒ t|
|d d… t 
d
¡d�\}}tj|t|
|dd … |d�d	 f }t||ƒ t|
ƒ}t d|¡}t|
||d�\}}t|t d¡ƒ t||ƒ d|j |_ttt|
||d� | ¡ }|jd	 dd|jd f|_ttt|
||d d …d d …d d …d	ddgf d� t|
||d�\}}t|d t d¡ƒ t|d d …d	d	d d …f |ƒ d S )NrB   r5  ÚlowrÚ  rß   rÞ   r@   r™  r   r¤   r{   r  rA   r}   r  )r   r%   re   r   r   Zr_rÒ   rœ  r×   r"   rD  rì  r-   r/   r$  rA  rˆ   r‰   rT  )rK   ræ  Úb1r|  Úb2r}  Zb3r~  rM   rL   r"  r\   Zy_truerš  r?  r]   rž  Zzi_ndrO   rO   rP   Útest_initial_conditions  s8    ."& $


 ÿz#TestSOSFilt.test_initial_conditionsc                 C   s¼  t j d¡jdddd�}| |¡}tjdddd	�}t|Ž }|jd }d
}t	|jƒ}d||< |g| }t  
|¡}t||||d�\}	}
t||d d …d d…d d …f ||d�\}}t||d d …dd …d d …f ||d�\}}t j||f|d�}t||	ddd� t||
ddd� t|ƒ}|d
dd
g|_||d d …dd
…d d …f  }t||||d�d }t|Ž \}}t||ƒ}d
|jd
g|_||d d …dd
…d d …f  }t|||||d�d }t||ddd� d S )NéŸ   r   r?   )rB   rê  r=   r»   r@   r=  r$  rÂ  rA   rB   r©  r\  rš  ç‚vIhÂ%<=rÈ   )re   rÒ   rµ  r¶  r×   r   r%   r'   rA  r´  rD  r-   r  rì  r/   r&   r#   r¼   r"   )rK   ræ  r\   r$  r"  Z	nsectionsr?  ZshpZz0rt  rž  r0  r7  r  r8  r]   rš  rM   rL   Zy_tfrO   rO   rP   Ú test_initial_conditions_3d_axis1@  s4    




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c              	   C   sˆ   t  d|¡}t  d¡}t  d¡}tjtdd�� t|||dd� W 5 Q R X d|d d …d	f< tjtd
d�� t|||dd� W 5 Q R X d S )N)r=   rê  r=   )r>   r@   )r>   r=   r=   rB   zshould be all onesr  rA   )rš  r?  rá  r=   zInvalid zi shape)re   rŒ  rD  r3  r   r‰   r-   )rK   ræ  r\   r"  rš  rO   rO   rP   Útest_bad_zi_shapen  s    

zTestSOSFilt.test_bad_zi_shapec                 C   s¼   t jdddd�}t|ƒ}t|t d|¡|d�\}}t||dd� t |d d …d d	…f jd
d�|d d …d	d …f jd
d� ¡}t||dd� t|t d|¡| 	¡ d�\}}t||dd� d S )Nr@   rª  r"  rÂ  rü   r™  rú  r›  r=   r}   r\  )
r   r%   r/   r-   re   r$  rì  r†  rÏ   r·  )rK   ræ  r"  rš  r]   rž  Ússr¨   rO   rO   rP   Útest_sosfilt_ziz  s    >zTestSOSFilt.test_sosfilt_ziN)
rŒ   r�   rŽ   ró  rô  r  rø  rû  rü  rþ  rO   rO   rO   rP   rñ  Û  s   &.rñ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDeconvolvec              	   C   sP   ddddddddg}ddg}dddddddddg	}t  ||¡\}}t||ƒ d S )Nr   rA   rB   r=   )r   Ú
deconvolver   )rK   ÚoriginalÚimpulse_responseÚrecordedZ	recoveredÚ	remainderrO   rO   rP   rQ   Œ  s
    zTestDeconvolve.test_basicc              	   C   sF   ddgddgg}ddg}t jtdd�� t ||¡\}}W 5 Q R X d S )Nr   zsignal must be 1-D.r  ©r3  r   r‰   r   r   ©rK   r  r  Zquotientr  rO   rO   rP   Útest_n_dimensional_signal”  s    z(TestDeconvolve.test_n_dimensional_signalc              	   C   sF   ddg}ddgddgg}t jtdd�� t ||¡\}}W 5 Q R X d S )Nr   zdivisor must be 1-D.r  r  r  rO   rO   rP   Útest_n_dimensional_divisorš  s    z)TestDeconvolve.test_n_dimensional_divisorN)rŒ   r�   rŽ   rQ   r  r  rO   rO   rO   rP   rÿ  Š  s   rÿ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDetrendc                 C   s.   t tdddgƒƒ}tdddgƒ}t||ƒ d S r„  )r2   r   r   )rK   Z	detrendedZdetrended_exactrO   rO   rP   rQ   £  s    zTestDetrend.test_basicc                 C   s8   t dddddgƒ}t|dd�}t|dd�}t||ƒ d S )	NrA   ç333333ó?r   gš™™™™™ù?g333333@F)Zoverwrite_dataT)r   r2   r   )rK   r\   Z
copy_arrayZinplacerO   rO   rP   Ú	test_copy¨  s    zTestDetrend.test_copyN)rŒ   r�   rŽ   rQ   r  rO   rO   rO   rP   r	  ¡  s   r	  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestUniqueRootsc                 C   s@   dddddg}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )Nr  r‘  r_  r
  r[  rê  r*  ©r3   r
   r	   re   r$  r{  ©rK   rS  r�  rŽ  rO   rO   rP   Útest_real_no_repeat°  s    z#TestUniqueRoots.test_real_no_repeatc                 C   sÄ   dddddddg}t |dd	d
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ d S )Nr  gffffffî¿g{®Gázì¿gš™™™™™é¿r]  rá  gÍÌÌÌÌÌð?rp  r‹  ©Útolr¨  rê  r*  rB   rA   rc  r¦  g333333ï¿g
×£p=
ë¿gffffffð?©r3   r
   r	   r  rO   rO   rP   Útest_real_repeat¶  s    z TestUniqueRoots.test_real_repeatc                 C   s@   dddddg}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )Nr  r|   ù      à?      à?rº  r7  rê  r*  r  r  rO   rO   rP   Útest_complex_no_repeatÅ  s    z&TestUniqueRoots.test_complex_no_repeatc                 C   sÄ   dddddddg}t |dd	d
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ d S )Nr  y      ð¿š™™™™™©?yffffffî¿333333Ã?yÍÌÌÌÌÌì¿333333Ã?r^  r  yÍÌÌÌÌÌÜ?š™™™™™á?rp  r‹  r  rê  r*  rB   rA   rc  r¦  y      ð¿š™™™™™™?yš™™™™™í¿333333Ã?yffffffÞ?ÍÌÌÌÌÌà?r  r  rO   rO   rP   Útest_complex_repeatË  s,    
 ÿÿ
þ 
þz#TestUniqueRoots.test_complex_repeatc                 C   sj   t  t  t  d¡t  d¡¡¡}ddddg}t|ƒ\}}t  |¡}tt  |¡|dd� t|ddddgƒ d S )	Nr?   y¨ô—›wãé¿^Zu#Ïâ¿y§ô—›wãé¿_Zu#Ïâ?yNé/7ïÆÓ? UDoî¿yPé/7ïÆÓ?ÿTDoî?rn   r*  rB   )re   Úrootsr   r$  r3   Úsortr
   r	   )rK   rS  Z
true_rootsr�  rŽ  rO   rO   rP   Útest_gh_4915à  s    
zTestUniqueRoots.test_gh_4915c                 C   sl   t dddgƒ\}}t|ddgdd� t|ddgƒ t dddgd	d
�\}}t|ddgdd� t|ddgƒ d S )Nrá  r|   rê  r*  rB   rA   g_p‰   ð?y•Ö&è.>      ð?rp  )r  r  rŒ  rO   rO   rP   Útest_complex_roots_extraê  s    z(TestUniqueRoots.test_complex_roots_extrac                 C   sP   t j d¡dt j d¡  }t|dƒ\}}t|t  |¡gdd� t|dgƒ d S )Nr¦   r|   rB   rê  r*  )re   rÒ   rœ  r3   r
   r‹  r	   r  rO   rO   rP   Útest_single_unique_rootó  s    z'TestUniqueRoots.test_single_unique_rootN)
rŒ   r�   rŽ   r  r  r  r  r  r  r  rO   rO   rO   rP   r  ¯  s   
	r  )N)rq  r   )�r  Úconcurrent.futuresr   r   r+  r   Ú	itertoolsr   Úmathr   r3  r   rˆ   Znumpy.testingr	   r
   r   r   r   r   r   r   Únumpyr   r   re   Z	scipy.fftr   r*  r   Zscipy.optimizer   r   Zscipyr   Zscipy.signalr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Zscipy.signal.windowsr6   Zscipy.signal._signaltoolsr7   r8   r9   Zscipy.signal._upfirdnr:   Z
scipy._libr;   r<   r�   rë   r6  rK  r¹  rÀ  rÃ  rÄ  rÅ  rÜ  rå  r)  rx  r2  ry  rƒ  r…  rÖ  rØ  rÙ  rÚ  rÜ  rÞ  rà  râ  rã  rå  r4  r5  r  r   r!  r"  r#  r$  r%  rÅ   r  r&  rç  rþ  r  Zcsingler'  r(  r  r  r  r  r<  rJ  rK  rP  rU  rV  rz  r‚  r„  rÈ  ré  rì  rð  rñ  rÿ  r	  r  rO   rO   rO   rP   Ú<module>   sÈ   (€ht B  l 	P  O        ýv-_'`,
 p\  p 

 /