U
    »mœd‘ ã                   @   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   ú\/home/sam/Atlas/atlas_env/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 )>   Ú	complex64Úfloat32rO   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   Ú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=   r1  rS   r}   )
r+  r,  re   r   r-  rf   r   Úpadr   r   )rK   r.  rL   rM   rN   ZapadrO   rO   rP   Útest_boundary_extension_fullk  s    z,_TestConvolve2d.test_boundary_extension_fullc                 C   s\   t  dd¡ d¡}t  dd¡ d¡}tttf||fžddiŽ tttf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   rŠ   rO   rO   rP   r¥   v  s    z#_TestConvolve2d.test_invalid_shapesN)rŒ   r�   rŽ   rz   rö   rø   r  r  r  r  r  ÚpytestÚmarkÚparametrizer   r   r(  r/  r3  r¥   rO   rO   rO   rP   rë     s$   	
		ÿÿ
rë   c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	ej 
d	¡d
d„ ƒƒZdS )ÚTestConvolve2dc                 C   sj   dddgdddgg}dddddddgdddddd	d
gg}t ||dƒ}tdddgdddggƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rn   r{   rî   rC   rR   rD   rE   rU   rï   rð   rñ   r  )rK   rí   r½   rõ   rô   rO   rO   rP   r    …  s    $
ÿzTestConvolve2d.test_same_modec                 C   sÒ   dddgdddgg}dddddddgdddddd	d
gg}dddddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ ddgddgg}dddgdddgg}ddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rn   r{   rî   rC   rr   rï   rð   rñ   rò   r€   rX   r•   rZ   y      @        r”   ù      @       @y      @      ð?y      @      Ày      ;@      ð¿y      G@       @)r   r   )rK   rí   r½   r˜   r™   rO   rO   rP   rš   �  s    $



zTestConvolve2d.test_valid_mode2c              	   C   sv   t  d¡}t  dddg¡}dD ]R}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )Nr?   çš™™™™™	@çffffffö?r=   ©r   r€   rR   rS   )re   r   r   r
   r   r   Úsqueezer   ©rK   rL   rM   rT   rO   rO   rP   Útest_consistency_convolve_funcs¤  s    
ÿÿþz.TestConvolve2d.test_consistency_convolve_funcsc                 C   s>   t ttddƒ t ttdgdgƒ t ttdgggdgggƒ d S )Nr=   r>   r  ré   rO   rO   rP   Útest_invalid_dims¯  s    z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s¢   ddt  ¡ j  }t d| d t  ¡ j d ¡ t jd| t jd�}d|d d d…< t jjj||dfdd	�}t	 
|ddgg¡}t  |dk¡}|d
 jd
k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?  r4  r5  ÚslowZxfail_on_32bitrJ  rO   rO   rO   rP   r7  ƒ  s   
r7  c                   @   s”  e Zd Zej dddddgddgg¡dd„ ƒZej dddgddgg¡d	d
„ ƒZej dddddgddgg¡dd„ ƒZej dddgddgg¡dd„ ƒZ	ej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZ
ej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej ddddgdgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej dddgg¡dd „ ƒZej dddddgddgg¡d!d"„ ƒZej dddgddgg¡d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zej dddddgddgg¡d-d.„ ƒZej dddgddgg¡d/d0„ ƒZej ddd1gd1dgddgddgd2d1gd1d2gd2dgdd2gg¡d3d4„ ƒZejjej d5eedd6ƒƒeed7d8ƒƒ ej  d9¡ !d:d;d<¡ "¡  ¡d=d>„ ƒƒZ#d?d@„ Z$dS )AÚTestFFTConvolveÚaxesÚ Nr   r}   c                 C   sP   t dddgƒ}t dddddgƒ}|dkr4t||ƒ}nt|||d	�}t||ƒ d S )
NrA   rB   r=   r>   rC   rH   ç      "@rN  ©rM  ©r   r   r   ©rK   rM  rL   r˜   r™   rO   rO   rP   Ú	test_realÇ  s    zTestFFTConvolve.test_realrA   c                 C   s\   t dddgƒ}t dddddgƒ}t |ddg¡}t |ddg¡}t|||d�}t||ƒ d S )	NrA   rB   r=   r>   rC   rH   rO  rP  ©r   re   Útiler   r   rR  rO   rO   rP   Útest_real_axesÓ  s    zTestFFTConvolve.test_real_axesc                 C   sP   t dddgƒ}t dddddgƒ}|d	kr4t||ƒ}nt|||d
�}t||ƒ d S )NrX   ù       @       @ù      @      @r[   ù               @ù              4@ù              8@ù              2@rN  rP  rQ  rR  rO   rO   rP   r_   Þ  s    zTestFFTConvolve.test_complexc                 C   s\   t dddgƒ}t dddddgƒ}t |d	d
g¡}t |d	d
g¡}t|||d�}t||ƒ d S )NrX   rW  rX  r[   rY  rZ  r[  r\  rB   rA   rP  rT  rR  rO   rO   rP   Útest_complex_axesé  s    z!TestFFTConvolve.test_complex_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ä   rN  rP  rQ  rR  rO   rO   rP   Útest_2d_real_sameô  s    
ÿþz!TestFFTConvolve.test_2d_real_samerB   c                 C   s„   t dddgdddggƒ}t ddddd	gd
ddddgdddddggƒ}t |dddg¡}t |dddg¡}t|||d�}t||ƒ d S )NrA   rB   r=   r>   r?   r@   rC   rH   rî   r{   rû   r_  rã   rŸ   ro   rü   r’   rä   rP  rT  rR  rO   rO   rP   Útest_2d_real_same_axes  s    	
ÿþz&TestFFTConvolve.test_2d_real_same_axesc                 C   st   t dddgdddggƒ}t ddd	d
dgdddddgdddddggƒ}|dkrXt||ƒ}nt|||d�}t||ƒ d S )Nù      ð?       @ù      @      @ù      @      @rY   ù      @      @ù      @      @ù      À      @ù      $À      4@ù      5À      L@ù      2À      S@ù      &À      N@ù              $@ù              F@ù             €]@ù             €c@ù             €^@ù      $@      4@ù      5@      L@ù      2@      S@ù      &@      N@rN  rP  rQ  rR  rO   rO   rP   Útest_2d_complex_same   s    
ÿýz$TestFFTConvolve.test_2d_complex_samec                 C   s„   t dddgdddggƒ}t ddd	d
dgdddddgdddddggƒ}t |dddg¡}t |dddg¡}t|||d�}t||ƒ d S )Nrb  rc  rd  rY   re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  rB   rA   rP  rT  rR  rO   rO   rP   Útest_2d_complex_same_axes:  s    	
ÿýz)TestFFTConvolve.test_2d_complex_same_axesc              
   C   s´   t dddgƒ}t dddddddd	dg	ƒ}t d
ddgƒ}t dddd
dddddg	ƒ}|dkrft||dƒ}nt||d|d�}t||ƒ |dkr–t||dƒ}nt||d|d�}t||ƒ d S )NrA   rB   r=   r?   r@   r{   rn   rî   r   ç     €A@ç     €D@ç     €G@rO  ç      4@ç      9@r  ç      <@r  rN  rR   rP  rQ  ©rK   rM  rL   rM   Z
expected_1Z
expected_2r™   rO   rO   rP   Útest_real_same_modeQ  s    
z#TestFFTConvolve.test_real_same_modec              
   C   sÈ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddgƒ}t dddd
