o
    Ö­j|W ã                   @   s°  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlZd d	lmZ d d
lmZ d dlm Z m!Z! d dlm"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZN d dlOmPZPmQZQmRZR G dd„ dƒZSG dd„ deSƒZTG dd„ dƒZUG dd„ deUƒZVG dd„ dƒZWdd„ ZXd d!„ ZYd"d#„ ZZd$d%„ Z[G d&d'„ d'ƒZ\G d(d)„ d)ƒZ]G d*d+„ d+ƒZ^G d,d-„ d-ƒZ_g d.¢Z`e`eJ7 Z`G d/d0„ d0ƒZaG d1d2„ d2ƒZbG d3d4„ d4ƒZcG d5d6„ d6ƒZdG d7d8„ d8edƒZeG d9d:„ d:edƒZfe
jg hd;¡G d<d=„ d=edƒƒZiG d>d?„ d?edƒZjG d@dA„ dAedƒZke
jg hd;¡G dBdC„ dCedƒƒZle
jg hd;¡G dDdE„ dEedƒƒZme
jg hd;¡G dFdG„ dGedƒƒZne
jg hd;¡dHdI„ ƒZoe
jg hd;¡ZpdJdK„ Zqe
jg rdLejsejtejuejveReQejwejwejxejye
jzej{epdM�e
jzeepdM�g¡G dNdO„ dOƒƒZ|G dPdQ„ dQƒZ}e
jg rdRg dS¢¡e
jg rdTdUdVg¡e
jg rdWg dX¢¡dYdZ„ ƒƒƒZ~d[d\„ Ze
jg rdLej€ej�e
jzej‚epdM�g¡G d]d^„ d^ƒƒZƒG d_d`„ d`ƒZ„G dadb„ dbƒZ…G dcdd„ ddƒZ†G dedf„ dfe†ƒZ‡dgdh„ Zˆd‘didj„Z‰e
jg Šdk¡dldm„ ƒZ‹e
jgjŒdndo„ ƒZ�e
jg hd;¡dpdq„ ƒZŽe
jg Šdk¡drds„ ƒZ�G dtdu„ duƒZ�G dvdw„ dwƒZ‘G dxdy„ dyƒZ’G dzd{„ d{ƒZ“G d|d}„ d}ƒZ”G d~d„ dƒZ•d’d�d‚„Z–e
jg hd;¡e
jg rdƒe:e/f¡d„d…„ ƒƒZ—e
jg rdLd†¡G d‡dˆ„ dˆƒƒZ˜G d‰dŠ„ dŠƒZ™G d‹dŒ„ dŒƒZšG d�dŽ„ dŽƒZ›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ÚenvelopeÚhilbertÚhilbert2ÚlfilterÚ
lfilter_ziÚfiltfiltÚbutterÚzpk2tfÚzpk2sosÚinvresÚinvreszÚvectorstrengthÚlfilticÚtf2sosÚsosfiltÚsosfiltfiltÚ
sosfilt_ziÚtf2zpkÚBadCoefficientsÚdetrendÚunique_rootsÚresidueÚresiduez)Úhann)Ú_filtfilt_gustÚ_compute_factorsÚ_group_poles)Ú_upfirdn_modes)Ú
_testutils©Úxp_assert_close)ÚComplexWarningÚnp_longÚnp_ulongc                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú_TestConvolvec                 C   s0   g d¢}g d¢}t ||ƒ}t|tg d¢ƒƒ d S )N)é   é   é   é   rE   rD   ©é   é   rC   )rC   é
   é   é   é    rM   é   é   ©r   r   r   ©ÚselfÚaÚbÚc© rV   ú`/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/signal/tests/test_signaltools.pyÚ
test_basic(   s   
z_TestConvolve.test_basicc                 C   ó4   g d¢}g d¢}t ||dd�}t|tg d¢ƒƒ d S )N©rC   rD   rE   ©rH   rI   rC   rD   Úsame©Úmode)rJ   rK   é"   rP   rQ   rV   rV   rW   Ú	test_same.   ó   z_TestConvolve.test_samec                 C   rY   )NrZ   rG   r\   r]   )rJ   rK   rK   rP   rQ   rV   rV   rW   Útest_same_eq4   ra   z_TestConvolve.test_same_eqc                 C   s8   t g d¢ƒ}t ddgƒ}t||ƒ}t|t g d¢ƒƒ d S )N)ù      ð?      ð?ù       @      ð?ù      @      ð?rc   rd   )ù               @y       @      @y      @       @y      @      @)r   r   r   )rR   ÚxÚyÚzrV   rV   rW   Útest_complex:   s   
z_TestConvolve.test_complexc                 C   s$   d}d}t ||ƒ}t||| ƒ d S )Ni	  i×  )r   r	   rQ   rV   rV   rW   Útest_zero_rank@   s   
z_TestConvolve.test_zero_rankc                 C   st   t  d¡ ddd¡}t  d¡}tdƒD ]$}dgd }d||< t|| |¡dd�}t|| |¡dd�}t||ƒ qd S )Né   rC   rH   Údirect©Úmethodr   )Únpr   ÚreshapeÚranger   r   )rR   rS   rT   ÚiÚb_shaperg   rh   rV   rV   rW   Útest_broadcastableF   s   

ûz _TestConvolve.test_broadcastablec                 C   ó0   t dgƒ}t dgƒ}t||ƒ}t||| ƒ d S ©Nig  iP  )r   r   r	   rQ   rV   rV   rW   Útest_single_elementP   ó   


z!_TestConvolve.test_single_elementc                 C   sR   g d¢g d¢g}g d¢g d¢g}t ||ƒ}tg d¢g d¢g d¢gƒ}t||ƒ d S ©NrG   rZ   ©rI   rC   rD   ©rD   rE   rF   )rI   é   é   é   rO   )rJ   é   é>   é:   é&   )rO   é   r‚   é1   r€   ©r   r   r   ©rR   rS   rT   rU   ÚdrV   rV   rW   Útest_2d_arraysV   s   
þz_TestConvolve.test_2d_arraysc              	   C   s€  t dƒ ddd¡}dt dƒ ddd¡ }|t dƒd d d…  ddd¡7 }tg d¢g d¢g d	¢g d
¢gg d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢ggƒ}tt||dƒ|ƒ tt||dƒ|ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ tt||dƒ|dd…dd…dd…f ƒ d S )Né   rI   ù              ð?rl   rC   éÿÿÿÿ)ù                y      :@        y      9@      ð?y      8@       @)y      J@        y     àb@      @y      b@      &@y     @W@      &@)y      G@      @y      `@      7@y     À_@      =@y     @T@      7@)y      D@      (@y     €X@      @@y     @W@     €B@y      K@      8@)y      Z@        y     àn@      *@y      m@      7@y     à`@      5@)y      q@      >@y     Àƒ@      X@y     à‚@      _@y      t@     €U@)y     Àn@     €P@y      �@     €f@y     @€@      j@y      q@     À`@)y     Àa@     €P@y     0s@      d@y     r@     `f@y      c@     ÀZ@)y      Q@      B@y      c@     ÀY@y     `b@     @\@y     @T@     ÀR@)y     Àe@     @a@y     Àw@     Àu@y      v@     €w@y     @g@     Àl@)y     @a@     Àe@y     €r@      {@y     Àp@     À|@y     @a@     `q@)y     €Q@     @a@y      b@     0t@y     À_@     Pu@y     €O@      h@)y      @@      R@y      Q@     Àd@y     €M@     àe@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     €L@     ào@)y      C@     Àk@y     @R@     0@y     €I@     H€@y      5@     0r@)y      (@      b@y      4@     às@y      @     °t@y             Àf@Úfullr\   rH   r   Úvalid)r   rq   r   r   r   )rR   ÚsmallÚbigÚ	out_arrayrV   rV   rW   Útest_input_swapping_   sP    ýýýýñÿÿÿÿÿz!_TestConvolve.test_input_swappingc                 C   óv   g d¢}g d¢}t tt||dd� t tt||ddd� t tt||dd	d� t tt||d
dd� t tt||ddd� d S ©NrZ   rG   Úspamr]   Úeggsr   ©r^   ro   Úhamrm   rŽ   Úbaconr\   ©Úassert_raisesÚ
ValueErrorr   ©rR   rS   rT   rV   rV   rW   Útest_invalid_params„   ó   z!_TestConvolve.test_invalid_paramsN)Ú__name__Ú
__module__Ú__qualname__rX   r`   rb   rj   rk   ru   rx   r‰   r“   rŸ   rV   rV   rV   rW   rB   &   s    
	%rB   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Ze	j
jdd„ ƒZdS )ÚTestConvolvec                 C   sŒ   g d¢}g d¢}g d¢}t ||dƒ}t||ƒ t ||dƒ}t||ƒ g d¢}ddg}ddg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )	N©rH   rI   rC   rF   rE   rC   ©	rI   rC   rD   rE   rC   rD   rI   rI   rH   )éF   éN   éI   éA   r�   )y      ð?      @ù       @      ð¿y      @        ù       @      Àù      ð?        y       @      $À)r   r   ©rR   rS   rT   ÚexpectedÚoutrV   rV   rW   Útest_valid_mode2�   s   


zTestConvolve.test_valid_mode2c                 C   s6   g d¢}g d¢}t ||dƒ}tg d¢ƒ}t||ƒ d S )N)rH   rI   rC   rC   rH   rI   )rH   rD   rC   rD   rE   rF   r}   rD   rC   rI   rH   rH   rC   r\   )é9   é=   é?   r²   é-   é$   r†   r‡   rV   rV   rW   Útest_same_mode¦   s
   zTestConvolve.test_same_modec                 C   óh   t  dd¡ d¡}t  dd¡ d¡}tttg||f¢R i ddi¤Ž tttg||f¢R i ddi¤Ž d S ©	NrH   r}   ©rI   rC   éúÿÿÿr   ©rC   rI   r^   r�   )rp   r   rq   rœ   r�   r   rž   rV   rV   rW   Útest_invalid_shapes­   ó    $z TestConvolve.test_invalid_shapeséd   c           	         s\  h d£‰‡fdd„ˆD ƒ}t j d¡}|jddg|d�| |¡dœ}|d	  |d
< |d< |d d|d   |d< |D ]q\}}‰ |t  |¡j  |¡‰|t  |¡j  |¡‰‡ ‡‡fdd„dD ƒ}t|d j|d jƒ d|v r|d|v r|tt	ˆˆƒdƒ q:t
dd„ ||fD ƒƒr�dddœ}nd||fv r™dddœ}ndddœ}t|d |d fi |¤Ž q:d S )N>   ÚboolÚint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64Úfloat16Úfloat32Úfloat64Ú	complex64Ú
complex128c                    s*   g | ]}ˆ D ]}d D ]}|||f‘q
qqS ))r�   rŽ   r\   rV   )Ú.0Út1Út2r^   )ÚtypesrV   rW   Ú
<listcomp>À   s
    ÿÿz5TestConvolve.test_convolve_method.<locals>.<listcomp>é*   r   rH   ©Úsize)rs   Úfrs   rT   ÚurÖ   ù              à?rU   c              	      s   i | ]}|t ˆˆ|ˆ d �“qS ))ro   r^   )r   )rÎ   Úkey)r^   Úx1Úx2rV   rW   Ú
<dictcomp>Ï   s    ÿz5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rm   r   rm   rÀ   c                 S   s   g | ]}|d v ‘qS )>   rÊ   rÌ   rV   )rÎ   ÚtrV   rV   rW   rÒ   Ú   ó    ç-Cëâ6?g�íµ ÷Æ°>©ÚrtolÚatolrÉ   çü©ñÒMbP?çñhãˆµøä>ç:Œ0âŽyE>)rp   ÚrandomÚRandomStateÚchoiceÚrandnÚdtypeÚkindÚastyper	   r   Úanyr   )	rR   ÚnÚargsÚrngÚarray_typesrÏ   rÐ   ÚresultsÚkwargsrV   )r^   rÑ   rÚ   rÛ   rW   Útest_convolve_method¹   s2   ÿÿ
èz!TestConvolve.test_convolve_methodc                 C   sv   dD ]6}t jd| gt jd�}t||dd�}t||dd�}|dk r8t||ƒ t|dd|  ƒ t|dd|  ƒ qd S )N)	rJ   é   é2   é3   é4   é5   é6   é<   r�   rI   ©rê   r   rn   rm   rö   )rp   r   rÄ   r   r	   )rR   rî   ri   r   rm   rV   rV   rW   Ú test_convolve_method_large_inputå   s   
€öz-TestConvolve.test_convolve_method_large_inputc                 C   óx   t ttdgddd� t ttddgdd� t ttdgddd� t ttddgdd� t ttdgdggƒ t ttdgdƒ d S ©NrH   rI   rm   rn   r   rC   r›   ©rR   rV   rV   rW   Útest_mismatched_dimsô   ó   z!TestConvolve.test_mismatched_dimsc                 C   ó`   t jg d¢td�}t jg d¢td�}tjdd�� t||ƒ W d   ƒ d S 1 s)w   Y  d S ©Nr¥   rü   r¦   údtype=object is not supported©Úmatch)rp   ÚasarrayÚobjectÚpytestÚdeprecated_callr   rž   rV   rV   rW   Útest_dtype_deprecationý   ó
   "ÿz#TestConvolve.test_dtype_deprecationN)r¿   )r¡   r¢   r£   r±   r·   r½   rô   rý   r  r
  ÚmarkÚthread_unsafer  rV   rV   rV   rW   r¤   Ž   s    
,	r¤   c                   @   s¤   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
ej deeg¡ej ddg d¢gfdg d¢gfg¡dd„ ƒƒZdd„ Zdd„ Zdd„ ZdS ) Ú_TestConvolve2dc                 C   sR   g d¢g d¢g}g d¢g d¢g}t g d¢g d¢g d¢gƒ}t||ƒ}t||ƒ d S rz   ©r   r   r   )rR   rS   rT   rˆ   ÚerV   rV   rW   r‰     s   þ
z_TestConvolve2d.test_2d_arraysc                 C   s^   g d¢g d¢g}g d¢g d¢g}t g d¢gƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )N©rI   rC   rD   rE   rF   r}   rŠ   ©rD   rE   rF   r}   rŠ   é	   rJ   rG   rZ   ©r�   éP   éb   ét   é†   r�   r  ©rR   r  rÖ   ÚhÚgrV   rV   rW   Útest_valid_mode  s   
z_TestConvolve2d.test_valid_modec                 C   sl   g d¢g d¢g}t jg d¢g d¢gtd�d }tg d¢gƒ}t||dƒ}t||ƒ t||dƒ}t||ƒ d S )	Nr  r  rG   rZ   rü   r‹   )y      O@      8@y      T@      >@y     €X@      B@y      ]@      E@y     À`@      H@r�   )rp   r   Úcomplexr   r   r   r  rV   rV   rW   Útest_valid_mode_complx  s   
z&_TestConvolve2d.test_valid_mode_complxc                 C   s\   g d¢g d¢g}g d¢g d¢g}d}t ||dd|ƒ}tg d¢g d	¢g d
¢gƒ}t||ƒ d S )NrG   rZ   r{   r|   rH   rŽ   Úfill)é   é   r„   r_   rM   )rL   é(   r�   é@   rø   )rM   é.   éC   r�   é0   ©r   r   r   )rR   rS   rT   ÚfillvalrU   rˆ   rV   rV   rW   Útest_fillvalue)  s   þz_TestConvolve2d.test_fillvaluec              	   C   sÐ   d}t j ¡ �0}| td¡ tt|d�� tdggddggdd� W d   ƒ n1 s+w   Y  W d   ƒ n1 s:w   Y  d}tt|d�� tdggddggddgd� W d   ƒ d S 1 saw   Y  d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesr  rH   rI   r‹   ©Ú	fillvaluez,`fillvalue` must be scalar or an array with )rp   Útestingr   Úfilterr?   rœ   r�   r   )rR   ÚmsgÚsuprV   rV   rW   Útest_fillvalue_errors3  s   ÿ€þ"ÿz%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d� d S )NrH   rI   r,  ©rœ   r�   r   r   rV   rV   rW   Útest_fillvalue_empty>  s   
ÿz$_TestConvolve2d.test_fillvalue_emptyc                 C   sV   g d¢g d¢g}g d¢g d¢g}t ||ddƒ}tg d¢g d¢g d¢gƒ}t||ƒ d S )	NrG   rZ   r{   r|   rŽ   Úwrap)r  r  éJ   r  r  )éD   r7  r�   r7  r7  r)  r‡   rV   rV   rW   Útest_wrap_boundaryC  ó   þz"_TestConvolve2d.test_wrap_boundaryc                 C   sV   g d¢g d¢g}g d¢g d¢g}t ||ddƒ}tg d¢g d¢g d	¢gƒ}t||ƒ d S )
NrG   rZ   r{   r|   rŽ   Úsymm)r_   r€   é,   r�   éB   )rø   r(  r�   r  éT   )éR   r¨   é\   én   ér   r)  r‡   rV   rV   rW   Útest_sym_boundaryL  r9  z!_TestConvolve2d.test_sym_boundaryÚfunczboundary, expectedr:  )g     €B@ç      E@ç      F@g     €F@r5  )ç     €E@rE  rD  ç     €C@c                 C   s8   t  g d¢g¡}t  d¡}|||d|d�}t||ƒ d S )N)ç       @ç      ð¿ç      @ç      @)rH   é   r\   ©r^   Úboundary)rp   r   Úonesr   )rR   rC  rN  r¯   ÚimageÚkernelÚresultrV   rV   rW   Útest_same_with_boundaryU  s   	
z'_TestConvolve2d.test_same_with_boundaryc                 C   sh   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t||j||d	dd�ƒ d S )Nr   rH   r„   rü   rJ   rC   ée   r\   r5  rM  )rŒ   rŒ   )r^   Úorigin)	Úscipy.ndimageÚndimagerp   r   Úfloatrq   r   r   r   )rR   ÚndirS   rT   rU   rV   rV   rW   Útest_boundary_extension_samef  s
   z,_TestConvolve2d.test_boundary_extension_samec                 C   s„   dd l m} tjddtd� dd¡}tjddtd� dd¡}t||dd	d
�}t |dd	¡}t||j	||d	d�d d…d d…f ƒ d S )Nr   rH   rJ   rü   rC   é%   rF   rŽ   r5  rM  )©rC   rC   r\  r]   rŒ   )
rV  rW  rp   r   rX  rq   r   Úpadr   r   )rR   rY  rS   rT   rU   ÚapadrV   rV   rW   Útest_boundary_extension_fullp  s   *z,_TestConvolve2d.test_boundary_extension_fullc                 C   r¸   r¹   )rp   r   rq   rœ   r�   r   rž   rV   rV   rW   r½   {  r¾   z#_TestConvolve2d.test_invalid_shapesN)r¡   r¢   r£   r‰   r  r   r+  r2  r4  r8  rB  r
  r  Úparametrizer   r   rS  rZ  r_  r½   rV   rV   rV   rW   r    s&    	
		ÿÿ
r  c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	ej 
d	¡d
d„ ƒƒZdS )ÚTestConvolve2dc                 C   sN   g d¢g d¢g}g d¢g d¢g}t ||dƒ}tg d¢g d¢gƒ}t||ƒ d S )NrG   rZ   r  r  r\   )rK   rL   r_   )r  r  r  r)  )rR   r  rÖ   r  r  rV   rV   rW   r·   Š  s   ÿzTestConvolve2d.test_same_modec                 C   s°   g d¢g d¢g}g d¢g d¢g}g d¢g}t ||dƒ}t||ƒ t ||dƒ}t||ƒ ddgd	d
gg}g d¢g d¢g}ddgg}t ||dƒ}t||ƒ t ||dƒ}t||ƒ d S )NrG   rZ   r  r  r  r�   rc   r¬   re   ù      @        )r«   ù      @       @rb  )rb  y      @      ð?y      @      Ày      ;@      ð¿y      G@       @)r   r   )rR   r  rÖ   r¯   r°   rV   rV   rW   r±   ’  s   