dddddg	ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )NrA   rB   r=   r?   r@   r{   rn   rî   r   rw  rx  ry  rO  rz  r{  r  r|  r  rR   rP  rT  r}  rO   rO   rP   Útest_real_same_mode_axesd  s    
z(TestFFTConvolve.test_real_same_mode_axesc              
   C   s¢   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}|dkrTt||dƒ}nt||d|d�}t||ƒ |dkr„t||dƒ}nt||d|d�}t||ƒ d S )Nr=   rB   rA   r?   r@   r{   rn   rî   r   ç      8@ç      ?@rx  r  ç     €H@r{  ç      (@rN  r€   rP  rQ  ©rK   rM  rL   rM   r˜   r™   rO   rO   rP   Útest_valid_mode_realv  s    
z$TestFFTConvolve.test_valid_mode_realc              
   C   sŒ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ d S ©Nr=   rB   rA   r?   r@   r{   rn   rî   r   r€  r�  rx  r  r‚  r{  rƒ  r€   rP  rT  r„  rO   rO   rP   Útest_valid_mode_real_axes‰  s    z)TestFFTConvolve.test_valid_mode_real_axesc                 C   s’   t dddgƒ}t dddddgƒ}t d	d
dgƒ}|dkrDt||dƒ}nt||d|d�}t||ƒ |dkrtt||dƒ}nt||d|d�}t||ƒ d S )Nù      @      ð¿ù       @      @r–   r8  ù      @      Àù      @        ù      @      ð¿ù       @        ù     €F@      (@ù      >@      7@ù      H@      @@rN  r€   rP  rQ  r„  rO   rO   rP   Útest_valid_mode_complex—  s    
z'TestFFTConvolve.test_valid_mode_complexc                 C   s–   t dddgƒ}t dddddgƒ}t d	d
dgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )Nrˆ  r‰  r–   r8  rŠ  r‹  rŒ  r�  rŽ  r�  r�  rB   rA   r€   rP  rT  r„  rO   rO   rP   Útest_valid_mode_complex_axes©  s    
z,TestFFTConvolve.test_valid_mode_complex_axesc              
   C   sŒ   t dddgƒ}t dddddddd	dg	ƒ}t d
ddddddgƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||ddd�}t||ƒ d S r†  rT  r—   rO   rO   rP   Útest_valid_mode_ignore_nonaxes¹  s    z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S ©Nr   r?   r@   rn   )r   r   r¼   ré   rO   rO   rP   Ú
test_emptyÆ  s    zTestFFTConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rk   ©r   r   r	   ©rK   rL   rM   r™   rO   rO   rP   r`   Ì  s    
zTestFFTConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rk   r–  r—  rO   rO   rP   rl   Ò  s    


z#TestFFTConvolve.test_single_elementc                 C   s�   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}|dkrht||dƒ}nt||d|d�}tt j||dd	�ƒ d S )
NéÒ  éÑ  r|   é)  r   rN  rP  ç»½×Ùß|Û=©rÉ   )re   rÒ   rÓ   Úrandr   r   r   Úallcloser„  rO   rO   rP   Útest_random_dataØ  s    z TestFFTConvolve.test_random_datac                 C   sª   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}t  |ddg¡}t  |ddg¡}t  |ddg¡}t||d|d�}tt j||d	d
�ƒ d S )Nr˜  r™  r|   rš  r   rB   rA   rP  r›  rœ  )	re   rÒ   rÓ   r�  r   rU  r   r   rž  r„  rO   rO   rP   Útest_random_data_axeså  s    z%TestFFTConvolve.test_random_data_axesr>   éüÿÿÿc                 C   sN  d\}}t j d¡ t jj|Ž dt jj|Ž   }t jj|Ž dt jj|Ž   }t||dƒ}|d d …d d …d d d f }|d d …d d …d d d f }|d d …d d …d d d f }t  | dd¡dd¡}t  | dd¡dd¡}t  | dd¡dd¡}t  |ddd	ddg¡}t  |dddddg¡}t  |ddd	ddg¡}t||d|d
�}t	||ddd� d S )N))é{   rD   )é„   é   r˜  r|   r   r   rB   rA   r>   r=   rP  r›  rÈ   )
re   rÒ   rÓ   r�  r   ZmoveaxisÚswapaxesrU  r   r   )rK   rM  Za_shaperi   rL   rM   r˜   r™   rO   rO   rP   Útest_random_data_multidim_axesó  s     	z.TestFFTConvolve.test_random_data_multidim_axesrÙ   r¦   r@  iÜ  r˜  rA  é'  r?   c                 C   s„   t j |¡dt j |¡  }t j |¡dt j |¡  }t  ||d¡}t||dƒ}t||dd� t||ddgd�}t||dd� d S )Nr|   r   r›  ©rÊ   r   rP  )re   rÒ   r�  r   r   r   )rK   rÙ   rL   rM   r˜   r™   rO   rO   rP   Útest_many_sizes  s    zTestFFTConvolve.test_many_sizesc              
   C   sp   d}t j d¡}| |¡}t jt jfD ]D}||d< t dd¡}tj	t
dd�� tj||dd	d
� W 5 Q R X q&d S )Nr@  l   [<zn( r¦   éÈ   çš™™™™™É?zUse of fft convolutionr  rR   r   r…   )re   rÒ   Zdefault_rngÚstandard_normalÚnanÚinfr   Úfirwinr4  ÚwarnsÚRuntimeWarningr   )rK   rÙ   ÚrngZsig_nanÚvalZcoeffsrO   rO   rP   Útest_fft_nan#  s    
zTestFFTConvolve.test_fft_nan)%rŒ   r�   rŽ   r4  r5  r6  rS  rV  r_   r]  r`  ra  ru  rv  r~  r  r…  r‡  r‘  r’  r“  r•  r`   rl   rŸ  r   r¦  rK  Úlistrg   re   rÒ   ÚRandomStateÚrandintÚtolistr©  r´  rO   rO   rO   rP   rL  Å  sº   







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

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

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



ÿzTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s†   t j ||¡}t j ||¡}	|rL|dt j ||¡  }|	dt j ||¡  }	t||	|d�}
| tjdt¡ t||	|d�}t	||
ƒ d S rÍ  rÎ  )rK   rÈ  rÉ  Ú	shape_a_1Ú	shape_b_1rT   rÌ  rÐ  rL   rM   r˜   r™   rO   rO   rP   Útest_2d_noaxesŠ  s    
ÿzTestOAConvolve.test_2d_noaxesrB   c                 C   sÆ   |gd }|gd }|||d < |||d < |||d < |||d < t jj|Ž }t jj|Ž }|	rˆ|dt jj|Ž   }|dt jj|Ž   }t||||d�}|
 tjdt¡ t||||d�}t	||ƒ d S )Nr=   r   rA   r|   rÔ  r   rÎ  )rK   rM  rÈ  rÉ  rØ  rÙ  rT   rÒ  rÓ  rÌ  rÐ  rÕ  rÖ  rL   rM   r˜   r™   rO   rO   rP   Útest_2d_axesŸ  s"    


ÿzTestOAConvolve.test_2d_axesc                 C   sF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S r”  )r   r   r¼   ré   rO   rO   rP   r•  ¿  s    zTestOAConvolve.test_emptyc                 C   s,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rk   ©r   r   r	   r—  rO   rO   rP   r`   Å  s    
zTestOAConvolve.test_zero_rankc                 C   s0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S rk   rÜ  r—  rO   rO   rP   rl   Ë  s    


z"TestOAConvolve.test_single_elementN)rŒ   r�   rŽ   r4  r5  rK  r6  rÅ  rµ  rg   rÊ  rÁ  rÑ  r×  rÄ  rÚ  rÛ  r•  r`   rl   rO   rO   rO   rP   rÆ  J  sL   ÿÿ	ÿÿþþrÆ  c                   @   s¼   e Zd Zej deeg¡dd„ ƒZej deeg¡dd„ ƒZ	ej ddgdfddgfd	gdggfg¡ej deeg¡d
d„ ƒƒZ
ej deeg¡dd„ ƒZej dejejg¡dd„ ƒZdS )ÚTestAllFreqConvolvesÚconvapproachc              	   C   sN   t  dd¡ d¡}t  dd¡ d¡}ttdd�� |||d	d
� W 5 Q R X d S )NrA   rn   r¢   r£   r   r¤   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r€   rS   )re   r   rf   rˆ   r‰   ©rK   rÞ  rL   rM   rO   rO   rP   r¥   Ô  s    ÿz(TestAllFreqConvolves.test_invalid_shapesc              	   C   sR   t  ddddg¡}t  ddddg¡}ttdd�� |||ddgd	� W 5 Q R X d S )
Nr?   r@   rB   rA   r=   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rP  )re   rE  rˆ   r‰   rß  rO   rO   rP   Útest_invalid_shapes_axesÞ  s    ÿz-TestAllFreqConvolves.test_invalid_shapes_axesza,brA   rB   r=   c              	   C   s&   t tdd�� |||ƒ W 5 Q R X d S )Nz/in1 and in2 should have the same dimensionalityr  ©rˆ   r‰   )rK   rL   rM   rÞ  rO   rO   rP   rê   é  s    ÿz)TestAllFreqConvolves.test_mismatched_dimsc              	   C   sF  t tdd�� |dgdgdd� W 5 Q R X t tdd�� |dgdgg d� W 5 Q R X t td	d��$ |dgdgddgd
dggd� W 5 Q R X t td	d��  |dgdgddddgd� W 5 Q R X t tdd�� |dgdgdgd� W 5 Q R X t tdd�� |dgdgdgd� W 5 Q R X t tdd�� |dgdgddgd� W 5 Q R X d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rA   rB   ZchipsrS   z#when provided, axes cannot be emptyrP  z-axes must be a scalar or iterable of integersr=   r>   ç      ð?r  r   r!  z$axes exceeds dimensionality of inputr^  zall axes must be uniquer   rá  )rK   rÞ  rO   rO   rP   Útest_invalid_flagsõ  s0    ÿÿ($ÿÿÿz'TestAllFreqConvolves.test_invalid_flagsr«   c                 C   sp   t j d¡ |¡}t j d¡ |¡}t  |ƒ ¡r@|d7 }|d8 }t||ƒ}t|t||dd�ƒ |j|kslt‚d S )N)ra   ra   )r>   r>   y        š™™™™™¹?rb   rc   )	re   rÒ   r×   Ziscomplexobjr   r   r   r«   rH  )rK   r«   r\   r]   ÚresrO   rO   rP   Útest_longdtype_input  s    
z)TestAllFreqConvolves.test_longdtype_inputN)rŒ   r�   rŽ   r4  r5  r6  r   r   r¥   rà  rê   rã  re   Z	longfloatZlongcomplexrå  rO   rO   rO   rP   rÝ  Ò  s0   ÿ
ÿ
	þÿÿÿ
rÝ  c                   @   s€  e Zd Zddddddddddg
dddddddd	d
dg
dddddddddd	g
ddddddddddg
ddddddddddg
dddd
dd	ddddg
ddddd
d dd
d!d"g
d#d$dd%d&dd'd(d)d*g
d+d,ddd-dd!d.dd/g
d dd0d+d1d2ddd3dg
g
Zddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
dddddddd(ddg
d$ddddddd.d(d/g
d ddddddd3d(d/g
d+ddddddd.d3dg
dd d$d1d d d.d.d.dg
dd+d,d+d2d2ddd!dg
g
Zd+d#gZd4d5„ Zej 	d6e
je
je
je
je
jee
je
je
je
je
jg¡d7d8„ ƒZej 	d6e
je
je
je
je
jg¡d9d:„ ƒZd;d<„ Zd=d>„ Zd?d@„ Zej 	d6e
je
je
jg¡dAdB„ ƒZdCS )DÚTestMedFiltrß   r  é   ra   r“   rþ   r   éH   éM   r  r  rË  é   rý   rº   é   é   é_   é#   rU   rî   r"  r�   éa   rE   r‘   rœ   rs   éG   râ   r  rF   rú   r  r=   é!   rÿ   rA   r  é7   rH   éS   rn   r¤  rä   é+   rû   éX   é'   r>   rž   c                 C   sB   t  | j| j¡}t  t | jt¡| j¡}t|| j	ƒ t||ƒ d S rÇ  )
r   ÚmedfiltÚINÚKERNEL_SIZEÚ	medfilt2dre   r   r-  r   ÚOUT)rK   ry   rí   rO   rO   rP   rQ   <  s    zTestMedFilt.test_basicr«   c                 C   s8   t j| j|d�}tt |¡j|ƒ tt |¡j|ƒ d S ©Nrå   )re   r   rø  r	   r   r÷  r«   rú  ©rK   r«   Úin_typedrO   rO   rP   Ú
test_typesB  s    zTestMedFilt.test_typesc              	   C   s\   t j| j|d�}tjtdd�� t |¡ W 5 Q R X tjtdd�� t |¡ W 5 Q R X d S )Nrå   Zorder_filterNDr  )	re   r   rø  r4  r   r‰   r   r÷  rú  rý  rO   rO   rP   Útest_invalid_dtypesK  s
    zTestMedFilt.test_invalid_dtypesc              	   C   s^   t  t¡� tttjd ƒ W 5 Q R X tjdtj	d�}|dd… }d|_
tt |d¡dkƒ d S )NrC   rå   r?   r@   ro   rA   ç      @)r4  r°  ÚUserWarningrˆ   Ú	TypeErrorr   r÷  re   r   Úfloat64rC  r   )rK   ÚdummyrL   rO   rO   rP   Ú	test_noneU  s    zTestMedFilt.test_nonec              	   C   s”   t dƒ}tj||gtd�}ttdƒr4dt |¡ }nd}t t	¡� t
|ƒD ]}t |¡ qLW 5 Q R X ttdƒr‚tt |¡|k ƒ t|||gƒ d S )Nr¢  rå   ÚgetrefcountrB   rC   )r   re   r   r´   ÚhasattrÚsysr  r4  r°  r  rg   r   r÷  r   r	   )rK   rL   r\   rÙ   ÚjrO   rO   rP   Útest_refcountinga  s    

zTestMedFilt.test_refcountingc                 C   s8   t j| jtd�}t j| jtd�}tt || j¡|ƒ d S rü  )	re   r   rø  r´   rû  r   r   r÷  rù  )rK   Z	in_objectZ
out_objectrO   rO   rP   Útest_objectq  s
    ÿzTestMedFilt.test_objectc           
   	      sü   t jˆj|d�‰t jˆj|d�}ˆj|jks0t‚|jd d ‰ |jd d ‰ˆjd d d ‰ˆjd d d ‰‡ ‡‡‡‡‡fdd„‰t  |¡}tdd��N‰d	d
ddh}‡‡fdd„|D ƒ}t	|ƒD ]}| 
¡ \}}}	||||	f< 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   )Úsubmit)r§   r  )r  ÚpoolrO   rP   r®   ¦  s     z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)re   r   rø  rû  rB  rH  rù  Z
zeros_liker   r   r'  r   )
rK   r«   r˜   ÚoutputÚchunksÚfuturesÚfutureÚdataZMsliceZNslicerO   )r  r  r  rþ  r  r  r  rK   rP   Útest_medfilt2d_parallelw  s     
z#TestMedFilt.test_medfilt2d_parallelN) rŒ   r�   rŽ   rø  rû  rù  rQ   r4  r5  r6  re   ÚubyteÚbyteÚushortÚshortÚuintÚintÚ	ulonglongrÆ   r  Ú
longdoublerÿ  Zbool_ZcfloatÚcdoubleÚclongdoublerË   r   r  r  r  r!  rO   rO   rO   rP   ræ  "  sX   ÷÷     þ
 ÿ