zTestConvolve2d.test_valid_mode2c              	   C   st   t  d¡}t  g d¢¡}dD ])}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )NrE   ©gš™™™™™	@gffffffö?rC   ©rŽ   r�   r\   r]   )rp   r   r   r
   r   r   Úsqueezer   ©rR   rS   rT   r^   rV   rV   rW   Útest_consistency_convolve_funcs©  s   
ÿÿþýz.TestConvolve2d.test_consistency_convolve_funcsc                 C   s>   t ttddƒ t ttdgdgƒ t ttdgggdgggƒ d S )NrC   rD   r3  r   rV   rV   rW   Útest_invalid_dims´  s   z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s¢   ddt  ¡ j  }t d| d t  ¡ j d ¡ t jd| t jd�}d|d d d…< t jjj||dfdd	�}t	 
|ddgg¡}t  |dk¡}|d
 jd
ksOJ ‚d S )Nl        éè  rI   éé  g    €„.Arü   rH   )iH  rŠ   )ÚshapeÚstridesr   )rp   rÄ   Úitemsizer<   Úcheck_free_memoryÚzerosÚlibÚstride_tricksÚ
as_stridedr   r   ÚwhererÕ   )rR   rî   rS   ÚcountÚfailsrV   rV   rW   Útest_large_array¹  s    zTestConvolve2d.test_large_arrayN)r¡   r¢   r£   r·   r±   rh  ri  r
  r  ÚslowÚxfail_on_32bitrw  rV   rV   rV   rW   ra  ˆ  s    
ra  c                   @   sœ  e Zd Zej dddddgddgg¡dd„ ƒZej dddgddgg¡d	d
„ ƒZej dddddgddgg¡dd„ ƒZej dddgddgg¡dd„ ƒZ	ej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZ
ej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgddgddgddgddgddgddgg
¡dd„ ƒZej dddgddgddgddgddgddgddgddgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej ddddgdgg¡dd„ ƒZej dddddgddgg¡dd„ ƒZej dddgg¡dd „ ƒZej dddddgddgg¡d!d"„ ƒZej dddgddgg¡d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zej dddddgddgg¡d-d.„ ƒZej dddgddgg¡d/d0„ ƒZej ddd1gd1dgddgddgd2d1gd1d2gd2dgdd2gg¡d3d4„ ƒZejjej d5eedd6ƒƒeed7d8ƒƒ ej  d9¡ !d:d;d<¡ "¡  ¡d=d>„ ƒƒZ#ejj$d?d@„ ƒZ%dS )AÚTestFFTConvolveÚaxesÚ Nr   rŒ   c                 C   óH   t g d¢ƒ}t g d¢ƒ}|dkrt||ƒ}nt|||d�}t||ƒ d S )NrG   ©rH   rD   rJ   rO   ç      "@r|  ©r{  ©r   r   r   ©rR   r{  rS   r¯   r°   rV   rV   rW   Ú	test_realÌ  s   zTestFFTConvolve.test_realrH   c                 C   óT   t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t|||d�}t||ƒ d S )NrG   r~  rI   rH   r€  ©r   rp   Útiler   r   r‚  rV   rV   rW   Útest_real_axesØ  ó   zTestFFTConvolve.test_real_axesc                 C   r}  )N©rc   ù       @       @y      @      @©rf   y               @y              4@y              8@y              2@r|  r€  r�  r‚  rV   rV   rW   rj   ã  s   zTestFFTConvolve.test_complexc                 C   r„  )Nr‰  r‹  rI   rH   r€  r…  r‚  rV   rV   rW   Útest_complex_axesî  rˆ  z!TestFFTConvolve.test_complex_axeséþÿÿÿc                 C   ó^   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}|dkr!t||ƒ}nt|||d�}t||ƒ d S )NrG   r|   ©rH   rD   rJ   rO   r  ©rŠ   r#  é8   rú   r¶   ©r~   r$  r©   rû   r¶   r|  r€  r�  r‚  rV   rV   rW   Útest_2d_real_sameù  s   ÿþz!TestFFTConvolve.test_2d_real_samerI   c                 C   ój   t g d¢g d¢gƒ}t g d¢g d¢g d¢gƒ}t |g d¢¡}t |g d¢¡}t|||d�}t||ƒ d S )NrG   r|   r�  r�  r’  ©rI   rH   rH   r€  r…  r‚  rV   rV   rW   Útest_2d_real_same_axes  s   	ÿþz&TestFFTConvolve.test_2d_real_same_axesc                 C   rŽ  )N©ù      ð?       @ù      @      @y      @      @©rd   y      @      @y      @      @©y      À      @y      $À      4@y      5À      L@y      2À      S@y      &À      N@©y              $@y              F@y             €]@y             €c@y             €^@©r™  y      $@      4@y      5@      L@y      2@      S@y      &@      N@r|  r€  r�  r‚  rV   rV   rW   Útest_2d_complex_same%  s   ÿýz$TestFFTConvolve.test_2d_complex_samec                 C   r”  )Nr—  rš  r›  rœ  r�  r•  r€  r…  r‚  rV   rV   rW   Útest_2d_complex_same_axes?  s   	ÿýz)TestFFTConvolve.test_2d_complex_same_axesc                 C   s”   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|dkr#t||dƒ}nt||d|d�}t||ƒ |dkr;t||dƒ}nt||d|d�}t||ƒ d S )NrG   ©	rC   rC   rE   rF   rŠ   r}   r  r   rH   ©ç     €A@ç     €D@ç     €G@©	r  g      4@ç      9@r¢  r£  r¤  rG  g      <@rH  r|  r\   r€  r�  ©rR   r{  rS   rT   Ú
expected_1Ú
expected_2r°   rV   rV   rW   Útest_real_same_modeV  s   
z#TestFFTConvolve.test_real_same_modec                 C   s¨   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )	NrG   r   r¡  r¥  rI   rH   r\   r€  r…  r§  rV   rV   rW   Útest_real_same_mode_axesi  s   
z(TestFFTConvolve.test_real_same_mode_axesc                 C   óˆ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}|dkrt||dƒ}nt||d|d�}t||ƒ |dkr5t||dƒ}nt||d|d�}t||ƒ d S )N©rC   rI   rH   r   ©g      8@g      ?@r£  rF  g     €H@r¦  ç      (@r|  r�   r€  r�  ©rR   r{  rS   rT   r¯   r°   rV   rV   rW   Útest_valid_mode_real{  s   
z$TestFFTConvolve.test_valid_mode_realc                 C   sr   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ d S ©Nr­  r   r®  rI   rH   r�   r€  r…  r°  rV   rV   rW   Útest_valid_mode_real_axesŽ  s   z)TestFFTConvolve.test_valid_mode_real_axesc                 C   r¬  )N©ù      @      ð¿y       @      @r­   ©rc  y      @      Ày      @        y      @      ð¿y       @        ©y     €F@      (@y      >@      7@y      H@      @@r|  r�   r€  r�  r°  rV   rV   rW   Útest_valid_mode_complexœ  s   
z'TestFFTConvolve.test_valid_mode_complexc                 C   sŒ   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||d|d�}t||ƒ t||d|d�}t||ƒ d S )Nr´  r¶  r·  rI   rH   r�   r€  r…  r°  rV   rV   rW   Útest_valid_mode_complex_axes®  s   
z,TestFFTConvolve.test_valid_mode_complex_axesc                 C   sr   t g d¢ƒ}t g d¢ƒ}t g d¢ƒ}t |ddg¡}t |ddg¡}t |ddg¡}t||ddd�}t||ƒ d S r²  r…  r®   rV   rV   rW   Útest_valid_mode_ignore_nonaxes¾  s   z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   óF   t tg g ƒjdkƒ t tddgg ƒjdkƒ t tg dgƒjdkƒ d S ©Nr   rE   rF   r}   )r   r   rÕ   r   rV   rV   rW   Ú
test_emptyË  ó   zTestFFTConvolve.test_emptyc                 C   ó,   t dƒ}t dƒ}t||ƒ}t||| ƒ d S rw   ©r   r   r	   ©rR   rS   rT   r°   rV   rV   rW   rk   Ñ  ó   
zTestFFTConvolve.test_zero_rankc                 C   rv   rw   rÀ  rÁ  rV   rV   rW   rx   ×  ry   z#TestFFTConvolve.test_single_elementc                 C   s�   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}|dkr4t||dƒ}nt||d|d�}tt j||dd	�ƒ d S )
NéÒ  éÑ  r‹   é)  rŽ   r|  r€  ç»½×Ùß|Û=©rá   )rp   ræ   ÚseedÚrandr   r   r   Úallcloser°  rV   rV   rW   Útest_random_dataÝ  s   z TestFFTConvolve.test_random_datac                 C   sª   t j d¡ t j d¡dt j d¡  }t j d¡dt j d¡  }t  ||d¡}t  |ddg¡}t  |ddg¡}t  |ddg¡}t||d|d�}tt j||d	d
�ƒ d S )NrÃ  rÄ  r‹   rÅ  rŽ   rI   rH   r€  rÆ  rÇ  )	rp   ræ   rÈ  rÉ  r   r†  r   r   rÊ  r°  rV   rV   rW   Útest_random_data_axesê  s   z%TestFFTConvolve.test_random_data_axesrD   éüÿÿÿc                 C   s<  d\}}t j d¡ t jj|Ž dt jj|Ž   }t jj|Ž dt jj|Ž   }t||dƒ}|d d …d d …d d d f }|d d …d d …d d d f }|d d …d d …d d d f }t  | dd¡dd¡}t  | dd¡dd¡}t  | dd¡dd¡}t  |g d	¢¡}t  |g d
¢¡}t  |g d¢¡}t||d|d�}t	||ddd� d S )N))é{   rK   )é„   é   rÃ  r‹   rŽ   r   rI   rH   rD   )rI   rH   rC   rH   rH   )rI   rH   rH   rD   rH   )rI   rH   rC   rD   rH   r€  rÆ  rà   )
rp   ræ   rÈ  rÉ  r   ÚmoveaxisÚswapaxesr†  r   r   )rR   r{  Úa_shapert   rS   rT   r¯   r°   rV   rV   rW   Útest_random_data_multidim_axesø  s    	z.TestFFTConvolve.test_random_data_multidim_axesrî   r¿   rj  iÜ  rÃ  rk  é'  rE   c                 C   s„   t j |¡dt j |¡  }t j |¡dt j |¡  }t  ||d¡}t||dƒ}t||dd� t||ddgd�}t||dd� d S )Nr‹   rŽ   rÆ  ©râ   r   r€  )rp   ræ   rÉ  r   r   r   )rR   rî   rS   rT   r¯   r°   rV   rV   rW   Útest_many_sizes  s   zTestFFTConvolve.test_many_sizesc              	   C   sˆ   d}t j d¡}| |¡}t jt jfD ].}||d< t dd¡}d}tj	t
|d�� tj||dd	d
� W d   ƒ n1 s<w   Y  qd S )Nrj  l   [<zn( r¿   éÈ   çš™™™™™É?z4Use of fft convolution.*|invalid value encountered.*r  r\   r   r˜   )rp   ræ   Údefault_rngÚstandard_normalÚnanÚinfr   Úfirwinr
  ÚwarnsÚRuntimeWarningr   )rR   rî   rð   Úsig_nanÚvalÚcoeffsr0  rV   rV   rW   Útest_fft_nan(  s   
ÿ€ûzTestFFTConvolve.test_fft_nan)&r¡   r¢   r£   r
  r  r`  rƒ  r‡  rj   rŒ  r“  r–  rž  rŸ  rª  r«  r±  r³  r¸  r¹  rº  r½  rk   rx   rË  rÌ  rÔ  rx  Úlistrr   rp   ræ   rç   ÚrandintÚtolistr×  r  rä  rV   rV   rV   rW   rz  Ê  s¾    







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

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

ù








ù
ÿþþrz  c                  O   s   t dƒ‚)NzFell back to fftconvolve)ÚRuntimeError)rï   ró   rV   rV   rW   Úfftconvolve_err6  s   ré  c                 C   ó   dd„ t | dd�D ƒS )Nc                 S   s(   g | ]\}}t || ƒd kr||f‘qS )rC   )Úabs©rÎ   rS   rT   rV   rV   rW   rÒ   ;  s    ÿz!gen_oa_shapes.<locals>.<listcomp>rI   ©Úrepeatr   ©ÚsizesrV   rV   rW   Úgen_oa_shapes:  ó   rñ  c                 C   s@   t | ƒ}t | ƒ}dd„ t||ƒD ƒ}g d¢}dd„ t||ƒD ƒS )Nc                 S   s   g | ]\}}|| ‘qS rV   rV   )rÎ   Úishapes0Úishapes1rV   rV   rW   rÒ   B  ó    z$gen_oa_shapes_2d.<locals>.<listcomp>re  c                 S   sb   g | ]-\}}|d ks*|d |d kr|d |d ks*|d |d k r|d |d k r||f ‘qS )r�   r   rH   rI   rC   rV   )rÎ   ÚishapesÚimoderV   rV   rW   rÒ   F  s      ý)rñ  Úzipr   )rð  Úshapes0Úshapes1ÚshapesÚmodesrV   rV   rW   Úgen_oa_shapes_2d?  s   ÿrý  c                 C   rê  )Nc                 S   s    g | ]\}}||kr||f‘qS rV   rV   rì  rV   rV   rW   rÒ   M  s    ÿz$gen_oa_shapes_eq.<locals>.<listcomp>rI   rí  r   rï  rV   rV   rW   Úgen_oa_shapes_eqL  rò  rþ  c                   @   s¾  e Zd Zej ¡ ej deee	dƒƒee	dddƒƒ ƒ¡dd„ ƒƒZ
ej deg d¢ƒ¡ej dd	d
g¡ej dg d¢¡dd„ ƒƒƒZej dddg¡ej deg d¢ƒ¡ej dddg¡ej dddg¡ej dd	d
g¡ej dg d¢¡dd„ ƒƒƒƒƒƒZej deg d¢ƒ¡ej dd	d
g¡dd„ ƒƒZej dddgddgddgg¡ej deg d¢ƒ¡ej dddg¡ej dddg¡ej dd	d
g¡dd„ ƒƒƒƒƒZdd„ Zd d!„ Zd"d#„ Zd$S )%ÚTestOAConvolvezshape_a_0, shape_b_0r¿   rj  rN   c                 C   s:   t j |¡}t j |¡}t||ƒ}t||ƒ}t||ƒ d S ©N)rp   ræ   rÉ  r   r   r   )rR   Ú	shape_a_0Ú	shape_b_0rS   rT   r¯   r°   rV   rV   rW   Útest_real_manylensR  s
   

z!TestOAConvolve.test_real_manylens)rö   é/   rF   rD   rH   Ú
is_complexTFr^   re  c           
      C   s~   t j |¡}t j |¡}|r"|dt j |¡  }|dt j |¡  }t|||d�}| tjdt¡ t|||d�}	t	|	|ƒ d S ©Nr‹   r]   r   ©
rp   ræ   rÉ  r   Úsetattrr   Ú_signaltoolsré  r   r   )
rR   r  r  r  r^   ÚmonkeypatchrS   rT   r¯   r°   rV   rV   rW   Útest_1d_noaxes`  s   
ÿzTestOAConvolve.test_1d_noaxesr{  r   rH   )rö   r  rF   rD   Úshape_a_extrarC   Úshape_b_extrac	                 C   s¦   |gd }	|gd }
||	|< ||
|< t jj|	Ž }t jj|
Ž }|r4|dt jj|	Ž   }|dt jj|
Ž   }t||||d�}| tjdt¡ t||||d�}t	||ƒ d S )NrI   r‹   ©r^   r{  r   r  )rR   r{  r  r  r  r  r  r^   r
  Úax_aÚax_brS   rT   r¯   r°   rV   rV   rW   Útest_1d_axest  s   



ÿzTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s†   t j ||¡}t j ||¡}	|r&|dt j ||¡  }|	dt j ||¡  }	t||	|d�}
| tjdt¡ t||	|d�}t	||
ƒ d S r  r  )rR   r  r  Ú	shape_a_1Ú	shape_b_1r^   r  r
  rS   rT   r¯   r°   rV   rV   rW   Útest_2d_noaxes‘  s   
ÿzTestOAConvolve.test_2d_noaxesrI   c                 C   sÆ   |gd }|gd }|||d < |||d < |||d < |||d < t jj|Ž }t jj|Ž }|	rD|dt jj|Ž   }|dt jj|Ž   }t||||d�}|
 tjdt¡ t||||d�}t	||ƒ d S )NrC   r   rH   r‹   r  r   r  )rR   r{  r  r  r  r  r^   r  r  r  r
  r  r  rS   rT   r¯   r°   rV   rV   rW   Útest_2d_axes¦  s"   


ÿzTestOAConvolve.test_2d_axesc                 C   r»  r¼  )r   r   rÕ   r   rV   rV   rW   r½  Æ  r¾  zTestOAConvolve.test_emptyc                 C   r¿  rw   ©r   r   r	   rÁ  rV   rV   rW   rk   Ì  rÂ  zTestOAConvolve.test_zero_rankc                 C   rv   rw   r  rÁ  rV   rV   rW   rx   Ò  ry   z"TestOAConvolve.test_single_elementN)r¡   r¢   r£   r
  r  rx  r`  rþ  rå  rr   r  rñ  r  r  rý  r  r  r½  rk   rx   rV   rV   rV   rW   rÿ  Q  sN    ÿÿ	
ÿ
ÿ
þ
þrÿ  c                   @   sÈ   e Zd Zej deeg¡dd„ ƒZej deeg¡dd„ ƒZ	ej ddgdfddgfd	gdggfg¡ej deeg¡d
d„ ƒƒZ
ej deeg¡dd„ ƒZej d¡ej dejejg¡dd„ ƒƒZdS )ÚTestAllFreqConvolvesÚconvapproachc                 C   sd   t  dd¡ d¡}t  dd¡ d¡}ttdd�� |||d	d
� W d   ƒ d S 1 s+w   Y  d S )NrH   r}   rº   r»   r   r¼   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r�   r]   )rp   r   rq   rœ   r�   ©rR   r  rS   rT   rV   rV   rW   r½   Û  s   ÿ"ýz(TestAllFreqConvolves.test_invalid_shapesc                 C   s`   t  g d¢¡}t  g d¢¡}ttdd�� |||ddgd� W d   ƒ d S 1 s)w   Y  d S )N)rE   rF   rI   rH   )rE   rF   rC   rH   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rH   r€  )rp   rp  rœ   r�   r  rV   rV   rW   Útest_invalid_shapes_axeså  s   ÿ"üz-TestAllFreqConvolves.test_invalid_shapes_axesza,brH   rI   rC   c                 C   s<   t tdd�� |||ƒ W d   ƒ d S 1 sw   Y  d S )Nz/in1 and in2 should have the same dimensionalityr  ©rœ   r�   )rR   rS   rT   r  rV   rV   rW   r  ð  s
   ÿ"ýz)TestAllFreqConvolves.test_mismatched_dimsc                 C   sÐ  t tdd�� |dgdgdd� W d   ƒ n1 sw   Y  t tdd�� |dgdgg d� W d   ƒ n1 s9w   Y  t td	d�� |dgdgddgd
dggd� W d   ƒ n1 s^w   Y  t td	d�� |dgdgg d¢d� W d   ƒ n1 sw   Y  t tdd�� |dgdgdgd� W d   ƒ n1 sŸw   Y  t tdd�� |dgdgdgd� W d   ƒ n1 s¿w   Y  t tdd�� |dgdgddgd� W d   ƒ d S 1 sáw   Y  d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rH   rI   Úchipsr]   z#when provided, axes cannot be emptyr€  z-axes must be a scalar or iterable of integersrC   rD   )ç      ð?rH  rJ  rK  z$axes exceeds dimensionality of inputr�  zall axes must be uniquer   r  )rR   r  rV   rV   rW   Útest_invalid_flagsü  s>   ÿýÿþ þþÿþÿþÿ"þz'TestAllFreqConvolves.test_invalid_flagsúignore::DeprecationWarningrê   c                 C   sp   t j d¡ |¡}t j d¡ |¡}t  |ƒ ¡r |d7 }|d8 }t||ƒ}t|t||dd�ƒ |j|ks6J ‚d S )N)rl   rl   )rD   rD   y        š™™™™™¹?rm   rn   )rp   ræ   rì   Úiscomplexobjr   r   r   rê   )rR   rê   rg   rh   ÚresrV   rV   rW   Útest_longdtype_input  s   
z)TestAllFreqConvolves.test_longdtype_inputN)r¡   r¢   r£   r
  r  r`  r   r   r½   r  r  r  Úfilterwarningsrp   Ú
longdoubleÚclongdoubler"  rV   rV   rV   rW   r  Ù  s4    ÿ
ÿ
	þÿÿÿ

r  c                   @   s:  e Zd Zg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g
Zg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
ZddgZdd„ Zej 	de
je
je
je
jeee
je
je
je
jg
¡dd„ ƒZej 	de
je
je
je
je
je
jddg¡dd„ ƒZd d!„ Zd"d#„ Zej 	de
je
je
jg¡d$d%„ ƒZd&S )'ÚTestMedFilt)
rö   rö   rö   rö   rö   r?  é   rl   rª   r&  )
rö   rö   rö   rö   rö   r   éH   éM   r7  r<  )
rö   rö   rö   rö   rö   r&  r  é   r%  r)  )
rö   rö   rö   rö   rö   rÓ   é   é   é_   é#   )
rö   rö   rö   rö   rö   r&  r_   r  rL  r<  )
r§   éa   rL   r7  r¨   r)  r³   r‚   éG   rÓ   )
r%  rù   r;  r,  r7  rM   r*  r7  r"  r=  )
rC   é!   rù   r'  rH   r¨   r6  é7   rO   éS   )
r}   rÐ  r&  r§   rû   r  r"  é+   r³   r#  )
rM   r³   éX   r}   é'   rD   r?  r%  rµ   r³   )
r   rö   rö   rö   rÓ   r+  r+  r'  rl   r   )
r   rö   rö   rö   rö   rÓ   r*  rL  r,  r   )
rö   rö   rö   rö   rö   r  r_   r_   r&  r.  )
rö   rö   rö   rö   rö   rö   rÓ   r  r%  rÓ   )
rö   rö   rö   rö   rö   rö   r&  r2  r%  r.  )
r1  rö   rö   rö   rö   r  r&  r4  r2  r#  )
rM   rö   rö   rö   rö   r  r&  rµ   r2  r#  )
r}   r&  rö   rö   r  r&  r&  r4  rµ   rL  )
r   rM   r1  r6  rM   rM   r4  r4  r4  r   )
r   r}   rÐ  r}   rD   rD   r*  r*  r"  r   r}   rC   c                 C   sB   t  | j| j¡}t  t | jt¡| j¡}t|| j	ƒ t||ƒ d S r   )
r   ÚmedfiltÚINÚKERNEL_SIZEÚ	medfilt2drp   r   rX  r   ÚOUT)rR   rˆ   r  rV   rV   rW   rX   D  s   zTestMedFilt.test_basicrê   c                 C   s8   t j| j|d�}tt |¡j|ƒ tt |¡j|ƒ d S )Nrü   )rp   r   r8  r	   r   r7  rê   r:  ©rR   rê   Úin_typedrV   rV   rW   Ú
test_typesJ  s   zTestMedFilt.test_typesÚfloat96Úfloat128c                 C   s°   |dv rt  t j¡j|krt d|› �¡ t j| j|d�}tjt	dd�� t
 |¡ W d   ƒ n1 s4w   Y  tjt	dd�� t
 |¡ W d   ƒ d S 1 sQw   Y  d S )N)r?  r@  zPlatform does not support rü   znot supportedr  )rp   Úfinfor$  rê   r
  Úskipr   r8  r   r�   r   r7  r:  r<  rV   rV   rW   Útest_invalid_dtypesS  s   ÿ"ÿzTestMedFilt.test_invalid_dtypesc                 C   s@   d}t t|d�� t d ¡ W d   ƒ d S 1 sw   Y  d S )Nz(dtype=object is not supported by medfiltr  )rœ   r�   r   r7  )rR   r0  rV   rV   rW   Ú	test_noned  s   "ÿzTestMedFilt.test_nonec                 C   s:   t jdt jd�}|dd… }d|_tt |d¡dkƒ d S )NrJ   rü   rE   rF   r~   rH   ç      @)rp   r   rË   rm  r   r   r7  )rR   ÚdummyrS   rV   rV   rW   Útest_odd_stridesj  s   zTestMedFilt.test_odd_stridesc           
         s  t jˆj|d�‰t jˆj|d�}ˆj|jksJ ‚|jd d ‰ |jd d ‰ˆjd d d ‰ˆjd d d ‰‡ ‡‡‡‡‡fdd„‰t  |¡}tdd��*‰h d	£}‡‡fd
d„|D ƒ}t|ƒD ]}| 	¡ \}}}	||||	f< q`W d   ƒ n1 szw   Y  t
||ƒ d S )Nrü   r   rI   rH   c                    sÔ   | \}}|dkrt dˆ ˆ ƒ}t dˆ ƒ}t dˆ ƒ}nt ˆ ˆ d ƒ}t ˆd ƒ}t ˆ d ƒ}|dkrCt dˆˆ ƒ}t dˆ ƒ}t dˆƒ}nt ˆˆ d ƒ}t ˆd ƒ}t ˆd ƒ}ˆ||f }	t |	ˆj¡}
|
||f ||fS ©Nr   )Úslicer   r:  r9  )ÚchunkÚMÚNÚMinÚMselÚMoutÚNinÚNselÚNoutÚ
chunk_dataÚmed)ÚM1ÚN1r=  ÚoffMÚoffNrR   rV   rW   Úapplyƒ  s$   



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyrD   )Úmax_workers>   ©rH   r   ©r   r   ©r   rH   ©rH   rH   c                    s   h | ]}ˆ  ˆ |¡’qS rV   )Úsubmit)rÎ   rJ  )rY  ÚpoolrV   rW   Ú	<setcomp>¢  rõ  z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)rp   r   r8  r;  rl  r9  Ú
zeros_liker   r   rR  r   )
rR   rê   r¯   ÚoutputÚchunksÚfuturesÚfutureÚdataÚMsliceÚNslicerV   )rU  rV  rY  r=  rW  rX  r`  rR   rW   Útest_medfilt2d_parallels  s$   
þû	z#TestMedFilt.test_medfilt2d_parallelN)r¡   r¢   r£   r8  r;  r9  rX   r
  r  r`  rp   ÚubyteÚbyteÚushortÚshortrA   r@   Ú	ulonglongrÊ   rË   r>  Úbool_rÌ   rÍ   r%  rÉ   Úobject_rC  rD  rG  rj  rV   rV   rV   rW   r&  *  sN    ÷÷þ
þ
	r&  c                   @   ó   e Zd Zdd„ ZdS )Ú
TestWienerc                 C   sr   t g d¢g d¢g d¢g d¢gdƒ}t g d¢g d¢g d¢g d	¢gƒ}tt |¡|d
d� ttj|dd�|d
d� d S )N)rE   rF   rD   rC   )rC   rE   rF   rI   )rI   rC   rE   rF   )rH   rF   r  r}   rˆ   )g‘ÔSXO@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º“@­_)@rF   ©ÚdecimalrC   )Úmysize)r   r   r   Úwiener)rR   r  r  rV   rV   rW   rX   ®  s   ýýýzTestWiener.test_basicN©r¡   r¢   r£   rX   rV   rV   rV   rW   rs  ¬  ó    rs  )ÚmeanÚmedianÚminimumÚmaximumÚlinec                	   @   s<  e Zd Zdd„ Zej dd¡ej dd¡ej dd¡d	d
„ ƒƒƒZdd„ Zej dd¡ej dd¡ej dd¡dd„ ƒƒƒZ	ejj
ej de¡dd„ ƒƒZej de¡dd„ ƒZej de¡ej dejejg¡dd„ ƒƒZej ddgeedgddgeƒƒ ¡d d!„ ƒZd"d#„ Zd$d%„ Zej dejejg¡d&d'„ ƒZd(S ))ÚTestResamplec              	   C   s¶   t  d¡}d}t dd¡}tttj|||d� tttj|ddƒ tttj|ddƒ tttj|d	dd
d� tttj|d	dddd� t  t  d¡d¡}tj||d|d� t	|j
dkƒ d S )Né€   é   )Úkaiserç       @é    ©ÚwindowÚyorH   r   rI   r|  ©Úpadtyperz  rJ   )r‰  Úcval)rI   rH   rŒ   ©Úaxisr†  )r„  )rp   r   r   Ú
get_windowrœ   r�   ÚresampleÚresample_polyr†  r   rl  )rR   ÚsigÚnumÚwinÚsig2rV   rV   rW   rX   À  s   
ÿzTestResample.test_basicr†  )NÚhammingrL  )rõ   r*  r‘  )r¿   rT  rJ   rÐ  c                 C   s´   t jdd|dd�}t  |d  d ¡}ttj|||d�tj|d ||d�jƒ t  t  |d  d ¡t  |d  d ¡g¡}|d }ttj||d	|d
�tj||d	|d
�jdd� d S )Nr   rJ   F)ÚendpointrI   g      @r…  r�   rH   r‹  ç•Ö&è.>rÖ  )	rp   ÚlinspaceÚcosr   r   rŽ  Úrealr   Úsin)rR   rL  r‘  r†  rg   rh   Ú	y_complexrV   rV   rW   Ú	test_rfftÖ  s   ÿ.
ýzTestResample.test_rfftc                 C   sF   t  d¡d }t |¡}d}ttj||dd�tj||dd�dd� d S )Nr�  r�   Úfreq)ÚdomainÚtimer–  rÖ  )rp   r   Úsp_fftr   r   r   rŽ  )rR   ÚtsigÚfsigr‘  rV   rV   rW   Útest_input_domainè  s   

ýzTestResample.test_input_domainÚnx)rH   rI   rC   rE   rŠ   Únyrê   )rX  r  c                 C   s2   t  dg| |¡}t ||¡}t|dg| ƒ d S ©NrH   )rp   r   r   rŽ  r   )rR   r¤  r¥  rê   rg   rh   rV   rV   rW   Útest_dcò  s   zTestResample.test_dcr‰  c                 C   sF   t  d¡}t j d¡ d¡}| ¡ }tj|dd||d� t||ƒ d S )NrC   r   rI   rE   rH   ©r†  r‰  )	rp   rp  ræ   rç   ré   Úcopyr   r�  r   )rR   r‰  Úimpulser†  Úwindow_origrV   rV   rW   Útest_mutable_windowú  s
   
z TestResample.test_mutable_windowc                 C   sL   t jdt jd�}t jg d¢t jd�}tj|dd||d�}|jt jks$J ‚d S )NrJ   rü   ©rH   rH   rH   rH   rI   r¨  )rp   r   rÊ   r   r   r�  rê   )rR   r‰  rg   r  rh   rV   rV   rW   Útest_output_float32  s   z TestResample.test_output_float32c                 C   s4   t jd|d�}tj|dd|d�}|j|jksJ ‚d S )NrJ   rü   rH   rI   rˆ  )rp   r   r   r�  rê   )rR   r‰  rê   rg   rh   rV   rV   rW   Útest_output_match_dtype  s   z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNÚ	polyphaseFTc                  C   sà  d}g d¢}t  |¡t|ƒ }t  d¡d d …t jf }t  dt j | | ¡t|ƒ }|D ]°}	t  |	¡t|	ƒ }
t  dt j | |
 ¡t|	ƒ }|dkrUtj	||	dd�}nC|r‡|	|kr‡t
|	|ƒ}|	| }|| }t||ƒ}d| }d	| }tjd| d
 |dd�}||dœ}nd|i}tj||	|fddi|¤Ž}t|||ƒD ]>\}}}|d|	 krÂ| d¡ |dv rºt||dd� qžt||dd� qžt|j|jƒ t  ||¡d }t|dk|||	fd� qžq-t j d¡}t|ƒt  | |¡¡ }|D ]>}	t  |	¡t|	ƒ }
t  |
||¡}|dk�rt 	||	¡}n	tj||	||d�}t|j|jƒ t  ||¡d }t|dk|d� qò|dk�rnt  ddg¡}t 	|d¡}t  g d¢¡}t||dd� t  g d ¢¡}t 	|d¡}t  ddg¡}t||dd� d S d S )!Nr¿   )	r…   rö   r÷   éc   r¿   rT  éÇ   rØ  éÉ   )r  ç      $@g      D@rI   r   rŒ   ©rŒ  r  rJ   rH   )r‚  rE  r…  r¨  r‰  rŒ  ç      à?ç        )r|  r}  ç333333Ó?rÖ  rã   r]  g®Gáz®ï?©r0  r   rˆ  r­   r�   rD   )r­   ù      à?        r�   rº  çê-�™—q=)r  r¶  r·  r¶  )rp   r   rX  r   Únewaxisrš  Úpir7   r   rŽ  r   ÚmaxrÞ  r�  rø  r!  r   r   rl  Úcorrcoefr   ræ   rç   Úcumsumré   Úinterp) rR   ro   Úextr‰  ÚrateÚrates_torÝ   Úfreqsrg   Úrate_toÚt_toÚy_tosÚ	y_resampsr  ÚupÚdownÚmax_rateÚf_cÚhalf_lenr†  ÚpolyargsÚy_toÚy_resampr�  Úcorrrð   rÚ   Úy1_testÚy1_truerÛ   Úy2_testÚy2_truerV   rV   rW   Útest_resample_methods  st     

ÿÿ
ö