ræ  c                   @   s   e Zd Zdd„ ZdS )Ú
TestWienerc                 C   s’   t ddddgddddgddddgddddggd	ƒ}t d
dddgddddgddddgddddggƒ}tt |¡|dd� ttj|dd�|dd� d S )Nr?   r@   r>   r=   rB   rA   rî   rn   ry   g‘ÔSXO@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   rN  ©Úpadtyper0  rC   )r?  Úcval)rB   rA   r}   ©Úaxisr<  )r:  )re   r   r   Z
get_windowrˆ   r‰   ÚresampleÚresample_polyrU  r   rB  )rK   ÚsigÚnumÚwinZsig2rO   rO   rP   rQ   Ä  s    
 ÿzTestResample.test_basicr<  )NÚhammingr  )rÞ   rê  rF  )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      @r;  r~   rA   rA  ç•Ö&è.>r¨  )	re   ÚlinspaceÚcosr   r   rC  Úrealr   Úsin)rK   r  rF  r<  r\   r]   Z	y_complexrO   rO   rP   Ú	test_rfftÚ  s    ÿ.ýzTestResample.test_rfftc                 C   sD   t  d¡d }t|ƒ}d}ttj||dd�tj||dd�dd� d S )Nr7  r~   Úfreq)ÚdomainÚtimerI  r¨  )re   r   r   r   r   rC  )rK   ZtsigZfsigrF  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   rC  r   )rK   rS  rT  r«   r\   r]   rO   rO   rP   Útest_dcö  s    zTestResample.test_dcr?  c                 C   sF   t  d¡}t j d¡ d¡}| ¡ }tj|dd||d� t||ƒ d S )Nr=   r   rB   r?   rA   ©r<  r?  )	re   rE  rÒ   r¶  rÕ   Úcopyr   rD  r   )rK   r?  Zimpulser<  Zwindow_origrO   rO   rP   Útest_mutable_windowþ  s
    
z TestResample.test_mutable_windowc                 C   sN   t jdt jd�}t jdddgt jd�}tj|dd||d�}|jt jksJt‚d S )NrC   rå   rA   rB   rV  )re   r   rÆ   r   r   rD  r«   rH  )rK   r?  r\   rô   r]   rO   rO   rP   Útest_output_float32  s    z TestResample.test_output_float32c                 C   s4   t jd|d�}tj|dd|d�}|j|jks0t‚d S )NrC   rå   rA   rB   r>  )re   r   r   rD  r«   rH  )rK   r?  r«   r\   r]   rO   rO   rP   Útest_output_match_dtype  s    z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc               	   C   s   d}ddddddddd	g	}t  |¡t|ƒ }t  d
¡d d …t jf }t  dt j | | ¡t|ƒ }|D �]j}	t  |	¡t|	ƒ }
t  dt j | |
 ¡t|	ƒ }|dk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}   ©rB  râ  rC   rA   )r8  r  r;  rV  r?  rB  ç      à?ç        )r2  r3  ç333333Ó?r¨  rÌ   r  g®Gáz®ï?)r	  r   r>  r–   r~   r>   y      à?        çê-�™—q=)re   r   r-  r   ÚnewaxisrM  Úpir6   r   rC  r   Úmaxr¯  rD  rÂ  rù   r   r   rB  Zcorrcoefr   rÒ   r¶  ZcumsumrÕ   Zinterp) rK   rd   Úextr?  ÚrateÚrates_tor©   Úfreqsr\   Úrate_toÚt_toZy_tosÚ	y_resampsrõ   ÚupÚdownZmax_rateZf_cZhalf_lenr<  ZpolyargsZy_toZy_resamprO  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â  rH  r;  Úconstantr>  rA   çH¯¼šò×z>©rÊ   rÉ   )re   rÒ   r¶  r'  rÆ   rÅ   r-  r÷   rÕ   r×   Ú
complex128r   r¯  r$   r   rD  r   )rK   Zrandom_stateZ	try_typesr¼   Zdown_factorsr«   r\   ro  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}   rr  rS   )rn  ro  r<  )rg   re   rÒ   r   r   rD  r   )rK   ro  rS  Znweightsr\   ÚweightsZy_gZy_srO   rO   rP   Útest_correlate1d…  s       ÿzTestResample.test_correlate1dN)rŒ   r�   rŽ   rQ   r4  r5  r6  rN  rR  rU  Úpadtype_optionsrX  rY  re   rÆ   r  rZ  rµ  r   rp  rw  ry  rO   rO   rO   rP   r5  Ã  s@   


  ÿÿÿþ	
Ir5  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\   r|  ÚcjrÂ   Úy2rO   rO   rP   rQ   “  s    
zTestCSpline1DEval.test_basicc                 C   st   t  d¡}t j|jt jd�}d}d| }t  dt j | | ¡}t |¡}t  	dg¡}t 
||¡}t|j|jƒ d S )NrB   rå   r^  râ  r[   r`  )re   r   rE  rB  rÅ   Úexpre  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   r{  ‘  s   r{  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   rJ  Úprodrf   Úconvert_dtype)rK   rB  r\   rO   rO   rP   Úgenerate¹  s    $z_TestLinearFilter.generatec                 C   s‚   | j t  d¡krlt |¡}t |j| j ¡}t ||gddgdgdgg¡}|D ]\}}|  |d ¡|d< qL|S tj|| j dd	�S d S )
NÚOZrefs_okZzerosize_okÚreadonlyZ	writeonlyrO   .F)rW  )r«   re   ÚasarrayÚemptyrB  ZnditerÚtyper   )rK   Zarrr™   Úiterr\   r]   rO   rO   rP   r‰  ½  s    

ÿz_TestLinearFilter.convert_dtypec                 C   sR   |   d¡}|  ddg¡}|  ddg¡}|  dddd	d
dg¡}tt|||ƒ|ƒ d S ©N©r@   rA   r}   r`  ç      à¿r   rB   r>   r@   r{   r^  ©rŠ  r‰  r   r"   ©rK   r\   rM   rL   Úy_rrO   rO   rP   Útest_rank_1_IIRÉ  s
    
z!_TestLinearFilter.test_rank_1_IIRc                 C   sP   |   d¡}|  ddg¡}|  dg¡}|  ddddddg¡}tt|||ƒ|ƒ d S )Nr’  rA   r   r=   r?   rn   rO  r”  r•  rO   rO   rP   Útest_rank_1_FIRÐ  s
    
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s†   |   d¡}|  dddg¡}|  ddg¡}|  ddg¡}|  ddd	d
ddg¡}|  d
dg¡}t||||d�\}}t||ƒ t||ƒ d S )Nr’  rA   r   r}   r`  r“  rB   r?   rî   é   rp   r"  éöÿÿÿ©Úzi©rŠ  r‰  r"   r   ©	rK   r\   rM   rL   rœ  r–  Úzf_rr]   ÚzfrO   rO   rP   Útest_rank_1_IIR_init_cond×  s    

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   s„   |   d¡}|  dddg¡}|  dg¡}|  ddg¡}|  ddddddg¡}|  ddg¡}t||||d	�\}}t||ƒ t||ƒ d S )
Nr’  rA   rB   r=   r@   rî   rƒ  r?   r›  r�  rž  rO   rO   rP   Útest_rank_1_FIR_init_condâ  s    

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sn   |   d¡}|  ddg¡}|  ddg¡}|  dddgdddgdddgdddgg¡}t|||dd	�}t||ƒ d S )
N©r>   r=   rA   r}   r`  r   rB   r>   r@   r_  r�  )rK   r\   rM   rL   Úy_r2_a0r]   rO   rO   rP   Útest_rank_2_IIR_axis_0í  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sn   |   d¡}|  ddg¡}|  ddg¡}|  dddgdddgd	d
d	gdddgg¡}t|||dd�}t||ƒ d S )Nr£  rA   r}   r`  r   rB   r@   r¡  rH   rš  rç  éðÿÿÿr_  r�  )rK   r\   rM   rL   Úy_r2_a1r]   rO   rO   rP   Útest_rank_2_IIR_axis_1ö  s    
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s®   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  dddgdddgdd	dgd
dd
gg¡}|  ddddg¡d d …tjf }t|||d|d�\}}t||ƒ t||ƒ d S )Nr£  rA   r}   r`  )r>   rA   rn   éûÿÿÿr™  éõÿÿÿrê  iïÿÿÿiãÿÿÿi×ÿÿÿ©rB  rœ  )rŠ  r‰  re   r%  rd  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\   rB  r]   r–  rO   r²  rP   Útest_rank_3_IIR  s    
z!_TestLinearFilter.test_rank_3_IIRc                    sÌ   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]–}t|jƒ}d||< |  t |¡¡}|  dg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q0d S )Nr®  rA   r}   r`  c                    s   t ˆˆ | ˆd�d S ©Nr›  r   r¯  r°  ©rL   rM   Úzi1rO   rP   r³  .  r´  z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>c                    s   t ˆˆ | ˆd�d S ©Nr›  rA   r¯  r°  r»  rO   rP   r³  /  r´  ©rŠ  r‰  rg   r¶  rµ  rB  re   r%  r"   r·  r   ©rK   r\   rB  Zzi_shaperœ  r]   r   Zlf0Zlf1r–  rŸ  rO   r»  rP   Útest_rank_3_IIR_init_cond#  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sj   |   d¡}|  dddg¡‰|  dg¡‰ t|jƒD ]4}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ q0d S )Nr®  rA   r   r}   c                    s   t ˆˆ | ƒS rÇ  r¯  r°  r²  rO   rP   r³  <  r´  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>rµ  r¸  rO   r²  rP   Útest_rank_3_FIR5  s    
z!_TestLinearFilter.test_rank_3_FIRc                    sÎ   |   d¡}|  dddg¡‰|  dg¡‰ t|jƒD ]˜}t|jƒ}d||< |  t |¡¡}|  ddg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ q0d S )	Nr®  rA   r   r}   rB   c                    s   t ˆˆ | ˆd�d S rº  r¯  r°  r»  rO   rP   r³  J  r´  z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>c                    s   t ˆˆ | ˆd�d S r½  r¯  r°  r»  rO   rP   r³  K  r´  r¾  r¿  rO   r»  rP   Útest_rank_3_FIR_init_cond?  s    


z+_TestLinearFilter.test_rank_3_FIR_init_condc              
   C   sÆ   |   d¡}tjdddd�\}}|  |¡}|  |¡}|jd d }|  t dd	|f¡¡}|  t dd|f¡¡}t||||d
�\}}t||||d
�\}	}
t|	|ƒ t||
ƒ t	t
t|||dt |¡ƒ d S )N)r>   r?   rÞ   r{   r«  Úba©r  r   rA   r>   r?   r›  r}   )rŠ  r   r%   r‰  rB  re   r%  r"   r   rˆ   r‰   )rK   r\   rM   rL   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrO   rO   rP   Útest_zi_pseudobroadcastQ  s    




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sZ   |   d¡}|  dddg¡}|  dg¡}|  ddddddg¡}t||d |ƒ}t||ƒ d S )Nr@   rA   r   r}   rB   r�  )rK   r\   rM   rL   r–  r]   rO   rO   rP   Útest_scalar_af  s    
z_TestLinearFilter.test_scalar_ac                 C   s8  |   t dd¡¡}|   t dd¡¡}|   t dddg¡¡}t dd¡}|dd d …d d …f  d9  < |dd d …d d …f  d9  < |   |¡}|   t d	d¡¡}t dd¡}dggdggdggg|d d …d d …d d
…f< |   |¡}t|||d|ƒ\}}t||ƒ t||ƒ t||d |d|ƒ\}	}
t|	|ƒ t|
|ƒ d S )N)r=   rB   r?   Úlr?   rA   r   )r=   rA   r>   rB   r=   )r=   rB   r>   r>   r}   )r‰  re   rE  r%  r   r"   r   )rK   r\   rM   rL   rœ  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrO   rO   rP   Útest_zi_some_singleton_dimsp  s"    
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |   |¡}|   |¡}|   |¡}|   |¡}ttt|||||ƒ d S rÇ  )r‰  rˆ   r‰   r"   )rK   rM   rL   r\   rB  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‰  rW  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   rJ  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>   ra  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   rJ  rf   r×   r   rê  rO   rO   rP   rô  ¯  s>    ÿÿûûûòìzTestCorrelateReal._setup_rank3c                 C   s    |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ t||dƒ}t||dd…dd…dd…f d d d…d d d…d d d…f ƒ t|j|ƒ d S )Nr€   rA   rB   r>   r=   r?   r}   ©rô  r   r   r	   r«   r÷  rO   rO   rP   Útest_rank3_validÍ  s     <z"TestCorrelateReal.test_rank3_validc                 C   sL   |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ d S )NrR   r   r}   rA   r^  rü  r÷  rO   rO   rP   Útest_rank3_sameØ  s     z!TestCorrelateReal.test_rank3_samec                 C   s4   |   |¡\}}}t||ƒ}t||ƒ t|j|ƒ d S rÇ  rü  r÷  rO   rO   rP   Útest_rank3_allÞ  s    

z TestCorrelateReal.test_rank3_allN)rŒ   r�   rŽ   rë  rñ  ró  rõ  rø  rù  rú  rô  rý  rþ  rÿ  rO   rO   rO   rP   ré  k  s   ré  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestCorrelatec                 C   s\   t  dd¡ d¡}t  dd¡ d¡}tttf||fžddiŽ tttf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   rŠ   rO   rO   rP   r¥   è  s    z!TestCorrelate.test_invalid_shapesc                 C   sz   dddg}dddg}t tt||dd� t tt||dd	d
� t tt||ddd
� t tt||ddd
� t tt||ddd
� d S rƒ   ©rˆ   r‰   r   rŠ   rO   rO   rP   r‹   ô  s    

z!TestCorrelate.test_invalid_paramsc                 C   sx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S rè   r  ré   rO   rO   rP   rê   ý  s    z"TestCorrelate.test_mismatched_dimsc                 C   s’   dddg}ddg}t t||dd�ddd	gƒ dddg}ddd
g}t t||dd�ddd	gƒ t t||dd�d
ddd	dgƒ t t||dd�dgƒ d S )NrA   rB   r=   r>   r?   rR   rS   é   rG   r@   rp   rF   r   rH   r€   )r   r   rŠ   rO   rO   rP   Útest_numpy_fastpath  s    


z!TestCorrelate.test_numpy_fastpathN)rŒ   r�   rŽ   r¥   r‹   rê   r  rO   rO   rO   rP   r   å  s   		r   rT   r€   rR   r   ÚbehindTFÚ
input_sizer¦   r)  r@  rA  r§  i'  c                 C   sœ   t j d¡}| |¡}t|d ƒ}|rBt  | |¡|g¡}| }n||d … }|}t||| d�}t|j|j| d�}	t  	|¡}
t
|	|
 |ƒ t
|	j|jƒ d S )Nr   rC   rS   )re   rÒ   r¶  r¬  r'  Úconcatenater   r   r¼   Zargmaxr	   rB  )rT   r  r  r²  Zin1ÚoffsetZin2r˜   ZcorrelationZlagsZ	lag_indexrO   rO   rP   Útest_correlation_lags  s    

r  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestCorrelateComplexc                 C   s(   |t jkrt j}tdt  |¡j d ƒS )NrB   r=   )re   r+  r*  r'  rí  Ú	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   rL  Úimag)rK   rè  rT   rL   rM   r–  rO   rO   rP   rë  <  s    ÿÿÿz!TestCorrelateComplex._setup_rank1c                 C   s|   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ t||dƒ}t||d d d…  ¡ |  |¡d� t|j|ƒ d S )Nr€   r-  r}   )rë  r   r   r.  r	   r«   Úconjr÷  rO   rO   rP   rø  I  s    "z%TestCorrelateComplex.test_rank1_validc                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )NrR   r-  ©rë  r   r   r.  r	   r«   r÷  rO   rO   rP   rù  T  s    z$TestCorrelateComplex.test_rank1_samec                 C   sB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )Nr   r-  r  r÷  rO   rO   rP   rú  Z  s    z$TestCorrelateComplex.test_rank1_fullc                 C   sN   t jdddg|d�}t jddddg|d�}t||ƒ}t|dd	d
dddgƒ d S )Nr~   rX   rW  rå   ù      ð?      @ù       @      @ù      @      @ù      @      @ù      $@       Àù      <@      Àù      6@      Ày      0@      Ày       @      À)re   r   r   r	   ©rK   rè  ry   Úkr]   rO   rO   rP   Útest_swap_full`  s    
z#TestCorrelateComplex.test_swap_fullc                 C   s8   dddg}ddddg}t ||dd	�}t|d
ddgƒ d S )Nr~   rX   rW  r  r  r  r  rR   rS   r  r  r  )r   r	   r  rO   rO   rP   Útest_swap_samef  s    
z#TestCorrelateComplex.test_swap_samec                 C   sä   t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt|j|jƒ t|j|jƒ  7 }t||dƒ}t|||  |¡d d� t	|j
|ƒ d S )	NrC   r{   r@   r|   r>   r   rA   r-  )re   rÒ   rÕ   r×   r   rL  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   rL  r  r   r.  r	   r«   r÷  rO   rO   rP   Ú
test_rank0z  s$    ÿÿÿ
zTestCorrelateComplex.test_rank0N)rŒ   r�   rŽ   r.  rë  rø  rù  rú  r  r  r  r  rO   rO   rO   rP   r	  .  s   	r	  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCorrelate2dc              	   C   sÌ   t  d¡}t  dddg¡}dD ]¨}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ |dkrtt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )Nr?   r9  r:  r=   r;  rS   r€   )re   r   r   r
   r   r   r<  r   r=  rO   rO   rP   Ú test_consistency_correlate_funcs�  s(    
ÿÿþÿÿþz0TestCorrelate2d.test_consistency_correlate_funcsc                 C   s`   t  dd¡ d¡}t  dd¡ d¡}tttjf||fžddiŽ tttjf||fžddiŽ d S r¡   )re   r   rf   rˆ   r‰   r   r   rŠ   rO   rO   rP   r¥   £  s    z#TestCorrelate2d.test_invalid_shapesc                 C   sR   t t dggdgg¡dƒ t t dggdgg¡dƒ t t dggdgg¡dƒ d S )NrA   r[   y       €       Àr  r@   r>   y              (@)r	   r   r   ré   rO   rO   rP   Útest_complex_input¯  s    z"TestCorrelate2d.test_complex_inputN)rŒ   r�   rŽ   r  r¥   r  rO   rO   rO   rP   r  Ž  s   r  c                   @   s:   e Zd Zdd„ Zdd„ Zej dej	ej
g¡dd„ ƒZdS )	ÚTestLFilterZIc                 C   sF   t  dddg¡}t  dddg¡}t  ddg¡}t||ƒ}t||ƒ d S )Nrâ  r  r`  ra  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   rc  rœ  )re   r   r#   r   )rK   rM   rL   r¼  Zzi2rO   rO   rP   Útest_scale_invariance¾  s
    