ÿ
÷z"TestResample.test_resample_methodsc                 C   sè   t j d¡}tt jt jttf}d}g d¢}|D ]Z}| |¡ 	|¡}|t jt j
fv r2|d| |¡ 7 }d|d< d|d< |D ]4}tjdd| d	d
�}t|d|dd�d d |… }	t||d d d… ƒ}
tj|d||
d
�}t|	|ddd� q<qd S )Nr   rÕ  )rI   rÐ  éO   r‹   r   rŒ   r„   r  r”  r…  Úconstantrˆ  rH   çH¯¼šò×z>©râ   rá   )rp   ræ   rç   ÚintrÊ   rÌ   rX  r  ré   rì   rÍ   r   rÞ  r%   r   r�  r   )rR   Úrandom_stateÚ	try_typesrÕ   Údown_factorsrê   rg   rË  r  ÚyfÚhcrh   rV   rV   rW   Útest_poly_vs_filtfiltf  s$   ÷öz"TestResample.test_poly_vs_filtfiltc              	   C   s„   dD ]=}t dd|ƒD ]4}dD ]/}tj |f¡}tj |f¡}t||d d d… dd�}tj|d||d�}t|d d |… |ƒ qq
qd S )	N)rI   rD   rH   r$  )rM   r1  rŒ   rÙ  r]   )rÊ  rË  r†  )rr   rp   ræ   r   r   r�  r   )rR   rË  r¤  Únweightsrg   ÚweightsÚy_gÚy_srV   rV   rW   Útest_correlate1d‚  s   ÿúÿÿzTestResample.test_correlate1dc                 C   s:   t jg d¢|d�}tj|dddd�}t  |¡dksJ ‚d S )N)r   rH   rI   rC   rI   rH   r   rü   rI   rH   Úsmooth)rÊ  rË  r‰  r   )rp   r   r   r�  Úcount_nonzero)rR   rê   rg  ÚactualrV   rV   rW   Útest_gh_15620�  s   ýzTestResample.test_gh_15620N)r¡   r¢   r£   rX   r
  r  r`  rœ  r£  r§  r  Úpadtype_optionsr¬  r®  rp   rÊ   rË   r¯  rå  r   r×  râ  rç  rÃ   rë  rV   rV   rV   rW   r  ¿  sD    

ÿÿÿþ
	Ir  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCSpline1DEvalc                 C   sx   t g d¢ƒ}tt|ƒƒ}|d |d  }t |¡}tt|ƒd ƒd }tj||||d d�}t|d d d… |dd� d S )	N)	rH   rI   rC   rD   rC   rI   rH   rI   rJ  rH   r   r´  )ÚdxÚx0rJ   rE   rt  )r   r   Úlenr   Ú	cspline1dÚcspline1d_evalr   )rR   rh   rg   rî  ÚcjrÛ   Úy2rV   rV   rW   rX   ™  s   
zTestCSpline1DEval.test_basicc                 C   st   t  d¡}t j|jt jd�}d}d| }t  dt j | | ¡}t |¡}t  	dg¡}t 
||¡}t|j|jƒ d S )NrI   rü   r´  r  rf   r¶  )rp   r   rp  rl  rÌ   Úexpr½  r   rñ  r   rò  r	   rê   )rR   rg   rh   ÚTrÖ   ÚcyÚxnewÚynewrV   rV   rW   rj   ¥  s   

zTestCSpline1DEval.test_complexN)r¡   r¢   r£   rX   rj   rV   rV   rV   rW   rí  —  s    rí  c                   @   rr  )ÚTestOrderFiltc                 C   s$   t t g d¢g d¢d¡g d¢ƒ d S )NrG   ©rH   r   rH   rH   )rI   rC   rI   )r   r   Úorder_filterr   rV   rV   rW   rX   ¸  s   ÿzTestOrderFilt.test_basicNrx  rV   rV   rV   rW   rú  ¶  ry  rú  c                	   @   s$  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zej d3d4d4ge  d4¡g¡ej d5d4d4ge  d4¡g¡d6d7„ ƒƒZ!ejj"d8d9„ ƒZ#d:S );Ú_TestLinearFilterc                 C   s.   t  dt  |¡d t  |¡¡ |¡}|  |¡S )Nr   rH   )rp   r—  Úprodrq   Úconvert_dtype)rR   rl  rg   rV   rV   rW   Úgenerate¿  s   $
z_TestLinearFilter.generatec                 C   s|   | j t  d¡kr6t |¡}t |j| j ¡}t ||gddgdgdgg¡}|D ]\}}|  |d ¡|d< q&|S tj|| j d�S )	NÚOÚrefs_okÚzerosize_okÚreadonlyÚ	writeonlyrV   .rü   )rê   rp   r  Úemptyrl  ÚnditerÚtype)rR   Úarrr°   Úiterrg   rh   rV   rV   rW   rÿ  Ã  s   

ÿz_TestLinearFilter.convert_dtypec                 C   sJ   |   d¡}|  ddg¡}|  ddg¡}|  g d¢¡}tt|||ƒ|ƒ d S ©N©rF   rH   rŒ   r¶  ç      à¿©r   rI   rD   rF   rŠ   r´  ©r   rÿ  r   r#   ©rR   rg   rT   rS   Úy_rrV   rV   rW   Útest_rank_1_IIRÏ  s
   
z!_TestLinearFilter.test_rank_1_IIRc                 C   sH   |   d¡}|  ddg¡}|  dg¡}|  g d¢¡}tt|||ƒ|ƒ d S )Nr  rH   ©r   rH   rC   rE   r}   r  r  r  rV   rV   rW   Útest_rank_1_FIRÖ  s
   
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s|   |   d¡}|  g d¢¡}|  ddg¡}|  ddg¡}|  g d¢¡}|  dd	g¡}t||||d
�\}}t||ƒ t||ƒ d S )Nr  ©rH   r   rŒ   r¶  r  rH   rI   )rH   rE   r  é   r   rL  r  éöÿÿÿ©Úzi©r   rÿ  r#   r   ©	rR   rg   rT   rS   r  r  Úzf_rrh   ÚzfrV   rV   rW   Útest_rank_1_IIR_init_condÝ  s   

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   sz   |   d¡}|  g d¢¡}|  dg¡}|  ddg¡}|  g d¢¡}|  ddg¡}t||||d�\}}t||ƒ t||ƒ d S )Nr  r­  rH   )rH   rI   rC   rF   r  r¯  r  rE   r  r  r  rV   rV   rW   Útest_rank_1_FIR_init_condè  s   

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sf   |   d¡}|  ddg¡}|  ddg¡}|  g d¢g d¢g d¢g d¢g¡}t|||dd�}t||ƒ d S )	N©rD   rC   rH   rŒ   r¶  ©r   rI   rD   ©rF   rD   rI   r   rµ  r  )rR   rg   rT   rS   Úy_r2_a0rh   rV   rV   rW   Útest_rank_2_IIR_axis_0ó  ó   
ÿz(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sf   |   d¡}|  ddg¡}|  ddg¡}|  g d¢g d¢g d¢g d¢g¡}t|||dd	�}t||ƒ d S )
Nr   rH   rŒ   r¶  ©r   rI   r   ©rF   rÍ  rF   ©rO   r  rO   ©r'  iðÿÿÿr'  rµ  r  )rR   rg   rT   rS   Úy_r2_a1rh   rV   rV   rW   Útest_rank_2_IIR_axis_1ü  r%  z(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s¢   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  g d¢g d¢g d¢g d	¢g¡}|  g d
¢¡d d …tjf }t|||d|d�\}}t||ƒ t||ƒ d S )Nr   rH   rŒ   r¶  )rD   rH   r­  )r}   éûÿÿÿr}   )r  éõÿÿÿr  )r*  éïÿÿÿr*  )r,  r.  iãÿÿÿi×ÿÿÿ©rŒ  r  )r   rÿ  rp   rO  r¼  r#   r   )	rR   rg   rT   rS   r  Ú	y_r2_a0_1r  rh   r  rV   rV   rW   Ú test_rank_2_IIR_axis_0_init_cond  s   
ÿ
z2_TestLinearFilter.test_rank_2_IIR_axis_0_init_condc           	      C   s–   |   d¡}|  ddg¡}|  ddg¡}|  t d¡¡}|  g d¢g d¢g d¢g d¢g¡}|  g d¢g¡}t|||d	|d
�\}}t||ƒ t||ƒ d S )Nr   rH   rŒ   r¶  ©rH   rC   )rH   rC   rE   )rE   rC   rH   )ééÿÿÿr3  r3  r   r/  )r   rÿ  rp   rO  r#   r   )	rR   rg   rT   rS   r  Ú	y_r2_a0_0r  rh   r  rV   rV   rW   Ú test_rank_2_IIR_axis_1_init_cond  s   
ÿ
z2_TestLinearFilter.test_rank_2_IIR_axis_1_init_condc                    sj   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ qd S )N©rD   rC   rI   rH   rŒ   r¶  c                    ó   t ˆˆ | ƒS r   ©r#   ©Úw©rS   rT   rV   rW   Ú<lambda>&  ó    z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>©r   rÿ  rr   Úndimr#   rp   Úapply_along_axisr   ©rR   rg   rŒ  rh   r  rV   r;  rW   Útest_rank_3_IIR  s   
ýz!_TestLinearFilter.test_rank_3_IIRc                    sÌ   |   d¡}|  ddg¡‰|  ddg¡‰ t|jƒD ]K}t|jƒ}d||< |  t |¡¡}|  dg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ qd S )	Nr6  rH   rŒ   r¶  c                    ó   t ˆˆ | ˆd�d S ©Nr  r   r8  r9  ©rS   rT   Úzi1rV   rW   Úlf04  ó   z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0c                    rC  ©Nr  rH   r8  r9  rE  rV   rW   Úlf16  rH  z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1©r   rÿ  rr   r?  rå  rl  rp   rO  r#   r@  r   ©rR   rg   rŒ  Úzi_shaper  rh   r  rG  rJ  r  r  rV   rE  rW   Útest_rank_3_IIR_init_cond)  s    


óz+_TestLinearFilter.test_rank_3_IIR_init_condc                    sh   |   d¡}|  g d¢¡‰|  dg¡‰ t|jƒD ]}tˆˆ ||ƒ}t ‡ ‡fdd„||¡}t||ƒ qd S )Nr6  r  rH   c                    r7  r   r8  r9  r;  rV   rW   r<  D  r=  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r>  rA  rV   r;  rW   Útest_rank_3_FIR=  s   
ýz!_TestLinearFilter.test_rank_3_FIRc                    sÌ   |   d¡}|  g d¢¡‰|  dg¡‰ t|jƒD ]L}t|jƒ}d||< |  t |¡¡}|  ddg¡‰tˆˆ |||ƒ\}}‡ ‡‡fdd„}‡ ‡‡fdd„}t 	|||¡}	t 	|||¡}
t
||	ƒ t
||
ƒ qd S )	Nr6  r  rH   rI   c                    rC  rD  r8  r9  rE  rV   rW   rG  R  rH  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0c                    rC  rI  r8  r9  rE  rV   rW   rJ  T  rH  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1rK  rL  rV   rE  rW   Útest_rank_3_FIR_init_condG  s    


óz+_TestLinearFilter.test_rank_3_FIR_init_condc              
   C   sÆ   |   d¡}tjdddd�\}}|  |¡}|  |¡}|jd d }|  t dd	|f¡¡}|  t dd|f¡¡}t||||d
�\}}t||||d
�\}	}
t|	|ƒ t||
ƒ t	t
t|||dt |¡ƒ d S )N)rD   rE   rõ   rŠ   rÙ  Úba©rc  r   rH   rD   rE   r  rŒ   )r   r   r&   rÿ  rl  rp   rO  r#   r   rœ   r�   )rR   rg   rT   rS   Úzi_sizeÚzi_fullÚzi_singÚy_fullÚzf_fullÚy_singÚzf_singrV   rV   rW   Útest_zi_pseudobroadcast[  s   




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sP   |   d¡}|  g d¢¡}|  dg¡}|  g d¢¡}t||d |ƒ}t||ƒ d S )NrF   r  rH   )r   rH   rI   rI   rI   rI   r   r  )rR   rg   rT   rS   r  rh   rV   rV   rW   Útest_scalar_ap  s   
z_TestLinearFilter.test_scalar_ac                 C   s6  |   t dd¡¡}|   t dd¡¡}|   t g d¢¡¡}t dd¡}|dd d …d d …f  d9  < |dd d …d d …f  d9  < |   |¡}|   t d	d¡¡}t dd¡}dggdggdggg|d d …d d …d d
…f< |   |¡}t|||d|ƒ\}}t||ƒ t||ƒ t||d |d|ƒ\}	}
t|	|ƒ t|
|ƒ d S )N)rC   rI   rE   ÚlrE   ©rH   r   r   )rC   rH   rD   rH   rI   rC   )rC   rI   rD   rD   rŒ   r   )rÿ  rp   rp  rO  r   r#   r   )rR   rg   rT   rS   r  Úzf_expectedÚ
y_expectedÚy_iirÚzf_iirÚy_firÚzf_firrV   rV   rW   Útest_zi_some_singleton_dimsz  s"   
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |   |¡}|   |¡}|   |¡}|   |¡}ttt|||||ƒ d S r   )rÿ  rœ   r�   r#   )rR   rT   rS   rg   rŒ  r  rV   rV   rW   Úbase_bad_size_zi•  s
   



z"_TestLinearFilter.base_bad_size_zic                 C   s€	  t  d¡}|  dgdg|ddg¡ |  ddgdg|dddg¡ |  ddgdg|ddgg¡ |  ddgdg|dg d¢¡ |  g d¢dg|ddgg¡ |  g d¢dg|dg d¢¡ |  dgddg|dddg¡ |  dgddg|ddgg¡ |  dgddg|dg d¢¡ |  g d¢ddg|ddg¡ |  g d¢ddg|ddgdgg¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dg d¢¡ |  ddgg d¢|ddg¡ |  ddgg d¢|ddgdgg¡ |  ddgg d¢|dg d¢¡ |  ddgg d¢|dg d¢¡ t  d¡ d	¡}|  dgdg|ddg¡ |  ddgdg|dg d¢¡ |  ddgdg|dg d¢gg¡ |  ddgdg|ddgdgd
gg¡ |  ddgdg|dddgg¡ |  ddgdg|dg d¢g¡ |  g d¢dg|dg d¢¡ |  g d¢dg|dg d¢g d¢gg¡ |  g d¢dg|dddgd
dgddgg¡ |  g d¢dg|dddgd
dgg¡ |  g d¢dg|dg d¢g d¢g¡ |  dgddg|dg d¢¡ |  dgddg|dg d¢gg¡ |  dgddg|ddgdgd
gg¡ |  dgddg|dddgg¡ |  dgddg|dg d¢g¡ |  dgg d¢|dg d¢¡ |  dgg d¢|dg d¢g d¢gg¡ |  dgg d¢|dddgd
dgddgg¡ |  dgg d¢|dddgd
dgg¡ |  dgg d¢|dg d¢g d¢g¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dg d¢g d¢gg¡ |  g d¢ddg|dddgd
dgddgg¡ |  g d¢ddg|dddgd
dgg¡ |  g d¢ddg|dg d¢g d¢g¡ |  dgdg|ddg¡ |  ddgdg|dg d¢¡ |  ddgdg|ddgdgd
gdggg¡ |  ddgdg|dg d¢g¡ |  ddgdg|ddgdgd
gg¡ |  ddgdg|ddgdgd
gdgdgg¡ |  g d¢dg|dg d¢¡ |  g d¢dg|dddgd
dgddgddggg¡ |  g d¢dg|dg d¢g d¢g¡ |  g d¢dg|dddgd
dgddgg¡ |  g d¢dg|dddgd
dgddgddgddgg¡ |  dgddg|dg d¢¡ |  dgddg|ddgdgd
gdggg¡ |  dgddg|dg d¢g¡ |  dgddg|ddgdgd
gg¡ |  dgddg|ddgdgd
gdgdgg¡ |  dgg d¢|dg d¢¡ |  dgg d¢|dddgd
dgddgddggg¡ |  dgg d¢|dg d¢g d¢g¡ |  dgg d¢|dddgd
dgddgg¡ |  dgg d¢|dddgd
dgddgddgddgg¡ |  g d¢ddg|dg d¢¡ |  g d¢ddg|dddgd
dgddgddggg¡ |  g d¢ddg|dg d¢g d¢g¡ |  g d¢ddg|dddgd
dgddgg¡ |  g d¢ddg|dddgd
dgddgddgddgg¡ d S )NrF   rH   rŒ   r   ©r   rH   rI   r­  ©r   rH   rI   rC   rO   r   rI   )r   rH   rI   rC   rD   rE   rZ   rC   rD   rE   )rD   rE   rF   r}   )r   rH   rI   rC   rD   rE   rF   r}   r}   rŠ   r  )rp   r   re  rq   )rR   rÚ   rÛ   rV   rV   rW   Útest_bad_size_ziœ  sŽ   
""	 $&*$$ $&*$$(,&&*$,2$*6*$,2$*64&,<z"_TestLinearFilter.test_bad_size_zic                 C   sh   |   d¡}|  dg¡}|  dg¡}|  g ¡}t||||d�\}}t||ƒ t|j| jƒ t|jdƒ d S )N)rE   rH   r  r   )r   rÿ  r#   r   r	   rê   rÕ   )rR   rg   rS   rT   r  rh   r  rV   rV   rW   Útest_empty_ziü  s   


z_TestLinearFilter.test_empty_zic                 C   s`   |   dg¡}|   dg¡}t||ddgƒ}t||ddgƒ}t||ddgƒ}t||ƒ t||ƒ d S )NrH   r  r   TF)rÿ  r,   r   )rR   rS   rT   r  Úzi_1Úzi_2rV   rV   rW   Útest_lfiltic_bad_zi  s   
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   sz   |   dg¡}|   g d¢¡}|   ddg¡}|   dg¡}|   dg¡}|   ddg¡}t||||d�\}}t||ƒ t||ƒ d S )	NrH   r  rI   r}   r(  r6  é¸ÿÿÿr  ©rÿ  r#   r   ©	rR   rS   rT   r  rg   ÚyeÚzferh   r  rV   rV   rW   Útest_short_x_FIR  s   
z"_TestLinearFilter.test_short_x_FIRc           	      C   s|   |   ddg¡}|   g d¢¡}|   ddg¡}|   dg¡}|   dg¡}|   ddg¡}t||||d	�\}}t||ƒ t||ƒ d S )
NrH   r  rI   r}   r(  r6  i½ÿÿÿrm  r  rn  ro  rV   rV   rW   Útest_short_x_IIR  s   
z"_TestLinearFilter.test_short_x_IIRc                 C   sr   |   d¡}|  ddg¡}| ¡ }|  ddg¡}| ¡ }|  g d¢¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S r  ©r   rÿ  r©  r#   r   r	   ©rR   rg   rT   Úb0rS   Úa0r  Úy_frV   rV   rW   Útest_do_not_modify_a_b_IIR,  s   


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sp   |   d¡}|  g d¢¡}| ¡ }|  dg¡}| ¡ }|  g d¢¡}t|||ƒ}t||ƒ t||ƒ t||ƒ d S )Nr  rû  rI   )r   r¶  rH   rI   rC   rK  rt  ru  rV   rV   rW   Útest_do_not_modify_a_b_FIR8  s   


z,_TestLinearFilter.test_do_not_modify_a_b_FIRrS   r  rT   c                 C   s:   t j d¡}ttt  dg¡t  dg¡|ƒt|||ƒƒ d S )NrJ   r  )rp   ræ   ré   r   r#   r   )rR   rS   rT   rg  rV   rV   rW   Útest_scalar_inputD  s
   
þz#_TestLinearFilter.test_scalar_inputc                 C   sf   t jg d¢td�}t jg d¢td�}tjdd�� t||g d¢ƒ W d   ƒ d S 1 s,w   Y  d S )Nr¥   rü   r¦   r  r  r[   )rp   r  r	  r
  r  r#   rž   rV   rV   rW   r  L  s
   "ÿz(_TestLinearFilter.test_dtype_deprecationN)$r¡   r¢   r£   r   rÿ  r  r  r  r  r$  r+  r1  r5  rB  rN  rO  rP  rZ  r[  rd  re  rh  ri  rl  rr  rs  ry  rz  r
  r  r`  rp   r   r{  r  r  rV   rV   rV   rW   rý  ½  s>    		


`rý  c                   @   ó   e Zd Ze d¡ZdS )ÚTestLinearFilterFloat32rÖ   N©r¡   r¢   r£   rp   rê   rV   rV   rV   rW   r}  U  ó    r}  c                   @   r|  )ÚTestLinearFilterFloat64rˆ   Nr~  rV   rV   rV   rW   r€  Y  r  r€  r  c                   @   r|  )ÚTestLinearFilterFloatExtendedr  Nr~  rV   rV   rV   rW   r�  ]  ó    r�  c                   @   r|  )ÚTestLinearFilterComplex64ÚFNr~  rV   rV   rV   rW   rƒ  b  r  rƒ  c                   @   r|  )ÚTestLinearFilterComplex128ÚDNr~  rV   rV   rV   rW   r…  f  r  r…  c                   @   r|  )ÚTestLinearFilterComplexExtendedÚGNr~  rV   rV   rV   rW   r‡  j  r‚  r‡  c                   @   s   e Zd Ze d¡Zdd„ ZdS )ÚTestLinearFilterDecimalr  c                 C   s   t t|ƒƒS r   )r   Ústr©rR   rg   rV   rV   rW   r  s  s   zTestLinearFilterDecimal.typeN)r¡   r¢   r£   rp   rê   r  rV   rV   rV   rW   r‰  o  s    
r‰  c                   @   s   e Zd Ze d¡ZeZdS )ÚTestLinearFilterObjectr  N)r¡   r¢   r£   rp   rê   rX  r  rV   rV   rV   rW   rŒ  w  s    
rŒ  c                   C   sj   t tdƒrdtjv rt d¡ tttdgdgg d¢ƒ tttdgd gg d¢ƒ tttd gdgg d¢ƒ d S )NÚabiflagsrˆ   z'test is flaky when run with python3-dbgr  )r  NrH  ©r  rH  rJ  )ÚhasattrÚsysr�  r
  rB  rœ   Ú	TypeErrorr#   rV   rV   rV   rW   Útest_lfilter_bad_object}  s
   
r’  c                   C   s    t ttddgddgg d¢ƒ d S )NrI   rC   rD   rE   )rH   rI   rC   rD   rE   )rœ   ÚNotImplementedErrorr#   rV   rV   rV   rW   Ú!test_lfilter_notimplemented_inputŠ  s    r”  Údt)Úmarksc                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestCorrelateRealc                 C   sF   t  ddd¡ |¡}t  ddd¡ |¡}t  g d¢¡ |¡}|||fS )Nr   rC   rD   rH   rI   )r   rI   rE   rŠ   rC   )rp   r—  rì   r   ©rR   r•  rS   rT   r  rV   rV   rW   Ú_setup_rank1–  s   
zTestCorrelateReal._setup_rank1c                 C   sN   d}zt  |¡}t|dƒrtdt  |j¡ ƒ}W |S W |S  ty&   Y |S w )NrF   Ú
resolutionr  )rp   rA  r�  rÜ  Úlog10rš  Ú	Exception)rR   Úres_dtru  Údt_inforV   rV   rW   Úequal_tolerance�  s   

üþþz!TestCorrelateReal.equal_tolerancec                 C   s    |t jkr|  t j¡S |  |¡S r   )rp   r$  rŸ  rË   )rR   r�  rV   rV   rW   Úequal_tolerance_fft¨  s   