z#TestLFilterZI.test_scale_invariancer«   c                 C   s<   t jd|d�}t jdg|d�}tt  t ||¡¡j|ƒ d S )Nr{   rå   rA   )re   rE  r   r	   rL  r   r#   r«   )rK   r«   rM   rL   rO   rO   rP   rÿ  Ç  s    zTestLFilterZI.test_typesN)rŒ   r�   rŽ   rQ   r   r4  r5  r6  re   rÆ   r  rÿ  rO   rO   rO   rP   r  µ  s   	r  c                   @   sJ   e Zd ZdZddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFiltFiltÚtfr}   ÚoddNr2  c              	   C   sR   | j dkr,t|Ž \}}	t||	||||||ƒS | j dkrNt|Ž }
t|
||||ƒS d S )Nr"  Úsos)Úfiltfilt_kindr&   r$   r'   r.   )rK   Úzpkr\   rB  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'  rB  )re   rJ  rM  re  r%   r»  rf  r'  ÚceilÚlogr$   r   Úvstackr	   rB  rƒ  )rK   rh  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   rb  r«  rA   ç      Ð?r)  )r%  r4  Úskipre   r   r7   r   )rK   r\   rM   rL   r]   Úz1Úz2rO   rO   rP   Útest_gust_simple	  s    

.ÿ.*ÿzTestFiltFilt.test_gust_simplec                 C   sT   | j dkrt d¡ t d¡}d}d}t|||dd�}|| d | }t||ƒ d S )	Nr"  r6  rH   r   r  Úgustrc   rB   )r%  r4  r8  re   r   r$   r   )rK   r\   rM   rL   r]   r˜   rO   rO   rP   Útest_gust_scalars 	  s    


zTestFiltFilt.test_gust_scalars)r}   r#  Nr2  N)rŒ   r�   rŽ   r%  r$   rQ   r1  r3  r5  r;  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Ä  rc  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%  rB  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   )rf  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›  rc  r§  TF)rÚ   ZxtolZftolZmaxfunÚmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr}   r›  )	rf  r}  r#   re   r  r0  r   r¹  r"   )rM   rL   r\   rI  rD  rœ  rC  r'  ÚoptZfoptZniterZfuncallsZwarnflagrE  rF  rG  r]   rO   rO   rP   Úfiltfilt_gust_opt=	  s,    	
0   ýÿ(rL  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<  )rB  rd   r(  )rB  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Î   rI  rÈ   )re   rÒ   rÓ   rÕ   r$   r7   r¥  rB  Z
empty_likerf  r}  rŽ  r   rL  r   )rM   rL   rB  rB  r(  r\   r]   ZygZzg1Zzg2ZxxZ	out_shaper=  rD  Zzo1Zzo2ZindxrO   rO   rP   Úcheck_filtfilt_gusti	  s&    
$rM  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%  rW  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.    



rR  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   rf  r»  r'  r+  r,  rÒ   rÓ   r&   rM  rg   )r^   Úpr  r/  r.  Zapprox_impulse_lenrM   rL   r(  Z
signal_lenrB  rB  ÚlengthrO   rO   rP   Útest_filtfilt_gust¨	  s    
rW  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   rZ  Ú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`  rb  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)rB  r_  )rë  rq   rA   )rq   rë  )re   rE  r   rZ  r	   rB  )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 filterrd  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 )Nrg  rd  Trh  ri  rk  rO   rO   rP   Útest_zero_phase_FIRä	  s    z TestDecimate.test_zero_phase_FIRc                 C   s   | j ddd� d S )Nr\  Frh  ©rj  ré   rO   rO   rP   Útest_phaseshift_IIRé	  s    z TestDecimate.test_phaseshift_IIRc                 C   s   | j ddd� d S )Nr\  Trh  rn  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 )NrT  rë  rÞ   rq   rü   r¦   rA   çš™™™™™é?rB   r[   çš™™™™™¹?rd  râ  rH  r;  r\  r{   gš™™™™™©?F)r^  r_  r}   r_  r`  r   rÌ   rt  )r'  re   r   r-  r   r‚  re  rd  r   ÚwindowsZtukeyr¼   Zdltir¯  Zcheby1ZfreqzrF  Zdenr»  Z	ones_likerZ  rL  rÏ   r  r   Úangle)rK   rd   r_  rh  ri  Zt_totr©   rj  ry   rk  rY  rl  Zd_tosrÙ   ÚsystemÚwcr¨   Zh_respsrm  Z	h_resampsZsubnyqrO   rO   rP   rj  ï	  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   rd  )r^  rS  )re   r   ÚsqrtrM  re  r   ZlinalgZnormr   rZ  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   rZ  re   r%  rÆ   rØ   ÚisnanrH  rã  rO   rO   rP   Útest_long_float32+
  s    zTestDecimate.test_long_float32c                 C   s.   t  tjdtjd�d¡}|jjtjks*t‚d S )Nr¦   rå   rC   )	r   rZ  re   r%  rË   r«   r�  r  rH  rã  rO   rO   rP   Útest_float16_upcast1
  s    z TestDecimate.test_float16_upcastN)rŒ   r�   rŽ   r[  rc  re  rf  rl  rm  ro  rp  rj  rx  rz  r{  rO   rO   rO   rP   rX  Ç	  s   0rX  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–   r9  r   ©r  )re   r   rˆ   r‰   r    r   rã  rO   rO   rP   r[  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   r7  rA   r6  r=   )re   re  r   rM  rK  r-  r    r»  rt  rL  r
   r%  rB  r  )rK   r.  re  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  rB  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
   rB  r   )rK   rL   ZaaZaanZa0hilbrO   rO   rP   Útest_hilbert_axisNh
  s:    ízTestHilbert.test_hilbert_axisNr«   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )Nr{   rå   )re   rE  r	   rL  r   r    r«   rý  rO   rO   rP   Útest_hilbert_types�
  s    zTestHilbert.test_hilbert_typesN)rŒ   r�   rŽ   r[  r�  r‚  r4  r5  r6  re   rÆ   r  rƒ  rO   rO   rO   rP   r|  7
  s
   )%r|  c                   @   s2   e Zd Zdd„ Zej dejej	g¡dd„ ƒZ
dS )ÚTestHilbert2c                 C   s€   t  dgg¡}ttt|ƒ t  d¡ ddd¡}ttt|ƒ t  d¡ dd¡}ttt|dd� ttt|d	d� ttt|d
d� d S )Nr–   rú   rB   r=   r>   ro   r   r}  )rB   r   )rB   )re   r   rˆ   r‰   r!   r   rf   rã  rO   rO   rP   r[  •
  s    zTestHilbert2.test_bad_argsr«   c                 C   s*   t jd|d�}tt  t |¡¡j|ƒ d S )N)rB   rF   rå   )re   rE  r	   rL  r   r!   r«   rý  rO   rO   rP   Útest_hilbert2_types¤
  s    z TestHilbert2.test_hilbert2_typesN)rŒ   r�   rŽ   r[  r4  r5  r6  re   rÆ   r  r…  rO   rO   rO   rP   r„  “
  s   r„  c                   @   s’   e Zd Zed#dd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )$ÚTestPartialFractionExpansionrn   c                 C   s„   t  |¡}t  |¡}t  t|d d …d f | ƒt| d d …d f | ƒ¡}t|ƒ\}}t|| || |d� t| | || |d� d S )Nr-  )re   r�  Úhypotr»  r   r
   )r.  rU  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   rr  Ú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Ó¿rq  r7  ç      Ð¿r©  y              ø?y       €      ø¿ù       €      ð¿r|   r™  rª  éE   rG   y      ð¿      @y      ð¿      Àù      ð?      ð¿rX   )r4   r
   r	   r¼   rŠ  ©rK   r.  rU  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Úr2Úp2Zk2Zr3Zp3Zk3rO   rO   rP   Útest_residue_leading_zeros  s     ""*







z7TestPartialFractionExpansion.test_residue_leading_zerosc              	   C   sž   t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W 5 Q R X d S )	Nr   rA   r@   r{   r^  r¡  úDenominator `a` is zero.r  )r4   r
   r	   r¼   r4  r   r‰   r—  rO   rO   rP   Útest_resiude_degenerate$  s    z4TestPartialFractionExpansion.test_resiude_degeneratec              	   C   s
  t ddddgddddgƒ\}}}|  ||ddd	gd
ddg¡ t|dgƒ t dddgdddgƒ\}}}| j||ddgddgdd� t|dgdd� t ddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t dddgddddgƒ\}}}|  ||dddgdddg¡ t|jdƒ t ddddgdddgƒ\}}}t|ddgƒ t|ddgƒ t|ddgƒ t dgddddgƒ\}}}|  ||dd d!gdd"d"g¡ t|jdƒ t ddgt dd#gdd$g¡ƒ\}}}t|d%d&gƒ t|d'dgƒ t|jdƒ t dddgddgƒ\}}}t|dgƒ t|dgƒ t|ddgƒ t dddgƒ\}}}t|dgƒ t|d
gƒ t|jdƒ t dddd$gƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddd(d)gƒ\}}}t|ddgƒ t|d$dgƒ t|jdƒ t dddgdddgƒ\}}}t|dd*gƒ t|ddgƒ t|dgƒ t ddgdddgƒ\}}}t|dd+gƒ t|ddgƒ t|jdƒ t ddddgdddgƒ\}}}t|d,d-gƒ t|ddgƒ t|d.dgƒ t dddgddddddgƒ\}}}| j||d/d0d!d1d2gd3d4d5d6d7gdd� t|jdƒ d S )8NrA   r@   rB   y       À      ð¿rb  r”  y       À      @y      @      @y      À      (Àr|   r[   r}   g'Â†§WÊÖ?y	Šcîì¿à-� øÀy	Šcîì¿à-� ø@y      à?*©ÐDØÔ?y      à?*©ÐDØÔ¿r>   r-  g�Å�1w@r©  r=   r   rš  r¡  r^  r`  g      ø¿ç      ø?rç  g
×£p=
×?g¸…ëQ¸Î?gš™™™™™Ù?gUUUUUUÕ¿r“  r7  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¼   r4  r   r‰   r—  rO   rO   rP   Útest_residuez_degenerate•  s    ÿz5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   sŒ   dddg}dddg}g }dddg}dd	d
dg}dD ]T}t ||||d�\}}t||ƒ t||ƒ t||||d�\}}t||ƒ t||ƒ q2d S )Nrb  çUUUUUUÅ¿gÁ¿r   r^  r©  rA   r=   rn   rC   ©Úavgr0  r�  r2  rf  r3  ©Úrtype©r(   r   r)   )	rK   r.  rU  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ª  r4  r¨  r¬  )
rK   r.  rU  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  r1  rª  )r4  r   r‰   r(   r)   r—  rO   rO   rP   Útest_inverse_bad_rtypeÌ  s    z3TestPartialFractionExpansion.test_inverse_bad_rtypec                 C   s@   dg}dg}dg}t |||ƒ\}}t|dgƒ t|ddgƒ d S )NrA   rB   r   râ  g       À)r)   r   )rK   r.  rU  r  rM   rL   rO   rO   rP   Ú test_invresz_one_coefficient_bugÕ  s    z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc              	   C   sF  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t dddgdddgg ƒ\}}t|dd	d
gƒ t|ddddgƒ t ddgddgdddgƒ\}}t|dddddgƒ t|dddgƒ t ddddddgddddddgg ƒ\}}t|ddddddgƒ t|dd d!d"d#d$d%gƒ t ddgddgddgƒ\}}t|dd&d'd(gƒ t|dddgƒ d S ))NrA   r}   r–  rB   ù      à?      Àr¿   rX   ù      @      Àù      !À      Ð?ù      @      
@ù       À      ø¿ù      à?       @ù      à?      à¿r`  rW  r=   ù      ð¿      ð¿ù      ð?       ÀrC   ù      À      ð¿r>   r|   rˆ  r^  r”   y      @      ð¿y      <À      0@y      D@      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`  rW  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â  rr  r   rB   ©re   r   r*   r	   r¶  r
   re  ©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=   r7  rr  )re   r   r*   r	   r¶  r   r
   re  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 )Nr7  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 )Nr7  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 )
Nrr  çš™™™™™ñ?çÍÌÌÌÌÌ @ç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 )Nrr  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 )Nr7  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 )	Nr7  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   r7  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   r7  r`  rÝ  râ  rC   ra  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   ru  r,   r×   )rM   rL   r«   rO   rO   rP   Úcast_tf2sos­  s    rì  rs  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Ö   rH  r"   r-  r×   r-   Úallr   r,   r4  r   r‰   )r  r\   rM   rL   rî  rí  rÚ   rO   rO   rP   Útest_nonnumeric_dtypesÃ  s     
"
ró  ZfdgFDGOc                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSOSFiltc              
   C   s<  t  ddd¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}t  ddd	dd
dg¡ |¡}t||ƒ}|jj|ksrt‚tt	t||ƒ|ƒ|ƒ t  ddg¡ |¡}t  ddg¡ |¡}t  ddddddg¡ |¡}tt	t||ƒ|ƒ|ƒ dddg}dddg}t  
d
¡}t  ||f¡}d|_t	||ƒ}t|ddddddddgƒ d S )Nr   r?   r@   rA   r}   r`  r“  rB   r>   r{   r^  r=   rn   rO  )rA   r@   )re   rJ  r×   r   rì  r«   ÚcharrH  r   r-   r%  r  rB  r   )rK   rè  r\   rM   rL   r–  r$  r]   rO   rO   rP   Ú
test_rank1ß  s$    