z%TestCorrelateReal.equal_tolerance_fftc                 C   s    |t krtt dƒgt dƒgƒ}t|dƒ d S |  |¡\}}}t||dd�}t||dd�}t|||  |j¡d� t|||  |j¡d� t|j|ƒ t|j|ƒ d S )NrD   rC   rm   r   rn   rt  )	r   r   r	   Ú_setup_rank3r   r   r   rê   rŸ  )rR   r•  ro   rS   rT   r  Úy_fftÚy_directrV   rV   rW   Útest_method°  s    
þ
þzTestCorrelateReal.test_methodc                 C   sr   |   |¡\}}}t||dƒ}t||dd… ƒ t|j|ƒ t||dƒ}t||dd… d d d… ƒ t|j|ƒ d S )Nr�   rH   rD   rŒ   ©r™  r   r   r	   rê   ©rR   r•  rS   rT   r  rh   rV   rV   rW   Útest_rank1_validÂ  s   z"TestCorrelateReal.test_rank1_validc                 C   s>   |   |¡\}}}t||dƒ}t||d d… ƒ t|j|ƒ d S )Nr\   rŒ   r¥  r¦  rV   rV   rW   Útest_rank1_sameÍ  s   z!TestCorrelateReal.test_rank1_samec                 C   s6   |   |¡\}}}t||dƒ}t||ƒ t|j|ƒ d S )NrŽ   r¥  r¦  rV   rV   rW   Útest_rank1_fullÓ  s   
z!TestCorrelateReal.test_rank1_fullc              
   C   sÌ   t  ddd¡jddd� |¡}t  ddd¡jd	dd� |¡}tg d
¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d¢ggt jd� |¡}|||fS )Nr   r6  r$  )rI   rD   rE   r„  )ÚorderrN   r"  r{   )r·  g      g@g     €@g     €Œ@ç     @•@g     À‹@g     €}@g      d@)g      G@g      {@g     ˜�@g     Àœ@g     à¤@ç     ˆš@g      ‹@g      p@)ç     À`@g      ‡@g     ø™@g      ¥@ç      ®@g     ä¢@g     @’@g      s@)g     @p@g     À�@g     0ž@g     à§@g     p°@g     (¤@g     `“@g     Àt@)g     @i@g     À„@ç     (”@g      Ÿ@g      ¥@g     Ø˜@g     @†@g     Àb@)g     €\@g     €u@g     „@g      Ž@g      ”@g     °†@g     €r@g      C@)g      7@g      y@g     ,�@ç      œ@g     ¥@g     $›@g     @Œ@g     Pr@)r­  g     ÀŒ@g     ì @g     À¬@g      ´@g     Ô©@g      ™@g      }@)g     Pt@g      ˜@g     Rª@g     ˆµ@g     (¾@g     K²@g      ¡@g     ¸€@)g     Ø�@g     °ž@g     f®@g     °·@g     (À@g     }³@g     (¢@g     ¨�@)g      {@r«  g     4¤@r®  g     �´@g     Ü§@g     €”@ç     Àl@)g      n@g     à…@g     ”@g     €�@g     €£@g     œ•@g      €@rG  )g      6@g     Àj@g     €€@g      Œ@g     Ð”@g     pŠ@g     àz@g     €`@)g     €U@g     @~@g     (‘@r°  g     P¤@g     ™@g      ˆ@g     Ài@)g     €g@g     ‰@r¬  g     X¥@g     ˜­@g      ¡@g     Ð�@g     @k@)g     @s@g     p�@g     xž@g     h§@g     ¨¯@g     À¢@g     Ø�@r±  )r±  g      …@r¯  g      ž@g     ¤@g     È–@g      ‚@g     €S@)g     €_@g      v@g     àƒ@g     àŒ@g     ð’@g     p„@g     @m@r·  rü   )rp   r—  rq   rì   r   rË   r˜  rV   rV   rW   r¡  Ù  sB   ÿÿûûûòìì
zTestCorrelateReal._setup_rank3c                 C   s    |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ t||dƒ}t||dd…dd…dd…f d d d…d d d…d d d…f ƒ t|j|ƒ d S )Nr�   rH   rI   rD   rC   rE   rŒ   ©r¡  r   r   r	   rê   r¦  rV   rV   rW   Útest_rank3_valid÷  s    <z"TestCorrelateReal.test_rank3_validc                 C   sL   |   |¡\}}}t||dƒ}t||dd…dd…dd…f ƒ t|j|ƒ d S )Nr\   r   rŒ   rH   r�  r²  r¦  rV   rV   rW   Útest_rank3_same  s    z!TestCorrelateReal.test_rank3_samec                 C   s4   |   |¡\}}}t||ƒ}t||ƒ t|j|ƒ d S r   r²  r¦  rV   rV   rW   Útest_rank3_all  s   

z TestCorrelateReal.test_rank3_allN)r¡   r¢   r£   r™  rŸ  r   r¤  r§  r¨  r©  r¡  r³  r´  rµ  rV   rV   rV   rW   r—  �  s    r—  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	d	d
„ ƒZ
dS )ÚTestCorrelatec                 C   r¸   r¹   )rp   r   rq   rœ   r�   r   rž   rV   rV   rW   r½     r¾   z!TestCorrelate.test_invalid_shapesc                 C   r”   r•   ©rœ   r�   r   rž   rV   rV   rW   rŸ     r    z!TestCorrelate.test_invalid_paramsc                 C   rþ   rÿ   r·  r   rV   rV   rW   r  '  r  z"TestCorrelate.test_mismatched_dimsc                 C   s‚   g d¢}ddg}t t||dd�g d¢ƒ g d¢}g d¢}t t||dd�g d¢ƒ t t||d	d�g d
¢ƒ t t||dd�dgƒ d S )NrG   rD   rE   r\   r]   )rE   é   rN   r|   )r   rM   rN   rŽ   )rF   r   rM   rN   rO   r�   rM   )r   r   rž   rV   rV   rW   Útest_numpy_fastpath0  s   z!TestCorrelate.test_numpy_fastpathc                 C   r  r  )rp   r  r	  r
  r  r   rž   rV   rV   rW   r  ;  r  z$TestCorrelate.test_dtype_deprecationN)r¡   r¢   r£   r½   rŸ   r  r¹  r
  r  r  r  rV   rV   rV   rW   r¶    s    		r¶  r^   ©r�   r\   rŽ   ÚbehindTFÚ
input_size)r¿   rT  rj  rk  rÕ  i'  c                 C   sœ   t j d¡}| |¡}t|d ƒ}|r!t  | |¡|g¡}| }n||d … }|}t||| d�}t|j|j| d�}	t  	|¡}
t
|	|
 |ƒ t
|	j|jƒ d S )Nr   rJ   r]   )rp   ræ   rç   rÛ  rÜ  Úconcatenater   r   rÕ   Úargmaxr	   rl  )r^   r»  r¼  rð   Úin1ÚoffsetÚin2r¯   ÚcorrelationÚlagsÚ	lag_indexrV   rV   rW   Útest_correlation_lagsD  s   

rÅ  c                   C   sB   t jtdd�� tdddd� W d   ƒ d S 1 sw   Y  d S )NzMode asdfgh is invalidr  r¿   Úasdfghr]   )r
  r   r�   r   rV   rV   rV   rW   Ú"test_correlation_lags_invalid_mode`  s   "ÿrÇ  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestCorrelateComplexc                 C   s(   |t jkrt j}tdt  |¡j d ƒS )NrI   rC   )rp   r%  ÚcdoublerÜ  rA  Ú	precision)rR   r•  rV   rV   rW   ru  o  s   
zTestCorrelateComplex.decimalc                 C   sÆ   t j d¡ t j d¡ |¡}|dt j d¡ |¡ 7 }t j d¡ |¡}|dt j d¡ |¡ 7 }t|j|j|d�t|j|j|d�  |¡}|dt|j|j|d� t|j|j|d�  7 }|||fS )Nr  rJ   r‹   rŠ   r]   )rp   ræ   rÈ  ré   rì   r   r™  Úimag)rR   r•  r^   rS   rT   r  rV   rV   rW   r™  t  s   ÿÿÿ
z!TestCorrelateComplex._setup_rank1c                 C   s|   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ t||dƒ}t||d d d…  ¡ |  |¡d� t|j|ƒ d S )Nr�   rt  rŒ   )r™  r   r   ru  r	   rê   Úconjr¦  rV   rV   rW   r§  �  s   "z%TestCorrelateComplex.test_rank1_validc                 C   óB   |   |d¡\}}}t||dƒ}t|||  |¡d� t|j|ƒ d S )Nr\   rt  ©r™  r   r   ru  r	   rê   r¦  rV   rV   rW   r¨  Œ  ó   z$TestCorrelateComplex.test_rank1_samec                 C   rÍ  )NrŽ   rt  rÎ  r¦  rV   rV   rW   r©  ’  rÏ  z$TestCorrelateComplex.test_rank1_fullc                 C   s@   t jg d¢|d�}t jg d¢|d�}t||ƒ}t|g d¢ƒ d S )N©r�   rc   rŠ  rü   ©y      ð?      @y       @      @y      @      @y      @      @)r�   ù      $@       Àù      <@      Àù      6@      Ày      0@      Ày       @      À)rp   r   r   r	   ©rR   r•  rˆ   Úkrh   rV   rV   rW   Útest_swap_full˜  s   
z#TestCorrelateComplex.test_swap_fullc                 C   s0   g d¢}g d¢}t ||dd�}t|g d¢ƒ d S )NrÐ  rÑ  r\   r]   )rÒ  rÓ  rÔ  )r   r	   rÕ  rV   rV   rW   Útest_swap_samež  s   z#TestCorrelateComplex.test_swap_samec                 C   sä   t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t j ddd¡ |¡}|dt j ddd¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt|j|jƒ t|j|jƒ  7 }t||dƒ}t|||  |¡d d� t	|j
|ƒ d S )	NrJ   rŠ   rF   r‹   rD   rŽ   rH   rt  )rp   ræ   ré   rì   r   r™  rË  r   ru  r	   rê   r¦  rV   rV   rW   Ú
test_rank3¤  s   ÿÿ&zTestCorrelateComplex.test_rank3c                 C   s8  t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t  t j ¡ ¡ |¡}|dt  t j ¡ ¡ |¡ 7 }t|j|jƒt|j|jƒ  |¡}|dt  t|j|jƒ t|j|jƒ ¡ 7 }t||dƒ}t|||  	|¡d d� t
|j|ƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ t
tdgdgƒtddƒƒ d S )Nr‹   rŽ   rH   rt  rf   ù              @rD   )rp   r   ræ   ré   rì   r   r™  rË  r   ru  r	   rê   r¦  rV   rV   rW   Ú
test_rank0²  s$   ÿÿ
ÿzTestCorrelateComplex.test_rank0N)r¡   r¢   r£   ru  r™  r§  r¨  r©  r×  rØ  rÙ  rÛ  rV   rV   rV   rW   rÈ  e  s    
rÈ  c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCorrelate2dc              	   C   sÊ   t  d¡}t  g d¢¡}dD ]T}tt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ |dkrbtt j|||d�tj|||d�ƒ tt  tj|g|g|d�¡tj|||d�ƒ qd S )NrE   rd  re  r]   r�   )rp   r   r   r
   r   r   rf  r   rg  rV   rV   rW   Ú test_consistency_correlate_funcsÈ  s,   
ÿÿþÿÿþ€õz0TestCorrelate2d.test_consistency_correlate_funcsc                 C   sl   t  dd¡ d¡}t  dd¡ d¡}tttjg||f¢R i ddi¤Ž tttjg||f¢R i ddi¤Ž d S r¹   )rp   r   rq   rœ   r�   r   r   rž   rV   rV   rW   r½   Û  s   "&z#TestCorrelate2d.test_invalid_shapesc                 C   sR   t t dggdgg¡dƒ t t dggdgg¡dƒ t t dggdgg¡dƒ d S )NrH   rf   ù       €       ÀrÚ  rF   rD   y              (@)r	   r   r   r   rV   rV   rW   Útest_complex_inputç  s   z"TestCorrelate2d.test_complex_inputN)r¡   r¢   r£   rÞ  r½   rà  rV   rV   rV   rW   rÝ  Æ  s    rÝ  c                   @   s:   e Zd Zdd„ Zdd„ Zej dej	ej
g¡dd„ ƒZdS )	ÚTestLFilterZIc                 C   sB   t  g d¢¡}t  g d¢¡}t  ddg¡}t||ƒ}t||ƒ d S )N)r  rI  r¶  )r  r·  rH  rE  rI  )rp   r   r$   r   )rR   rS   rT   Úzi_expectedr  rV   rV   rW   rX   ï  s
   
zTestLFilterZI.test_basicc                 C   sJ   t  g d¢¡}t  g d¢¡}t||ƒ}td| d| ƒ}t||dd� d S )N)rI   rŠ   rE   )rH   rH   rŠ   rI   r»  rÇ  )rp   r   r$   r   )rR   rT   rS   rF  Úzi2rV   rV   rW   Útest_scale_invarianceö  s
   
z#TestLFilterZI.test_scale_invariancerê   c                 C   s<   t jd|d�}t jdg|d�}tt  t ||¡¡j|ƒ d S )NrŠ   rü   rH   )rp   rp  r   r	   r™  r   r$   rê   )rR   rê   rT   rS   rV   rV   rW   r>  ÿ  s   zTestLFilterZI.test_typesN)r¡   r¢   r£   rX   rä  r
  r  r`  rp   rÊ   rË   r>  rV   rV   rV   rW   rá  í  s
    	rá  c                   @   sN   e Zd ZdZ		ddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFiltFiltÚtfrŒ   ÚoddNr]  c              	   C   sR   | j dkrt|Ž \}}	t||	||||||ƒS | j dkr't|Ž }
t|
||||ƒS d S )Nræ  Úsos)Úfiltfilt_kindr'   r%   r(   r/   )rR   Úzpkrg   rŒ  r‰  Úpadlenro   ÚirlenrT   rS   rè  rV   rV   rW   r%   		  s   

þzTestFiltFilt.filtfiltc                 C   s:   t g d¢g d¢ƒ}|  |t d¡¡}t|tdƒdd� d S )NrG   rO   g6Â‹{ðÍ=rÖ  )r1   r%   rp   r   r   )rR   rê  r°   rV   rV   rW   rX   	  s   zTestFiltFilt.test_basicc                 C   s*  d}t  dd|d ¡}t  dt j | ¡}t  dt j | ¡}|| }tddd	d
�}t  |d ¡ ¡ }d}tt  t  	|¡t  	|¡ ¡ƒ}	| j
|||	d�}
t  |
| ¡ ¡ }t|dk ƒ t  ||| g¡}| j
|||	dd�}t|j|jƒ t  || ¡ ¡ }t|dk ƒ | j
||j|	dd�}t||jƒ d S )NéÐ  r   r  rH   rJ   iô  rŠ   ç      À?rê  rR  rä   )rë  rß   ©rë  rŒ  )rp   r—  rš  r½  r&   rë  r¾  rÜ  ÚceilÚlogr%   r   Úvstackr	   rl  rö  )rR   rÃ  rÝ   ÚxlowÚxhighrg   rê  ÚrÚepsrî   rh   ÚerrÚx2dÚy2dÚy2dtrV   rV   rW   Ú	test_sine	  s&   zTestFiltFilt.test_sinec                 C   s˜   t  d¡ ddd¡}tdddd�}| j||d	d	d
�}| j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ | j|t  |d	d¡d	dd
�}t|t  |d	d¡ƒ d S )Ng      ”@rJ   rÐ  rO   rC   rî  rê  rR  r   rï  rH   rI   )rp   r   rq   r&   r%   rÒ  r   )rR   rg   rê  Úy0Úy1rô  rV   rV   rW   Ú	test_axis9	  s   zTestFiltFilt.test_axisc                 C   s@   | j dkrd S t ddgdt d¡¡}t|t d¡ddd� d S )Nræ  r¶  rH   rJ   ç›+¡†›„=rà   )ré  r   r%   rp   r   r   )rR   r°   rV   rV   rW   Útest_acoeffC	  s   
zTestFiltFilt.test_acoeffc                 C   sò   | j dkr
t d¡ t ddg¡}t dg¡}t ddg¡}t|||ƒ\}}}t|d |d gd|d  d	|d
   d	|d  d|d
   gƒ t||d d|d   d|d   d|d
   d|d  |d  d|d   d|d
   gƒ d S )Nræ  ú$gust only implemented for TF systemsr  rH  r¶  r  r   r¸  rÙ  rH   ç      Ð?rî  )ré  r
  rB  rp   r   r8   r   )rR   rg   rT   rS   rh   Úz1Úz2rV   rV   rW   Útest_gust_simpleJ	  s   

.ÿ.*
ÿzTestFiltFilt.test_gust_simplec                 C   sT   | j dkr
t d¡ t d¡}d}d}t|||dd�}|| d | }t||ƒ d S )	Nræ  r  rO   rJ  rH  Úgustrn   rI   )ré  r
  rB  rp   r   r%   r   )rR   rg   rT   rS   rh   r¯   rV   rV   rW   Útest_gust_scalarsX	  s   


zTestFiltFilt.test_gust_scalars)rŒ   rç  Nr]  N)r¡   r¢   r£   ré  r%   rX   rû  rþ  r   r  r  rV   rV   rV   rW   rå  	  s    
ÿ	"
rå  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSOSFiltFiltrè  c           	      C   sv   t j d¡ d¡}tddƒD ]*}tj|ddd�}t|Ž \}}t|Ž }t	|||ƒ}t
||ƒ}t||dd	|› �d
� qdS )z1Test equivalence between sosfiltfilt and filtfiltr   rj  rH   rF   çffffffÖ?rê  rR  r»  zorder=)râ   Úerr_msgN)rp   ræ   rç   ré   rr   r   r&   r'   r(   r%   r/   r   )	rR   rg   rª  rê  rT   rS   rè  rh   Úy_sosrV   rV   rW   Útest_equivalencei	  s   
úz TestSOSFiltFilt.test_equivalenceN)r¡   r¢   r£   ré  r  rV   rV   rV   rW   r  f	  s    r  c                 C   sø   dd„ }t t|ƒt| ƒƒd }t| |ƒ}t |d|…  ¡ | || d…  ¡ | f¡}t||| ||fdddddd	d
�	}|\}}	}
}}|dkrMtd| ƒ‚|d|… }||d… }t| ||ddd… |d�d ddd… }t| |||d�d }|||fS )aQ  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significantly faster than this implementation.
    c                 S   s¼   t t|ƒt|ƒƒd }| d|… }| |d… }t||||d�d }t|||ddd… |d�d ddd… }t|||ddd… |d�d ddd… }	t|||	|d�d }
t ||
 d ¡}|S )z-Objective function used in filtfilt_gust_opt.rH   Nr  r   rŒ   rI   )r¾  rð  r#   rp   Úsum)ÚicsrT   rS   rg   ÚmÚz0fÚz0brx  Úy_fbÚy_bÚy_bfÚvaluerV   rV   rW   Úfiltfilt_gust_opt_func~	  s   ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrH   NrÆ  r»  rÕ  TF)rï   ÚxtolÚftolÚmaxfunÚmaxiterÚfull_outputÚdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%drŒ   r  )	r¾  rð  r$   rp   r½  rz  r   rè  r#   )rT   rS   rg   r  r  r  r  rR  ÚoptÚfoptÚniterÚfuncallsÚwarnflagr  r  r  rh   rV   rV   rW   Úfiltfilt_gust_optu	  s&   	
0ýÿ(
r"  c                 C   sH  t j d¡ t jj|Ž }t| |||d|d�}t| ||||d�\}}}	t  ||d¡}
|
jd d… }t  |
¡}t	t
|ƒt
| ƒƒd }t  ||f ¡}t  ||f ¡}tdd„ |D ƒŽ D ]}t| ||
| ƒ\||< ||< ||< qYt  |d|¡}t  |d|¡}t  |d|¡}t||d	d
d� t||d	d
d� t||d	d
d� t|	|d	d
d� d S )NrÎ  r  )rŒ  ro   rì  )rŒ  rì  rŒ   rH   c                 S   s   g | ]}t |ƒ‘qS rV   )rr   )rÎ   rˆ   rV   rV   rW   rÒ   µ	  rÞ   z'check_filtfilt_gust.<locals>.<listcomp>rå   r–  rà   )rp   ræ   rÈ  ré   r%   r8   rÒ  rl  Ú
empty_liker¾  rð  r  r   r"  r   )rT   rS   rl  rŒ  rì  rg   rh   ÚygÚzg1Úzg2ÚxxÚ	out_shaper‡  r  Úzo1Úzo2ÚindxrV   rV   rW   Úcheck_filtfilt_gust¡	  s&   
$r,  rJ   c            
      C   sÖ   dD ]f} dD ]J}d\}}}t jj|f| Ž }t jj|f| Ž }t||| d�}t||ƒ t||| dd�\}}	t|dv ƒ tt|	tƒƒ td|	 ¡ v oNd	|	 ¡ v ƒ qt j	d
gt j
d�}| ¡ }tt||| d�d	ƒ qd S )Nrº  )rH   rI   )rŠ   rF   rm   r]   T)r^   Úmeasure>   r   rm   r   rm   l         @ rü   )rp   ræ   ré   r   r	   r   Ú
isinstanceÚdictÚkeysr   rÄ   r©  )
r^   r?  rî   rÖ  Útrue_methodrg   r  ro   Ú
method_tryÚtimesrV   rV   rW   Útest_choose_conv_methodÁ	  s   

ðr4  c                  C   s`   t jg d¢td�} t jg d¢td�}tjdd�� t| |ƒ W d   ƒ d S 1 s)w   Y  d S r  )rp   r  r	  r
  r  r   r;  rV   rV   rW   Ú"test_choose_conv_dtype_deprecationÖ	  r  r5  c                  C   s„   dD ]=} t dƒt dƒg}t dƒt dƒg}tt||| d�dƒ d}d	D ]}tt|ƒr>tj||d