zTestSOSFilt.test_rank1c           	      C   sö   d}t  dt  |¡d t  |¡¡ |¡}| |¡}t  ddg¡ |¡}t  ddg¡ |¡}t jdddgdddgdddgdddgg|d	�}t jdddgdd
dgdddgdddgg|d	�}tt||ƒ|dd�}t||ƒ tt||ƒ|dd�}t||ƒ d S )Nr£  r   rA   r}   r`  rB   r>   r@   rå   r¡  rH   rš  rç  r¦  r_  )	re   rJ  rˆ  rf   r×   r   r-   rì  r   )	rK   rè  rB  r\   rM   rL   r¤  r§  r]   rO   rO   rP   Ú
test_rank2ù  s"    $
&ÿÿÿ
zTestSOSFilt.test_rank2c           	   
   C   s®   d}t  dt  |¡d t  |¡¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}tt||ƒ|ƒ}t|j	d ƒD ]:}t|j	d ƒD ]&}t
|||f t|||||f ƒƒ q€qnd S )Nr®  r   rA   r}   r`  )re   rJ  rˆ  rf   r   r×   r-   rì  rg   rB  r   r"   )	rK   rè  rB  r\   rM   rL   r]   rh   r
  rO   rO   rP   r    s    $zTestSOSFilt.test_rank3c                 C   s>  t  ddd¡\}}t  ddd¡\}}t  ddd¡\}}t t ||¡|¡}t t ||¡|¡}	t tj||f tj||f tj||f f¡}
tj d¡ |¡}t	||	|d d… t 
d¡d�\}}tj|t	||	|dd … |d�d	 f }t|t	||	|ƒƒ t|
|d d… t 
d
¡d�\}}tj|t|
|dd … |d�d	 f }t||ƒ t|
ƒ}t d|¡}t|
||d�\}}t|t d¡ƒ t||ƒ d|j |_ttt|
||d� | ¡ }|jd	 dd|jd f|_ttt|
||d d …d d …d d …d	ddgf d� t|
||d�\}}t|d t d¡ƒ t|d d …d	d	d d …f |ƒ d S )NrB   r7  ÚlowrÝ  rß   rÞ   r@   r›  r   r¤   r{   r  rA   r}   r  )r   r%   re   r   r   Zr_rÒ   r�  r×   r"   rE  rï  r-   r/   r%  rB  rˆ   r‰   rW  )rK   rè  Úb1r~  Úb2r  Zb3r€  rM   rL   r$  r\   Zy_truerœ  rA  r]   r   Zzi_ndrO   rO   rP   Útest_initial_conditions  s8    ."& $


 ÿz#TestSOSFilt.test_initial_conditionsc                 C   s¼  t j d¡jdddd�}| |¡}tjdddd	�}t|Ž }|jd }d
}t	|jƒ}d||< |g| }t  
|¡}t||||d�\}	}
t||d d …d d…d d …f ||d�\}}t||d d …dd …d d …f ||d�\}}t j||f|d�}t||	ddd� t||
ddd� t|ƒ}|d
dd
g|_||d d …dd
…d d …f  }t||||d�d }t|Ž \}}t||ƒ}d
|jd
g|_||d d …dd
…d d …f  }t|||||d�d }t||ddd� d S )NéŸ   r   r?   )rB   rë  r=   r»   r@   r?  r&  rÄ  rA   rB   r«  r_  r›  ç‚vIhÂ%<=rÈ   )re   rÒ   r¶  r·  r×   r   r%   r'   rB  rµ  rE  r-   r  rï  r/   r&   r#   r¼   r"   )rK   rè  r\   r&  r$  Z	nsectionsrB  ZshpZz0rv  r   r2  r9  r�  r:  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œ  rB  râ  r=   zInvalid zi shape)re   rŽ  rE  r4  r   r‰   r-   )rK   rè  r\   r$  rœ  rO   rO   rP   Útest_bad_zi_shapen  s    

zTestSOSFilt.test_bad_zi_shapec                 C   s¼   t jdddd�}t|ƒ}t|t d|¡|d�\}}t||dd� t |d d …d d	…f jd
d�|d d …d	d …f jd
d� ¡}t||dd� t|t d|¡| 	¡ d�\}}t||dd� d S )Nr@   r«  r$  rÄ  rü   r›  rý  rœ  r=   r}   r_  )
r   r%   r/   r-   re   r%  rï  rˆ  rÏ   r¸  )rK   rè  r$  rœ  r]   r   Ússr¨   rO   rO   rP   Útest_sosfilt_ziz  s    >zTestSOSFilt.test_sosfilt_ziN)
rŒ   r�   rŽ   rö  r÷  r  rû  rþ  rÿ  r  rO   rO   rO   rP   rô  Û  s   &.rô  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDeconvolvec              	   C   sP   ddddddddg}ddg}dddddddddg	}t  ||¡\}}t||ƒ d S )Nr   rA   rB   r=   )r   Ú
deconvolver   )rK   ÚoriginalÚimpulse_responseÚrecordedZ	recoveredÚ	remainderrO   rO   rP   rQ   Œ  s
    zTestDeconvolve.test_basicc              	   C   sF   ddgddgg}ddg}t jtdd�� t ||¡\}}W 5 Q R X d S )Nr   zsignal must be 1-D.r  ©r4  r   r‰   r   r  ©rK   r  r  Zquotientr  rO   rO   rP   Útest_n_dimensional_signal”  s    z(TestDeconvolve.test_n_dimensional_signalc              	   C   sF   ddg}ddgddgg}t jtdd�� t ||¡\}}W 5 Q R X d S )Nr   zdivisor must be 1-D.r  r  r	  rO   rO   rP   Útest_n_dimensional_divisorš  s    z)TestDeconvolve.test_n_dimensional_divisorN)rŒ   r�   rŽ   rQ   r
  r  rO   rO   rO   rP   r  Š  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDetrendc                 C   s.   t tdddgƒƒ}tdddgƒ}t||ƒ d S r†  )r2   r   r   )rK   Z	detrendedZdetrended_exactrO   rO   rP   rQ   £  s    zTestDetrend.test_basicc                 C   s8   t dddddgƒ}t|dd�}t|dd�}t||ƒ d S )	NrA   ç333333ó?r£  gš™™™™™ù?g333333@F)Zoverwrite_dataT)r   r2   r   )rK   r\   Z
copy_arrayZinplacerO   rO   rP   Ú	test_copy¨  s    zTestDetrend.test_copyN)rŒ   r�   rŽ   rQ   r  rO   rO   rO   rP   r  ¡  s   r  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestUniqueRootsc                 C   s@   dddddg}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )Nr  r“  rb  r  r^  rë  r-  ©r3   r
   r	   re   r%  r}  ©rK   rU  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ÍÌÌÌÌÌð?rr  r�  ©Útolr«  rë  r-  rB   rA   rf  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½  r8  rë  r-  r  r  rO   rO   rP   Útest_complex_no_repeatÅ  s    z&TestUniqueRoots.test_complex_no_repeatc                 C   sÄ   dddddddg}t |dd	d
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ t |ddd
�\}}t|ddddgdd� t|ddddgƒ d S )Nr  y      ð¿š™™™™™©?yffffffî¿333333Ã?yÍÌÌÌÌÌì¿333333Ã?ra  r  yÍÌÌÌÌÌÜ?š™™™™™á?rr  r�  r  rë  r-  rB   rA   rf  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   rU  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•Ö&è.>      ð?rr  )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)rs  r   )�r	  Úconcurrent.futuresr   r   r.  r   Ú	itertoolsr   Úmathr   r4  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ë   r7  rL  rº  rÁ  rÄ  rÅ  rÆ  rÝ  ræ  r,  rz  r5  r{  r…  r‡  rØ  rÚ  rÛ  rÜ  rÞ  rà  râ  rä  rå  rç  r5  r6  r"  r#  r$  r%  r&  r'  r(  rÆ   r  r)  ré  r   r  Zcsingler*  r+  r	  r  r  r!  r>  rL  rM  rR  rW  rX  r|  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 

 /