�}| ¡ }tt||| d�dƒ q"qd S )Nrº  rC   rI   rH   rD   r]   rm   rJ   )Ú
complex256Ú
complex192rü   )r   r	   r   r�  rp   rO  r©  )r^   rg   r  rî   Únot_fft_conv_supprV   rV   rW   Útest_choose_conv_method_2ß	  s   
€üúr9  c                  C   sà   t jdddddd�\} }}d}t t |¡¡}tt t |¡t |¡ ¡ƒ}tj 	d¡ t
| ||ƒ\}}d |fD ]&}d	| }	t|||	fd
|ƒ tdƒD ]}
g d¢}|	||
< t||||
|ƒ qKq8d| d }t|||fd
|ƒ d S )NrC   ç{®Gáz„?éx   gffffff¶?rê  rR  rÆ  rÎ  rE   r   )rI   rI   rI   rI   rö   )r   Úelliprp   r¾  rë  rÜ  rð  rñ  ræ   rÈ  r'   r,  rr   )ri   ÚprÖ  rö  rõ  Úapprox_impulse_lenrT   rS   rì  Ú
signal_lenrŒ  rl  ÚlengthrV   rV   rW   Útest_filtfilt_gustî	  s    ýrA  c                   @   ó|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDecimatec                 C   s6   t  d¡}tttj|ddd� tttj|ddd� d S )NrO   r¶  rH   )Úqrî   rI   )rp   r   rœ   r‘  r   Údecimater‹  rV   rV   rW   Útest_bad_args
  s   
zTestDecimate.test_bad_argsc                 C   ó:   t  d¡}tj|ddddd� ¡ }t||d d d… ƒ d S )NrO   rI   rH   ÚiirF©rî   ÚftypeÚ
zero_phase©rp   r   r   rE  Úroundr   ©rR   rg   rh   rV   rV   rW   Útest_basic_IIR
  ó   
zTestDecimate.test_basic_IIRc                 C   rG  )NrO   rI   rH   ÚfirFrI  rL  rN  rV   rV   rW   Útest_basic_FIR
  rP  zTestDecimate.test_basic_FIRc                 C   sJ   t  d¡}tj|dddd�}t|jdƒ tj|dddd�}t|jdƒ d S )	N)r€   r€   rI   r   F)rŒ  rK  )r+  r€   rH   )r€   r+  )rp   rp  r   rE  r	   rl  )rR   ri   Úd0Úd1rV   rV   rW   Ú
test_shape
  s
   
zTestDecimate.test_shapec                 C   óF   t ƒ �}| td¡ | jddd� W d   ƒ d S 1 sw   Y  d S )NúBadly conditioned filterrQ  F©ro   rK  ©r   r/  r2   Ú_test_phaseshift©rR   r1  rV   rV   rW   Útest_phaseshift_FIR&
  ó   "þz TestDecimate.test_phaseshift_FIRc                 C   rV  )NrW  rQ  TrX  rY  r[  rV   rV   rW   Útest_zero_phase_FIR+
  r]  z TestDecimate.test_zero_phase_FIRc                 C   ó   | j ddd� d S )NrH  FrX  ©rZ  r   rV   rV   rW   Útest_phaseshift_IIR0
  ó   z TestDecimate.test_phaseshift_IIRc                 C   r_  )NrH  TrX  r`  r   rV   rV   rW   Útest_zero_phase_IIR3
  rb  z TestDecimate.test_zero_phase_IIRc                 C   sè  d}g d¢}d}t  || d ¡t|ƒ }t  |¡d d }t  dt j |d d …t jf  | ¡tj 	|j
d¡ }|D ]¶}	||	 }
t  |	| d ¡t|	ƒ }t  dt j |d d …t jf  | ¡tj 	|j
d¡ }|d	kr€d
}t tj|d d|
 dd�d¡}n|dkršd}dt j |
 }tjt |d|t j ¡Ž }|du 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 )Nr;  )r+  rõ   r€   r$  r¿   rH   çš™™™™™é?rI   rf   çš™™™™™¹?rQ  r€   r  r”  r…  rH  rŠ   gš™™™™™©?F©rJ  rK  rŒ   rµ  r¶  r   rã   rÛ  )rp   r   rX  r   rõ  r½  r¼  r   ÚwindowsÚtukeyrÕ   ÚdltirÞ  Úcheby1Úfreqzr‘  Údenrë  Ú	ones_likerE  r™  r  rÌ  r   Úangle)rR   ro   rK  rÃ  rÄ  Út_totrÝ   rÅ  rˆ   rÆ  rD  rÇ  Úd_tosrî   ÚsystemÚwcÚ_Úh_respsrÉ  Ú	h_resampsÚsubnyqrV   rV   rW   rZ  6
  sR   $ÿ$ÿÿÿÿ
ÿÿßzTestDecimate._test_phaseshiftc                 C   s|   d}d}t  |¡| }t  d| ¡t  dt j |d  | ¡ }tt j |¡ddd� tj	|d	d
d�}t
t j |¡dƒ d S )Ng      Y@rj  rH  rI   g      >@r  rã   rÇ  r€   rQ  )rJ  r:  )rp   r   Úsqrtrš  r½  r   ÚlinalgÚnormr   rE  r   )rR   Úsfreqrî   rÝ   rg   Úx_outrV   rV   rW   Útest_auto_nf
  s   *zTestDecimate.test_auto_nc                 C   s.   t  tjdtjd�d¡}tt |¡ƒrJ ‚d S )NrÕ  rü   rJ   )r   rE  rp   rO  rÊ   rí   Úisnanr‹  rV   rV   rW   Útest_long_float32r
  s   zTestDecimate.test_long_float32c                 C   s.   t  tjdtjd�d¡}|jjtjksJ ‚d S )Nr¿   rü   rJ   )r   rE  rp   rO  rÉ   rê   r  rË   r‹  rV   rV   rW   Útest_float16_upcastx
  s   z TestDecimate.test_float16_upcastc                 C   sX  d}d}d}t jddtj | d d|d�\}}}| t¡t dtj | | ¡ }| t¡t dtj | | ¡ }t  |||¡}t d¡| }t dtj | | ¡d	t d
tj | | ¡  }	t j	|	d|dd�}
t j
g t  |||¡¢|	‘R Ž d d d… }t|
|ƒ t j	|	d|dd�}t jg t  |||¡¢|	‘R Ž d d d… }t||ddd� d S )Nrö   rE   ç     @�@rI   rê  )rc  Úfsrf   rØ  r¶  rß  Frf  TrÆ  ç‚vIhÂ%<=rà   )r   r&   rp   r½  rì   r  rõ  ri  r   rE  r#   r'   r	   r%   r   )rR   ÚfcentreÚfwidthr�  ri   r=  rÖ  rq  rÝ   r×   ÚynzpÚynzprefÚyzpÚyzprefrV   rV   rW   Útest_complex_iir_dlti}
  s2   &""ÿÿÿ
ÿÿz"TestDecimate.test_complex_iir_dltic                 C   s  d}d}d}d}t j||d |d�}t |¡}|t dtj | | ¡ }|d t |¡ }t  |d	¡}	t d
¡| }
t dtj | |
 ¡dt dtj | |
 ¡  }t j	|d|	dd�}t j
||d	dd�d d… }t||ƒ t j	|d|	dd�}t j|d	d|d�}t||ƒ d S )Nrö   rE   r€  rõ   rI   )r�  rf   r   rH   rØ  r¶  rß  Frf  )rÊ  rË  r¿   Tr…  )r   rÞ  rp   Úrootsrõ  r½  Úpolyri  r   rE  Úupfirdnr	   r�  )rR   rƒ  r„  r�  ÚnumtapsÚbbaseÚzbaseÚzrotÚbzrq  rÝ   r×   r…  r†  r‡  rˆ  rV   rV   rW   Útest_complex_fir_dlti�
  s&   
ÿ
z"TestDecimate.test_complex_fir_dltiN)r¡   r¢   r£   rF  rO  rR  rU  r\  r^  ra  rc  rZ  r|  r~  r  r‰  r’  rV   rV   rV   rW   rC  
  s    0 rC  c                   @   sB   e Zd Zdd„ Zdd„ Zdd„ Zej de	j
e	jg¡dd	„ ƒZd
S )ÚTestHilbertc                 C   s6   t  dg¡}ttt|ƒ t  d¡}ttt|dd� d S )Nr­   rƒ  r   ©rL  )rp   r   rœ   r�   r!   r   r‹  rV   rV   rW   rF  Ä
  s   
zTestHilbert.test_bad_argsc                 C   sj  d}t j}t  dd| |d ¡}t  |¡}t  |¡}t  d| ¡}t  d| ¡}t  ||||g¡}t|ƒ}	t  |	¡}
t  |	¡}t  	|	¡}t
|||ƒ t
|
t  |j¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|dd d…f t  | d |d |d ¡|ƒ t
|dd d…f t  d||d ¡|ƒ t
|	d j||ƒ d S )Nr¸  r   rI   r�  rH   r€  rC   )rp   r½  r   rš  r˜  rò  r!   rë  rn  r™  r
   rO  rl  rË  )rR   ru  r½  rÝ   rw  Úa1Úa2Úa3rS   r  Úh_absÚh_angleÚh_realrV   rV   rW   Útest_hilbert_theoreticalÊ
  s:   




þ ÿþ ÿz$TestHilbert.test_hilbert_theoreticalc                 C   sª   t  d¡ dd¡}t|dd�}tt|jdd�|jƒ tt|d ƒ|d dƒ t|ddd	�}t|jddgƒ tt|jddd	�jddgƒ t  g d
¢¡}t|d |ddƒ d S )Nr'  rC   rF   rŒ   rµ  r   r¸  rõ   )rL  rŒ  )y        Bm}¶Ä…û¿y      ð?ðãâa Àyûÿÿÿÿÿÿ?¥®0fÓóÀy      @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)	rp   r   rq   r!   r	   rö  r
   rl  r   )rR   rS   ÚaaÚaanÚa0hilbrV   rV   rW   Útest_hilbert_axisNó
  s   zTestHilbert.test_hilbert_axisNrê   c                 C   ó*   t jd|d�}tt  t |¡¡j|ƒ d S )NrŠ   rü   )rp   rp  r	   r™  r   r!   rê   r<  rV   rV   rW   Útest_hilbert_types  ó   zTestHilbert.test_hilbert_typesN)r¡   r¢   r£   rF  r›  rŸ  r
  r  r`  rp   rÊ   rË   r¡  rV   rV   rV   rW   r“  Â
  s    )%r“  c                   @   s2   e Zd Zdd„ Zej dejej	g¡dd„ ƒZ
dS )ÚTestHilbert2c                 C   s€   t  dgg¡}ttt|ƒ t  d¡ ddd¡}ttt|ƒ t  d¡ dd¡}ttt|dd� ttt|d	d� ttt|d
d� d S )Nr­   r"  rI   rC   rD   r~   r   r”  )rI   r   )rI   )rp   r   rœ   r�   r"   r   rq   r‹  rV   rV   rW   rF     s   zTestHilbert2.test_bad_argsrê   c                 C   r   )N)rI   rM   rü   )rp   rp  r	   r™  r   r"   rê   r<  rV   rV   rW   Útest_hilbert2_types/  r¢  z TestHilbert2.test_hilbert2_typesN)r¡   r¢   r£   rF  r
  r  r`  rp   rÊ   rË   r¤  rV   rV   rV   rW   r£    s    r£  c                   @   sf  e Zd ZdZedd„ ƒZdd„ Zdd„ Zej	 
dg d	¢d
g d¢g d¢fg d¢dg d¢g d¢fg d¢dg d¢g d¢fg d¢dg d¢g d¢fg d¢dg d¢g d¢fg d¢dg d¢g d¢fg d¢dg d¢g d¢fg¡dd„ ƒZej	 
dg d¢dg d ¢g d¢fg d!¢d"g d ¢g d#¢fg d$¢d"g d%¢g d&¢fg¡d'd(„ ƒZd)d*„ Zd+d,„ Zej	 
d-g d.¢g d/¢g¡d0d1„ ƒZd2S )3ÚTestEnvelopez4Unit tests for function `._signaltools.envelope()`. c                 C   s   t | |dd|d� dS )z9Little helper to compare to arrays with proper tolerancesr»  )râ   rá   r
  Nr=   )rê  Údesiredr0  rV   rV   rW   Úassert_close8  s   zTestEnvelope.assert_closec              	   C   s²  t jtdd�� tt d¡dd� W d  ƒ n1 sw   Y  t jtdd�� tt d¡d	d� W d  ƒ n1 s;w   Y  d
D ].}d tt|ƒ¡}t jtd|› d�d�� tt d¡|d� W d  ƒ n1 skw   Y  qBt jtdd�� tt d¡dd� W d  ƒ n1 sŒw   Y  dD ]"}t jtdd�� tt d¡|d� W d  ƒ n1 s°w   Y  q“t jtdd�� tt d¡dd� W d  ƒ dS 1 sÒw   Y  dS )z[For `envelope()` Raise all exceptions that are used to verify function
        parameters. z'Invalid parameter axis=2 for z.shape=.*r  rC   rI   rµ  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rC   r   rH   )rf  )r   rH  )NrH  z, zbp_in=\(z\) isn't a 2-tuple of.*rD   )Úbp_inz)n_out=10.0 is not a positive integer or.*r´  )Ún_out))rŒ   rC   r^  )r   rJ   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*Ú	undefined©Úresidual)	r
  r   r�   r    rp   rO  ÚjoinÚmaprŠ  )rR   r¨  ÚtsrV   rV   rW   Ú test_envelope_invalid_parameters=  sB   ÿþÿþ
ÿý€ÿýÿþ€"þz-TestEnvelope.test_envelope_invalid_parametersc                 C   s  g d¢g d¢}}t  |¡}t|ƒ}t|dddd�\}}| jt  |¡t g d¢¡ t	¡dd	� | jt  |¡t g d
¢¡ t	¡dd	� t|dddd�\}}| j|d |dd	� | j||dd	� t|dddd| d�\}	}
| j|	ddd… |dd	� | j|
ddd… |dd	� t|dddd�\}}| j||dd	� | jt  |¡t g d¢¡ t	¡dd	� t|dddd�}| j||dd	� t 
|¡}|dd…  d9  < t j||d�}| j|j|dd	� t|dddd�\}}| j|| t	¡dd	� | jt  |¡t |¡ t	¡dd	� dS )zEEnsure that the various parametrizations produce compatible results. )rD   rI   rI   rC   r   )rD   r   r   rF   r   r   r   r   r2  ÚallT©r¬  Úsquared©rD   rI   r   r   r   úEnvelope calculation errorr¹  )rD   r   r   rC   r   úResidual calculation errorFrI   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrC   )r¬  r³  r©  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorÚlowpassz/`residual='lowpass'` envelope calculation error)rD   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorrH   )rî   zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)r   Úirfftrð  r    r§  Úrfftrp   r   rì   r  r©  Úifftr™  r   )rR   ÚZÚZr_ari   rî   Úze2_0Úzr_0Úze_1Úzr_1Úze2_2Úzr_2Úze2_3Úzr_3Úze2_4ÚZ_aÚz_aÚze2_aÚzr_arV   rV   rW   Útest_envelope_verify_parametersX  s`   
ÿÿÿÿÿÿÿÿÿ

ÿÿ
ÿz,TestEnvelope.test_envelope_verify_parametersz@               Z,        bp_in,     Ze2_desired,      Zr_desired©rH   r   rI   rI   r   )rH   Nr´  ©rH   r   r   r   r   )rD   r   rI   r   r   )r   N)r   r   r   r   r   )rD   r   r   rI   r   ©NN)r   r   rI   rI   r   r2  )rI   r   r   r   r   )r   r   r   rI   r   )rD   r   rI   rI   r   )éýÿÿÿrC   )rD   r   rC   rD   r   r¦  )r   r   rC   rD   r   rH  c                 C   sÐ   t  |¡}t||ddd�\}}t||ddd�\}}	dd„ ||||	fD ƒ\}
}}}t |¡ t¡}t |¡ t¡}| j|
|dd� | j||d	d� |d
 durVd||d
 d…< | j||dd� | j||dd� dS )a  Test envelope calculation with real-valued test signals.

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

        We only need to test for the complex envelope here, since the ``Nones``s in the
        bandpass filter were already tested in the previous test.
        r±  Tr²  c                 s   s    � | ]}t  t  |¡¡V  qd S r   ©r   Úfftshiftr   rÑ  rV   rV   rW   rÓ  »  s   € z=TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>rµ  r¹  r¶  N)	r   rº  Ú	ifftshiftr    r§  rp   r   rì   r  )
rR   r»  r¨  rÕ  rÖ  ri   r×  rØ  rÛ  rÜ  rV   rV   rW   Útest_envelope_complex_signals­  s   ÿ
ÿz*TestEnvelope.test_envelope_complex_signalsc                 C   sÖ   t  g d¢g d¢g¡}tjg d¢g d¢gtd�}tjg d¢g d¢gtd�}t|dd	d
�\}}t|jddd
�\}}dd„ ||j||jfD ƒ\}}	}
}| j||dd� | j|
|dd� | j|	|dd� | j||dd� dS )z.Test for multi-channel envelope calculations. rË  )r}   r   rD   rD   r   r´  )r~   rŠ   r   r   r   rü   rÌ  )r}   r   r   r   r   TrH   )r³  rŒ  r   c                 s   rÏ  r   rÐ  rÑ  rV   rV   rW   rÓ  Ë  rÔ  zCTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>ú2d envelope calculation errorr¹  ú2d residual calculation errorú"Transposed 2d envelope calc. errorú"Transposed 2d residual calc. errorN)r   r¸  rp   r   r  r    rö  r§  )rR   ri   rÕ  rÖ  r×  rØ  Úye2TÚyrTrÛ  ÚYe2rÜ  ÚYrrV   rV   rW   Ú#test_envelope_verify_axis_parameterÂ  s   ÿ"z0TestEnvelope.test_envelope_verify_axis_parameterc                 C   sú   t  t jg d¢g d¢gdd�¡}tjg d¢g d¢gtd�}tjg d¢g d¢gtd�}td	d
dd�}t|fddi|¤Ž\}}t|jfddi|¤Ž\}}dd„ ||j||jfD ƒ\}	}
}}| j	|	|dd� | j	||dd� | j	|
|dd� | j	||dd� dS )zBTest for multi-channel envelope calculations with complex values. rá  )rH   rJ   r   rJ   rI   rH   r€  rà  )rõ   r   r$  r   rõ   rü   rã  râ  r±  T)r¨  r¬  r³  rŒ  r   c                 s   s$   � | ]}t jt  |¡d d�V  qdS )rH   r€  Nrä  rÑ  rV   rV   rW   rÓ  Ü  s   € ÿzKTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>rè  r¹  ré  rê  rë  N)
r   rº  ræ  rp   r   r  r/  r    rö  r§  )rR   ri   ÚZe2_desÚZr_desÚkwr×  rØ  rì  rí  rÛ  rî  rÜ  rï  rV   rV   rW   Ú+test_envelope_verify_axis_parameter_complexÒ  s    ÿÿz8TestEnvelope.test_envelope_verify_axis_parameter_complexÚX)rD   r   r   rH   rI   )rD   r   r   rI   rH   rI   c                 C   s:   t  |¡}t t|ƒ¡}t|ddd�}| j||dd� dS )z0Compare output of `envelope()` and `hilbert()`. rÍ  Nr«  z!Hilbert-Envelope comparison errorr¹  )r   r¸  rp   rë  r!   r    r§  )rR   rõ  rg   Úe_hilÚe_envrV   rV   rW   Útest_compare_envelope_hilbertä  s   
z*TestEnvelope.test_compare_envelope_hilbertN)r¡   r¢   r£   Ú__doc__Ústaticmethodr§  r°  rÊ  r
  r  r`  rß  rç  rð  rô  rø  rV   rV   rV   rW   r¥  5  s<    
/úþ
	þþ
r¥  c                   @   s’   e Zd Zed#dd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )$ÚTestPartialFractionExpansionr}   c                 C   s„   t  |¡}t  |¡}t  t|d d …d f | ƒt| d d …d f | ƒ¡}t|ƒ\}}t|| || |d� t| | || |d� d S )Nrt  )rp   r  Úhypotrë  r   r
   )rõ  r=  Úr_trueÚp_trueru  ÚdistanceÚrowsÚcolsrV   rV   rW   Úassert_rp_almost_equalî  s   

ÿz3TestPartialFractionExpansion.assert_rp_almost_equalc                 C   sP  t g d¢g d¢ƒ\}}tt|ƒdƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d	¢¡ƒ t|t g d
¢¡ƒ t g d¢g d¢dd�\}}tt|ƒdƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d¢¡ƒ t|d t g d	¢¡ƒ t|t g d
¢¡ƒ d S )NrG   r­  rC   r   )rI   rI   rC   rH   )rH   rH   rH   rC   rI   )rH   rH   rH   rI   rI   )rH   rH   rH   rI   rI   rC   T)Úinclude_powersrF   )rH   rH   rI   rI   rC   )rH   rI   rI   rC   )rH   rH   rH   rI   rC   rD   rE   )r9   r	   rð  r
   rp   r‹  )rR   Úfactorsr‹  rV   rV   rW   Útest_compute_factorsú  s"   
ÿz1TestPartialFractionExpansion.test_compute_factorsc                 C   s4   t g d¢ddƒ\}}t|g d¢ƒ t|g d¢ƒ d S )N)r  gj¼t“ð?g?5^ºIð?rH  g /Ý$ @rJ  re  ÚminrŽ  r­  )r:   r	   ©rR   ÚuniqueÚmultiplicityrV   rV   rW   Útest_group_poles  s
   
ÿz-TestPartialFractionExpansion.test_group_polesc                 C   s>  t g d¢g d¢ƒ\}}}t|g d¢dd� t|g d¢dd� t|dgdd� t dd	gg d
¢ƒ\}}}t|d	dgƒ t|ddgƒ t|jdƒ t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddgg d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t ddgg d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t g d¢g d¢ƒ\}}}t|g d¢ƒ t|g d¢ƒ t|ddgƒ t dgg d¢ƒ\}}}t|ddgƒ t|dd gƒ t|jdƒ t g d!¢g d"¢ƒ\}}}|  ||g d#¢g d$¢¡ t|jdƒ t g d%¢g d&¢ƒ\}}}|  ||g d'¢g d(¢¡ t|jdƒ t ddgg d)¢ƒ\}}}t|dd*gƒ t|ddgƒ t|jdƒ t g d+¢g d)¢ƒ\}}}t|dd,gƒ t|ddgƒ t|dgƒ t g d-¢g d)¢ƒ\}}}t|d.d/gƒ t|ddgƒ t|d0d1gƒ t g d+¢g d2¢ƒ\}}}|  ||g d3¢g d4¢¡ t|jdƒ d S )5N©rE   rC   r�  r}   ©rÍ  r   rŠ   rC   )gZd;ßOõ?gîëÀ9#Jå¿g&äƒžÍªö¿rD   rt  )gà-� ø1Ú¿gþe÷äa¡ò¿gvqà-ù?g      ô¿rÍ  rŠ   ©rH   rF   rŠ   iôÿÿÿr�  r   rH   )rH   rŒ   r�  rC   rŒ   rI   )rI   g333333Àg®Gáz®ÿ?g–C‹lçûÙ¿)y      2À     @*Ày      2À     @*@g      B@)y      à?š™™™™™É¿y      à?š™™™™™É?gffffffæ?)rH   rE   rŠ   rD   )rŒ   rH   rC   )rŒ   r�  r�  )rC   gš™™™™™ñ¿g)\�Âõ(ì?g^ºI+ÀgÅ °rh‘õ?)rH   gffffffæ¿gìQ¸…ëÁ¿gú~j¼t“¨?)rÎ  rD   rH   )rÙ  g333333Ó¿rd  )rH   rI   rÎ  r  ç      Ð¿rÎ  )rH   r   r,  )rH   r   r   r   rŒ   )rH   y              ø?y       €      ø¿rŒ   )rŒ   ù       €      ð¿r‹   rH   )rC   rŠ   rF   ©rH   rC   rC   rH   rG   ©rŒ   rŒ   rŒ   )rH   rÎ  rI   rE   )rI   rC   rŒ   r  )r}   rI   rC   rŒ   r-  éE   r}   rN   )rH   rÎ  rD   r�  )rD   y      ð¿      @y      ð¿      À)rH   ù      ð?      ð¿rc   )r5   r
   r	   rÕ   r  ©rR   rõ  r=  rÖ  rV   rV   rW   Útest_residue_general  sp   
þ
ÿÿÿz1TestPartialFractionExpansion.test_residue_generalc                 C   ó¾   t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}t g d¢g d¢ƒ\}}}	t g d¢g d¢ƒ\}
}}t||ƒ t||ƒ t||
ƒ t||ƒ t||ƒ t||ƒ t||ƒ t||	ƒ t||ƒ d S )Nr  r  )r   rE   rC   r�  r}   )r   rÍ  r   rŠ   rC   )r   r   rE   rC   r�  r}   )r   r   r   rÍ  r   rŠ   rC   )r5   r
   ©rR   Úr0Úp0Úk0Úr1Úp1Úk1Úr2Úp2Úk2Úr3Úp3Úk3rV   rV   rW   Útest_residue_leading_zerosW  s   







z7TestPartialFractionExpansion.test_residue_leading_zerosc                 C   s²   t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W d   ƒ d S 1 sRw   Y  d S )Nr   r  r�  rÍ  rH   úDenominator `a` is zero.r  )r5   r
   r	   rÕ   r
  r   r�   r  rV   rV   rW   Útest_resiude_degenerateg  s   "ÿz4TestPartialFractionExpansion.test_resiude_degeneratec                 C   s¸  t g d¢g d¢ƒ\}}}|  ||g d¢g d¢¡ t|dgƒ t g d¢g d¢ƒ\}}}| j||dd	gd
dgdd� t|dgdd� t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t g d¢g d¢ƒ\}}}|  ||g d¢g d¢¡ t|jdƒ t g d¢g d¢ƒ\}}}t|ddgƒ t|ddgƒ t|ddgƒ t dgg d¢ƒ\}}}|  ||g d ¢g d!¢¡ t|jdƒ t ddgt dd"gdd#g¡ƒ\}}}t|d$d%gƒ t|d&dgƒ t|jdƒ t g d'¢ddgƒ\}}}t|dgƒ t|dgƒ t|ddgƒ t ddd(gƒ\}}}t|dgƒ t|d)gƒ t|jdƒ t dg d*¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t dg d+¢ƒ\}}}t|ddgƒ t|d#dgƒ t|jdƒ t g d,¢g d'¢ƒ\}}}t|d-d.gƒ t|ddgƒ t|dgƒ t d/dgg d'¢ƒ\}}}t|d0d1gƒ t|ddgƒ t|jdƒ t g d¢g d'¢ƒ\}}}t|d2d3gƒ t|ddgƒ t|d4dgƒ t g d5¢g d6¢ƒ\}}}| j||g d7¢g d8¢dd� t|jdƒ d S )9N)rH   rF   rF   rI   )rH   y       À      ð¿r˜  r  )y       À      @y      @      @y      À      (À)r‹   rH   rH   rf   )rH   rI   rH   )rH   rŒ   g'Â†§WÊÖ?y	Šcîì¿à-� øÀy	Šcîì¿à-� ø@y      à?*©ÐDØÔ?y      à?*©ÐDØÔ¿rD   rt  g�Å�1w@rH   rŒ   )rH   r,  rF   rI   rC   r   r{   r  )rD   r,  rC   r  )rH   r  rÍ  rD   )rI   r�  rÍ  r¶  g      ø¿ç      ø?r'  )r'  rC   rÍ  rŒ   )g
×£p=
×?g¸…ëQ¸Î?çš™™™™™Ù?)r¶  çUUUUUUÕ¿r)  r  r  g«ªªªªª
ÀgUUUUUU@r  ©rH   r�  rH   r  r‹   )rH   rŒ   r  )rH   g      è¿rî  )rH   rF   rI   r  r  rF   r�  rŠ   ièÿÿÿr+  rJ   rû  )rH   r   r   r   r   rŒ   )yoð…ÉTÁÐ?cÙ=yXÈ?yoð…ÉTÁÐ?cÙ=yXÈ¿r(  yjMóŽ£?%uš¾¿yjMóŽ£?%uš¾?)yÙÎ÷Sãé¿s×òAÏâ?yÙÎ÷Sãé¿s×òAÏâ¿r  y-²�ï§ÆÓ?8gDioî?y-²�ï§ÆÓ?8gDioî¿)r6   r  r
   r	   rÕ   rp   Úpolymulr  rV   rV   rW   Útest_residuez_generalv  s†   ÿýÿ$ûz2TestPartialFractionExpansion.test_residuez_generalc                 C   r  )Nr  r  )rE   rC   r�  r}   r   )rÍ  r   rŠ   rC   r   )rE   rC   r�  r}   r   r   )rÍ  r   rŠ   rC   r   r   r   )r6   r
   r  rV   rV   rW   Útest_residuez_trailing_zerosÇ  s   







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc                 C   sî   t ddgg d¢ƒ\}}}t|ddgƒ t|ddgƒ t|jdƒ t ddƒ\}}}t|jdƒ t|jdƒ t|jdƒ tjtdd�� t ddƒ W d   ƒ n1 sQw   Y  tjtdd�� t dg d	¢ƒ W d   ƒ d S 1 spw   Y  d S )
Nr   r  r�  rÍ  rH   r%  r  z6First coefficient of determinant `a` must be non-zero.rg  )r6   r
   r	   rÕ   r
  r   r�   r  rV   rV   rW   Útest_residuez_degenerateØ  s    ÿÿ"ýz5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s‚   g d¢}g d¢}g }g d¢}g d¢}dD ]*}t ||||d�\}}t||ƒ t||ƒ t||||d�\}}t||ƒ t||ƒ qd S )N)r¸  çUUUUUUÅ¿gÁ¿)r   r�  r,  )r   rH   rC   )rH   r}   rJ   r   ©Úavgrz  r  r|  r¾  r}  ©Úrtype©r)   r   r*   )	rR   rõ  r=  rÖ  Ú
b_expectedÚ
a_expectedr3  rT   rS   rV   rV   rW   Ú*test_inverse_unique_roots_different_rtypesë  s   


ùzGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s’   g d¢}g d¢}g }g d¢}g d¢}g d¢}dD ].}t ||||d�\}}	t||dd	� t|	|ƒ t||||d�\}}	t||dd	� t|	|ƒ qd S )
N©g333333Ã?g9Žã8ŽãÈ¿r/  glÁlÁ¦?©r   r�  r�  r,  )r   r   rH   rC   )r/  gUUUUUUå¿gUUUUUUý?rC   )rH   r  r"  rõ   r   r0  r2  rÿ  rÖ  r4  )
rR   rõ  r=  rÖ  r5  Úb_expected_zr6  r3  rT   rS   rV   rV   rW   Ú,test_inverse_repeated_roots_different_rtypesþ  s   
ùzITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc                 C   s–   g d¢}g d¢}g }t jtdd�� t|||dd� W d   ƒ n1 s$w   Y  t jtdd�� t|||dd� W d   ƒ d S 1 sDw   Y  d S )Nr8  r9  z`rtype` must be one ofr  r{  r2  )r
  r   r�   r)   r*   r  rV   rV   rW   Útest_inverse_bad_rtype  s   ÿ"ÿz3TestPartialFractionExpansion.test_inverse_bad_rtypec                 C   s@   dg}dg}dg}t |||ƒ\}}t|dgƒ t|ddgƒ d S )NrH   rI   r   r  g       À)r*   r   )rR   rõ  r=  rÖ  rT   rS   rV   rV   rW   Ú test_invresz_one_coefficient_bug  s   z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc                 C   ó
  t dgdgg ƒ\}}t|dgƒ t|ddgƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgdd	gg d
¢ƒ\}}t|g d¢ƒ t|g d¢ƒ t g d¢g d¢g ƒ\}}t|g d¢ƒ t|g d¢ƒ t ddgddgddgƒ\}}t|g d¢ƒ t|g d¢ƒ d S )NrH   rŒ   ©r  rI   ù      à?      À©rH   rØ   rc   ©y      @      Ày      !À      Ð?y      @      
@©rH   y       À      ø¿y      à?       @y      à?      à¿r¶  r  rŠ  rG   )rH   ù      ð¿      ð¿ù      ð?       Àr@  rJ   ©rH   ù      À      ð¿rD   ©rŒ   rI   r‹   rµ  rD   r�  ©rŒ   r«   r«   rC   rC   rC   )y      @      ð¿y      <À      0@y      D@      OÀy      Y@      8@y     @rÀ     `k@y      h@     ÀpÀ©rH   y      (À       @y     €J@      4Ày      XÀ      Q@y      ;@      RÀy      [@      KÀy     @TÀ      [@r‹   rI   )rH   r   rÍ  re   r*  )r)   r
   ©rR   rT   rS   rV   rV   rW   Útest_invres!  ó"   ÿz(TestPartialFractionExpansion.test_invresc                 C   r>  )NrH   rŒ   r?  rA  rB  rC  r¶  r  rŠ  rG   )g      @rG  rE  y      ð¿      ÀrO   rF  rH  rI  )rF   y      IÀ      &@y      Y@      RÀy      T@      M@y      vÀ     €l@y     @m@     �rÀrJ  r‹   rI   )r‹   rH   rÎ  rI   r*  )r*   r
   rK  rV   rV   rW   Útest_invresz9  rM  z)TestPartialFractionExpansion.test_invreszc                 C   s\   t dddƒ\}}t|ddgƒ t|ddgƒ tdddƒ\}}t|ddgƒ t|ddgƒ d S )NrH   r   rŒ   rI   )r)   r
   r*   rK  rV   rV   rW   Útest_inverse_scalar_argumentsQ  s   z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)r}   )r¡   r¢   r£   rú  r  r  r
  r  r$  r&  r,  r-  r.  r7  r;  r<  r=  rL  rN  rO  rV   rV   rV   rW   rû  í  s$    DQ		rû  c                   @   rB  )ÚTestVectorstrengthc                 C   s`   t  dg¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr¶  rE  r  re  r   rI   ©rp   r   r+   r	   r?  r
   r½  ©rR   ÚeventsÚperiodÚtarg_strengthÚ
targ_phaseÚstrengthÚphaserV   rV   rW   Útest_single_1dperiod]  s   
z'TestVectorstrength.test_single_1dperiodc                 C   st   t  dg¡}g d¢}dgd }t  g d¢¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr¶  )rH   rI   rE  r  rC   )r¶  r  re  rH   rI   )rp   r   r+   r	   r?  r   r
   r½  rR  rV   rV   rW   Útest_single_2dperiodj  s   

z'TestVectorstrength.test_single_2dperiodc                 C   sb   t  g d¢¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )N©r  r  r  r  r  r  rI   r  rî  r   rQ  rR  rV   rV   rW   Útest_equal_1dperiodw  ó   
z&TestVectorstrength.test_equal_1dperiodc                 C   sv   t  g d¢¡}ddg}dgd }t  ddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nr[  rH   rI   r  r  rî  rQ  rR  rV   rV   rW   Útest_equal_2dperiod„  ó   

z&TestVectorstrength.test_equal_2dperiodc                 C   ób   t  g d¢¡}d}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )N©re  gš™™™™™ñ?gÍÌÌÌÌÌ @gffffff@g333333$@rH   r  re  r   rI   rQ  rR  rV   rV   rW   Útest_spaced_1dperiod‘  r]  z'TestVectorstrength.test_spaced_1dperiodc                 C   sv   t  g d¢¡}ddg}dgd }t  ddg¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nra  rH   r¶  r  rI   re  rÙ  rQ  rR  rV   rV   rW   Útest_spaced_2dperiodž  r_  z'TestVectorstrength.test_spaced_2dperiodc                 C   r`  )N©r  r¶  ç      è?rH   çUUUUUUÕ?r¶  r   rI   rQ  rR  rV   rV   rW   Útest_partial_1dperiod«  r]  z(TestVectorstrength.test_partial_1dperiodc                 C   sv   t  g d¢¡}g d¢}dgd }t  g d¢¡}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ t|dt j | ƒ d S )Nrd  )r  r  r  r  rf  rD   )r¶  r¶  r¶  r¶  rH   rI   rQ  rR  rV   rV   rW   Útest_partial_2dperiod¸  r_  z(TestVectorstrength.test_partial_2dperiodc                 C   sJ   t  g d¢¡}d}d}t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )N©r   r  r¶  re  r  r   ©rp   r   r+   r	   r?  r
   ©rR   rS  rT  rU  rW  rX  rV   rV   rW   Útest_opposite_1dperiodÅ  s   z)TestVectorstrength.test_opposite_1dperiodc                 C   sV   t  g d¢¡}dgd }dgd }t||ƒ\}}t|jdƒ t|jdƒ t||ƒ d S )Nri  r  rJ   r·  rH   rj  rk  rV   rV   rW   Útest_opposite_2dperiodÐ  s   

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t  ddgg¡}d}ttt||ƒ d S )NrH   rI   r  ©rp   r   rœ   r�   r+   ©rR   rS  rT  rV   rV   rW   Útest_2d_events_ValueErrorÛ  s   z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t  dgg¡}ttt||ƒ d S )Nr  rH   rn  ro  rV   rV   rW   Útest_2d_period_ValueErrorà  s   z,TestVectorstrength.test_2d_period_ValueErrorc                 C   ó   d}d}t tt||ƒ d S )Nr  r   ©rœ   r�   r+   ro  rV   rV   rW   Útest_zero_period_ValueErrorå  ó   z.TestVectorstrength.test_zero_period_ValueErrorc                 C   rr  )Nr  rŒ   rs  ro  rV   rV   rW   Útest_negative_period_ValueErrorê  ru  z2TestVectorstrength.test_negative_period_ValueErrorN)r¡   r¢   r£   rY  rZ  r\  r^  rb  rc  rg  rh  rl  rm  rp  rq  rt  rv  rV   rV   rV   rW   rP  [  s    rP  rÚ  c                 C   sF   | j jdkrt | jd ¡j }|  |¡| |¡} }t| |||ƒ dS )z1Wrap assert_allclose while casting object arrays.r  r   N)rê   rë   rp   r   Úflatrì   r   )rê  r¦  rá   râ   rê   rV   rV   rW   Úassert_allclose_castð  s   rx  rC  c                 C   s0  t dƒt dƒt dƒg}t dƒt dƒt dƒg}t dƒt dƒt dƒg}t |¡}|jjdks.J ‚tt |t¡t |t¡| t¡ƒ}| tu rLt|| g|ƒ}nt|||ƒ}t	dd„ |D ƒƒs]J ‚t
| t¡| t¡ƒ | tu rqddg}ntddƒg}tjtdd	�� | |d
diŽ W d   ƒ d S 1 s‘w   Y  d S )NrH   rI   rC   r  c                 s   s   � | ]}t |tƒV  qd S r   )r.  r   )rÎ   rg   rV   rV   rW   rÓ    rÔ  z)test_nonnumeric_dtypes.<locals>.<genexpr>r  zmust be at least 1-Dr  rg   )r   rp   r   rê   rë   r#   rX  rì   r.   r±  r   r-   r
  r   r�   )rC  rg   rT   rS   r¦  rê  rï   rV   rV   rW   Útest_nonnumeric_dtypesø  s"   
"
"ÿry  ÚfdFDc                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
jjdd„ ƒZdS )ÚTestSOSFiltc                 C   s  t  ddd¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}t  g d¢¡ |¡}t||ƒ}ttt||ƒ|ƒ|ƒ t  ddg¡ |¡}t  ddg¡ |¡}t  g d	¢¡ |¡}ttt||ƒ|ƒ|ƒ g d
¢}g d¢}t  d¡}t  ||f¡}d|_	t||ƒ}t
|g d¢ƒ d S )Nr   rE   rF   rH   rŒ   r¶  r  r  r  )rH   rH   r   r]  rŠ   )rH   rF   )rH   rI   rI   rI   rI   rI   rI   rI   )rp   r—  rì   r   r-   r   r.   rO  r½  rl  r   )rR   r•  rg   rT   rS   r  rè  rh   rV   rV   rW   Ú
test_rank1  s"   


zTestSOSFilt.test_rank1c           	      C   sæ   d}t  dt  |¡d t  |¡¡ |¡}| |¡}t  ddg¡ |¡}t  ddg¡ |¡}t jg d¢g d¢g d¢g d¢g|d�}t jg d	¢g d
¢g d¢g d¢g|d�}tt||ƒ|dd�}t||ƒ tt||ƒ|dd�}t||ƒ d S )Nr   r   rH   rŒ   r¶  r!  r"  rü   r&  r'  r(  r)  rµ  )	rp   r—  rþ  rq   rì   r   r.   r-   r   )	rR   r•  rl  rg   rT   rS   r#  r*  rh   rV   rV   rW   Ú
test_rank2.  s"   $
ÿÿÿ
zTestSOSFilt.test_rank2c           	   
   C   s®   d}t  dt  |¡d t  |¡¡ |¡}t  ddg¡ |¡}t  ddg¡ |¡}tt||ƒ|ƒ}t|j	d ƒD ]}t|j	d ƒD ]}t
|||f t|||||f ƒƒ q@q7d S )Nr6  r   rH   rŒ   r¶  )rp   r—  rþ  rq   r   rì   r.   r-   rr   rl  r   r#   )	rR   r•  rl  rg   rT   rS   rh   rs   ÚjrV   rV   rW   rÙ  B  s   $$ÿÿzTestSOSFilt.test_rank3c                 C   s<  t  ddd¡\}}t  ddd¡\}}t  ddd¡\}}t t ||¡|¡}t t ||¡|¡}	t tj||f tj||f tj||f f¡}
tj d¡ |¡}t	||	|d d… t 
d¡d�\}}tj|t	||	|dd … |d�d	 f }t|t	||	|ƒƒ t|
|d d… t 
d
¡d�\}}tj|t|
|dd … |d�d	 f }t||ƒ t|
ƒ}t d|¡}t|
||d�\}}t|t d¡ƒ t||ƒ d|j |_ttt|
||d� | ¡ }|jd	 dd|jd f|_ttt|
||d d …d d …d d …g d¢f d� t|
||d�\}}t|d t d¡ƒ t|d d …d	d	d d …f |ƒ d S )NrI   r  Úlowre  rö   rõ   rF   r  r   r¼   rŠ   r^  rH   rŒ   )r   rH   rH   r\  )r   r&   rp   r   r   Úr_ræ   rÉ  rì   r#   rp  rx  r.   r0   rO  rl  rœ   r�   r©  )rR   r•  Úb1r•  Úb2r–  Úb3r—  rT   rS   rè  rg   Úy_truer  r  rh   r  Úzi_ndrV   rV   rW   Útest_initial_conditionsO  s8   ."& $


ÿ"z#TestSOSFilt.test_initial_conditionsc                 C   s¼  t j d¡jdddd�}| |¡}tjdddd	�}t|Ž }|jd }d
}t	|jƒ}d||< |g| }t  
|¡}t||||d�\}	}
t||d d …d d…d d …f ||d�\}}t||d d …dd …d d …f ||d�\}}t j||f|d�}t||	ddd� t||
ddd� t|ƒ}|d
dd
g|_||d d …dd
…d d …f  }t||||d�d }t|Ž \}}t||ƒ}d
|jd
g|_||d d …dd
…d d …f  }t|||||d�d }t||ddd� d S )NéŸ   r   rE   )rI   r+  rC   rÔ   rF   r	  rê  rR  rH   rI   r/  rµ  rÆ  r‚  rà   )rp   ræ   rç   ræ  rì   r   r&   r(   rl  rå  rp  r.   r½  rx  r0   r'   r$   rÕ   r#   )rR   r•  rg   rê  rè  Ú	nsectionsrŒ  ÚshpÚz0rà  r  rý  r  rô  r  rh   r  rT   rS   Úy_tfrV   rV   rW   Ú test_initial_conditions_3d_axis1u  s4   




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c                 C   s²   t  d|¡}t  d¡}t  d¡}tjtdd�� t|||dd� W d   ƒ n1 s*w   Y  d|d d …d	f< tjtd
d�� t|||dd� W d   ƒ d S 1 sRw   Y  d S )N)rC   r+  rC   )rD   rF   )rD   rC   rC   rI   zshould be all onesr  rH   )r  rŒ  r  rC   zInvalid zi shape)rp   r  rp  r
  r   r�   r.   )rR   r•  rg   rè  r  rV   rV   rW   Útest_bad_zi_shape£  s   

ÿ"ÿzTestSOSFilt.test_bad_zi_shapec                 C   s¼   t jdddd�}t|ƒ}t|t d|¡|d�\}}t||dd� t |d d …d d	…f jd
d�|d d …d	d …f jd
d� ¡}t||dd� t|t d|¡| 	¡ d�\}}t||dd� d S )NrF   rÙ  rè  rR  r$  r  r‚  rÇ  rC   rŒ   rµ  )
r   r&   r0   r.   rp   rO  rx  rþ  r  rç  )rR   r•  rè  r  rh   r  Ússrs  rV   rV   rW   Útest_sosfilt_zi¯  s   >zTestSOSFilt.test_sosfilt_zic                 C   sh   t jg d¢td� dd¡}t jg d¢td�}tjdd�� t||ƒ W d   ƒ d S 1 s-w   Y  d S )N)rH   rI   rC   rH   rE   rC   rü   rH   rF   r¦   r  r  )rp   r  r	  rq   r
  r  r.   )rR   r•  rè  rg   rV   rV   rW   r  ¾  s
   "ÿz"TestSOSFilt.test_dtype_deprecationN)r¡   r¢   r£   r|  r}  rÙ  r†  rŒ  r�  r�  r
  r  r  r  rV   rV   rV   rW   r{    s    &.r{  c                   @   rÜ  )ÚTestDeconvolvec                 C   s6   g d¢}ddg}g d¢}t  ||¡\}}t||ƒ d S )N)r   rH   r   r   rH   rH   r   r   rI   rH   )	r   rI   rH   r   rI   rC   rH   r   r   )r   Ú
deconvolver   )rR   ÚoriginalÚimpulse_responseÚrecordedÚ	recoveredÚ	remainderrV   rV   rW   rX   É  s
   zTestDeconvolve.test_basicc                 C   s\   ddgddgg}ddg}t jtdd�� t ||¡\}}W d   ƒ d S 1 s'w   Y  d S )Nr   zsignal must be 1-D.r  ©r
  r   r�   r   r‘  ©rR   r”  r“  Úquotientr–  rV   rV   rW   Útest_n_dimensional_signalÑ  s
   "ÿz(TestDeconvolve.test_n_dimensional_signalc                 C   s\   ddg}ddgddgg}t jtdd�� t ||¡\}}W d   ƒ d S 1 s'w   Y  d S )Nr   zdivisor must be 1-D.r  r—  r˜  rV   rV   rW   Útest_n_dimensional_divisor×  s
   "ÿz)TestDeconvolve.test_n_dimensional_divisorN)r¡   r¢   r£   rX   rš  r›  rV   rV   rV   rW   r�  Ç  s    r�  c                   @   sx   e Zd Zdd„ Zdd„ Zej dddg¡ej dg d	¢¡d
d„ ƒƒZdd„ Z	ej de
 ddg¡ddgg¡dd„ ƒZdS )ÚTestDetrendc                 C   s*   t tg d¢ƒƒ}tg d¢ƒ}t||ƒ d S )NrG   )r   r   r   )r3   r   r   )rR   Ú	detrendedÚdetrended_exactrV   rV   rW   rX   à  s   zTestDetrend.test_basicc                 C   s2   t g d¢ƒ}t|dd�}t|dd�}t||ƒ d S )N)rH   ç333333ó?r'  gš™™™™™ù?g333333@F)Úoverwrite_dataT)r   r3   r   )rR   rg   Ú
copy_arrayÚinplacerV   rV   rW   Ú	test_copyå  s   zTestDetrend.test_copyrë   ÚlinearrÙ  rŒ  rf  c                 C   s6   t  d¡ ddd¡}t|||d�}|j|jksJ ‚d S )NéÒ   rE   rF   r}   )r  rŒ  )rp   r   rq   r3   rl  )rR   rŒ  rë   rg  r�  rV   rV   rW   rþ  ë  s   zTestDetrend.test_axisc                 C   sž   g d¢g d¢ }t |ddd�}t|ddd� t |¡d d d …d f }t |ddd	d
�}t|ddd� ttƒ� t |ddd� W d   ƒ d S 1 sHw   Y  d S )Nrf  )rE   r   r,  r  r¤  rC   )r  Úbpr   rÿ  rÖ  rH   )r  r¦  rŒ  )r3   r   rp   r  rœ   r�   )rR   rg  r�  rV   rV   rW   Útest_bpò  s   
"ÿzTestDetrend.test_bpr¦  r   rI   c                 C   sB   t j d¡}| d¡}t||d�}t  g d¢¡}t||dd� d S )Ni90  rJ   )r¦  )
g¢3   À¼g¢3   °¼gÿ_ìòêr¼¿g�b	6±Å¿gq üç­]½?g=~¹›D°?g@âzI Ö?gØñòƒÙÕ¢¿gˆ»Ý?Ô…”¿g1ï
ÛàÈ¿rÿ  rÖ  )rp   ræ   rç   rÉ  r3   r   r   )rR   r¦  rð   rg   r!  Úres_scipy_191rV   rV   rW   Útest_detrend_array_bp  s
   
z!TestDetrend.test_detrend_array_bpN)r¡   r¢   r£   rX   r£  r
  r  r`  rþ  r§  rp   r   r©  rV   rV   rV   rW   rœ  Þ  s    rœ  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestUniqueRootsc                 C   ó:   g d¢}t |ƒ\}}t||dd� t|t t|ƒ¡ƒ d S )N)rI  r  r¸  rŸ  r´  r+  rt  ©r4   r
   r	   rp   rO  rð  ©rR   r=  r  r	  rV   rV   rW   Útest_real_no_repeat  ó   z#TestUniqueRoots.test_real_no_repeatc                 C   ó¢   g d¢}t |ddd�\}}t|g d¢dd� t|g d¢ƒ t |dd	d�\}}t|g d
¢dd� t|g d¢ƒ t |ddd�\}}t|g d¢dd� t|g d¢ƒ d S )N)rI  çffffffî¿ç{®Gázì¿çš™™™™™é¿r¶  r  çÍÌÌÌÌÌð?re  r  ©Útolr3  )rI  r²  r¶  r  r+  rt  ©rI   rI   rH   rI   r¾  )r±  r³  r¶  r´  r1  )g333333ï¿g
×£p=
ë¿r¶  gffffffð?©r4   r
   r	   r­  rV   rV   rW   Útest_real_repeat  s   z TestUniqueRoots.test_real_repeatc                 C   r«  )N)rI  r‹   ù      à?      à?rD  rc  r+  rt  r¬  r­  rV   rV   rW   Útest_complex_no_repeat&  r¯  z&TestUniqueRoots.test_complex_no_repeatc                 C   r°  )N)rI  ù      ð¿š™™™™™©?ùffffffî¿333333Ã?ùÍÌÌÌÌÌì¿333333Ã?r·  rº  ùÍÌÌÌÌÌÜ?š™™™™™á?re  r  rµ  )rI  r½  r·  r¿  r+  rt  r·  r¾  )r¼  r¾  r·  rº  r1  )y      ð¿š™™™™™™?yš™™™™™í¿333333Ã?r·  yffffffÞ?ÍÌÌÌÌÌà?r¸  r­  rV   rV   rW   Útest_complex_repeat,  s$   
ÿþþz#TestUniqueRoots.test_complex_repeatc                 C   sb   t  t  t  d¡t  d¡¡¡}g d¢}t|ƒ\}}t  |¡}tt  |¡|dd� t|g d¢ƒ d S )NrE   )y¨ô—›wãé¿^Zu#Ïâ¿y§ô—›wãé¿_Zu#Ïâ?yNé/7ïÆÓ? UDoî¿yPé/7ïÆÓ?ÿTDoî?r}   rt  )rI   rI   rI   rI   )rp   rŠ  r   rO  r4   Úsortr
   r	   )rR   r=  Ú
true_rootsr  r	  rV   rV   rW   Útest_gh_4915A  s   
zTestUniqueRoots.test_gh_4915c                 C   sh   t g d¢ƒ\}}t|ddgdd� t|ddgƒ t g d¢d	d
�\}}t|ddgdd� t|ddgƒ d S )N)r  r‹   r  r  r‹   r+  rt  rI   rH   )rH   g_p‰   ð?ù•Ö&è.>      ð?re  )r¶  rÄ  r¸  r  rV   rV   rW   Útest_complex_roots_extraK  s   z(TestUniqueRoots.test_complex_roots_extrac                 C   sP   t j d¡dt j d¡  }t|dƒ\}}t|t  |¡gdd� t|dgƒ d S )Nr¿   r‹   rI   r+  rt  )rp   ræ   rÉ  r4   r
   r  r	   r­  rV   rV   rW   Útest_single_unique_rootT  s   z'TestUniqueRoots.test_single_unique_rootN)
r¡   r¢   r£   r®  r¹  r»  rÀ  rÃ  rÅ  rÆ  rV   rV   rV   rW   rª    s    
	rª  c                  C   s.   t  tjdtjd�dd¡} | jtjksJ ‚d S )Nrí  rü   rF   rD   )r   r�  rp   r   rÌ   rê   )rê  rV   rV   rW   Útest_gh_22684[  s   rÇ  r   )rÚ  r   )�r�  Úconcurrent.futuresr   r   ru  r   Ú	itertoolsr   Úmathr   r
  r   rœ   Únumpy.testingr	   r
   r   r   r   r   r   r   Únumpyr   r   rp   Úscipyr   r   rV  r   Úscipy.optimizer   r   r   Úscipy.signalr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Úscipy.signal.windowsr7   Úscipy.signal._signaltoolsr8   r9   r:   Úscipy.signal._upfirdnr;   Ú
scipy._libr<   Úscipy._lib._array_apir>   Úscipy._lib._utilr?   r@   rA   rB   r¤   r  ra  rz  ré  rñ  rý  rþ  rÿ  r  r&  rs  rì  r  rí  rú  rý  r}  r€  r  r#  r�  rƒ  r…  r‡  r‰  rŒ  r’  Ú_pmfr”  r`  rk  rl  rm  rn  ro  rÊ   rË   Úparamr$  r—  r¶  rÅ  rÇ  ÚcsinglerÉ  r%  rÈ  rÝ  rá  rå  r  r"  r,  Ú	fail_slowr4  r  r5  r9  rA  rC  r“  r£  r¥  rû  rP  rx  ry  r{  r�  rœ  rª  rÇ  rV   rV   rV   rW   Ú<module>   sì    („hx B  n 	Q  Y   






üz5ÿ_'`
,
 





 5\ 9  p 

 62K