
     h                    B   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlZd d	lmZ d d
lmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZFmGZG d dlHmIZI d dlJmKZK  G d d          ZL G d deL          ZM G d d          ZN G d deN          ZO G d d          ZPd ZQd ZRd ZSd ZT G d  d!          ZU G d" d#          ZV G d$ d%          ZW G d& d'          ZXg d(ZYeYeIz  ZY G d) d*          ZZ G d+ d,          Z[ G d- d.          Z\ G d/ d0          Z] G d1 d2e]          Z^ G d3 d4e]          Z_ G d5 d6e]          Z` G d7 d8e]          Za G d9 d:e]          Zb G d; d<e]          Zc G d= d>e]          Zd G d? d@e]          ZedA ZfdB Zge
jh        i                    dCejj        ejk        ejl        ejm        ejn        eoejp        ejp        ejq        ejr        ejs        eg           G dD dE                      Zt G dF dG          Zue
jh        i                    dHg dI          e
jh        i                    dJdKdLg          e
jh        i                    dMg dN          dO                                     Zve
jh        i                    dCejw        ejx        ejy        g           G dP dQ                      Zz G dR dS          Z{ G dT dU          Z| G dV dW          Z} G dX dYe}          Z~dZ Zdvd[Zd\ Zd] Z G d^ d_          Z G d` da          Z G db dc          Z G dd de          Z G df dg          Zdh ZdwdjZe
jh        i                    dke9e.f          dl             Ze
jh        i                    dCdm           G dn do                      Z G dp dq          Z G dr ds          Z G dt du          ZdS )x    N)ThreadPoolExecutoras_completed)Decimalproduct)gcd)raises)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_assert_array_lesssuppress_warnings)arrayarange)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2dcorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodhilberthilbert2lfilter
lfilter_zifiltfiltbutterzpk2tfzpk2sosinvresinvreszvectorstrengthlfiltictf2sossosfiltsosfiltfilt
sosfilt_zitf2zpkBadCoefficientsdetrendunique_rootsresidueresiduez)hann)_filtfilt_gust_compute_factors_group_poles)_upfirdn_modes)
_testutilsc                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )_TestConvolvec                 t    g d}g d}t          ||          }t          |t          g d                     d S )N)            rB   rA         r@   )r@   
             rJ         r   r   r   selfabcs       _/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/signal/tests/test_signaltools.py
test_basicz_TestConvolve.test_basic'   sH    IIQNN1e$C$C$CDDEEEEE    c                 x    g d}g d}t          ||d          }t          |t          g d                     d S )Nr@   rA   rB   )rE   rF   r@   rA   samemode)rG   rH   "   rM   rN   s       rS   	test_samez_TestConvolve.test_same-   sJ    IILLQ'''1eLLL1122222rU   c                 x    g d}g d}t          ||d          }t          |t          g d                     d S )NrW   rD   rX   rY   )rG   rH   rH   rM   rN   s       rS   test_same_eqz_TestConvolve.test_same_eq3   sJ    IIIIQ'''1eLLL1122222rU   c                     t          g d          }t          ddg          }t          ||          }t          |t          g d                     d S )N)      ?      ?       @      ?      @      ?r`   ra   )               @y       @      @y      @       @y      @      @)r   r   r   )rO   xyzs       rS   test_complexz_TestConvolve.test_complex9   sZ    ***++66"##QNN1e$@$@$@AABBBBBrU   c                 T    d}d}t          ||          }t          |||z             d S )Ni	  i  )r   r
   rN   s       rS   test_zero_rankz_TestConvolve.test_zero_rank?   s3    QNNQArU   c                 n   t          j        d                              ddd          }t          j        d          }t          d          D ]g}dgdz  }d||<   t	          ||                    |          d          }t	          ||                    |          d          }t          ||           hd S )N   r@   rE   directmethodr   )npr   reshaperanger   r   )rO   rP   rQ   ib_shaperd   re   s          rS   test_broadcastablez _TestConvolve.test_broadcastableE   s    IbMM!!!Q**IaLLq 	" 	"Ac!eGGAJAIIg..x@@@AAIIg..u===AAq!!!!	" 	"rU   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S Nig  iP  )r   r   r
   rN   s       rS   test_single_elementz!_TestConvolve.test_single_elementO   sC    4&MM4&MMQNNQArU   c                     g dg dg}g dg dg}t          ||          }t          g dg dg dg          }t          ||           d S NrD   rW   rF   r@   rA   rA   rB   rC   )rF            rL   )rG      >   :   &   )rL      r   1   r   r   r   r   rO   rP   rQ   rR   ds        rS   test_2d_arraysz_TestConvolve.test_2d_arraysU   sz    YY			"YY			"QNN%%%'''''') * * 	1a     rU   c           
      n   t          d                              ddd          }dt          d                              ddd          z  }|t          d          d d d                             ddd          z  }t          g dg dg d	g d
gg dg dg dg dgg dg dg dg dgg dg dg dg dgg          }t          t	          ||d          |           t          t	          ||d          |           t          t	          ||d          |ddddddf                    t          t	          ||d          |ddddddf                    t          t	          ||d          |ddddddf                    t          t	          ||d          |ddddddf                    d S )N   rF                 ?rk   r@   )                y      :@        y      9@      ?y      8@       @)y      J@        y     b@      @y      b@      &@y     @W@      &@)y      G@      @y     `@      7@y     _@      =@y     @T@      7@)y      D@      (@y     X@      @@y     @W@     B@y      K@      8@)y      Z@        y     n@      *@y     m@      7@y     `@      5@)y     q@      >@y     @      X@y     @      _@y     t@     U@)y     n@     P@y      @     f@y     @@      j@y     q@     `@)y     a@     P@y     0s@      d@y     r@     `f@y      c@     Z@)y      Q@      B@y     c@     Y@y     `b@     @\@y     @T@     R@)y     e@     @a@y     w@     u@y      v@     w@y     @g@     l@)y     @a@     e@y     r@      {@y     p@     |@y     @a@     `q@)y     Q@     @a@y      b@     0t@y     _@     Pu@y     O@     h@)y      @@      R@y      Q@     d@y     M@     e@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     L@     o@)y      C@     k@y     @R@     0@y     I@     H@y      5@     0r@)y      (@      b@y      4@     s@y      @     t@y             f@fullrX   rE   r   valid)r   rp   r   r   r   )rO   smallbig	out_arrays       rS   test_input_swappingz!_TestConvolve.test_input_swapping^   sX   q		!!!Q**6"::%%aA...vbzz$$B$''1a0001116667776668
 :99;;;======?
 ;::>>>>>><<<>
 :99<<<:::888:;< <	* 	8E377CCC8C77CCC8E377$QqS!A#qs]3	5 	5 	58C77$QqS!A#qs]3	5 	5 	58E388$QqS!A#qs]3	5 	5 	58C88$QqS!A#qs]3	5 	5 	5 	5 	5rU   c                 J   g d}g d}t          t          t          ||d           t          t          t          ||dd           t          t          t          ||dd	           t          t          t          ||d
d           t          t          t          ||dd           d S NrW   rD   spamrY   eggsr   rZ   rn   hamrl   r   baconrX   assert_raises
ValueErrorr   rO   rP   rQ   s      rS   test_invalid_paramsz!_TestConvolve.test_invalid_params   s    IIIIj(Aqv>>>>j(AqveLLLLj(AquXNNNNj(AqvgNNNNj(AqvgNNNNNNrU   N)__name__
__module____qualname__rT   r\   r^   rg   ri   rt   rw   r   r   r    rU   rS   r>   r>   %   s        F F F3 3 33 3 3C C C  " " "  ! ! !#5 #5 #5JO O O O OrU   r>   c                   4    e Zd Zd Zd Zd Zd	dZd Zd ZdS )
TestConvolvec                 >   g d}g d}g d}t          ||d          }t          ||           t          ||d          }t          ||           g d}ddg}ddg}t          ||d          }t          ||           t          ||d          }t          ||           d S )	N)rE   rF   r@   rC   rB   r@   )	rF   r@   rA   rB   r@   rA   rF   rF   rE   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $)r   r   rO   rP   rQ   expectedouts        rS   test_valid_mode2zTestConvolve.test_valid_mode2   s    '''###q!W%%3)))q!W%%3)))$$$VG$q!W%%3)))q!W%%3)))))rU   c                 z    g d}g d}t          ||d          }t          g d          }t          ||           d S )N)rE   rF   r@   r@   rE   rF   )rE   rA   r@   rA   rB   rC   r|   rA   r@   rF   rE   rE   r@   rX   )9   =   ?   r   -   $   r   r   s        rS   test_same_modezTestConvolve.test_same_mode   sS    333Q6""***++1a     rU   c                 "   t          j        dd                              d          }t          j        dd                              d          }t          t          t
          g||fR i ddi t          t          t
          g||fR i ddi d S 	NrE   r|   rF   r@   r   r@   rF   rZ   r   )ro   r   rp   r   r   r   r   s      rS   test_invalid_shapesz TestConvolve.test_invalid_shapes   s     IaOO##F++Ib!$$V,,j(IaVIII7HIIIj(IaVIII7HIIIIIrU   d   c                 ,  	
 t          d t          j                                        D             g           
d 
D             
dD ]}|
v r
                    |           
fd
D             }t          j                            d           t          j                            ddg|          t          j                            |          d	}|d
         x|d<   |d<   |d         d|d         z  z   |d<   |D ]\  }}	|t          j	        |          j
                                     |          |t          j	        |          j
                                     |          	fddD             }t          |d         j	        |d         j	                   d|v r#d|v rt          t                    d           t          d ||fD                       rddd}nd||fv rddd}nddd}t          |d         |d         fi | d S )Nc                     g | ]\  }}|S r   r   ).0_ts      rS   
<listcomp>z5TestConvolve.test_convolve_method.<locals>.<listcomp>   s    66641aQ666rU   c                 @    h | ]}t          j        |          j        S r   )ro   dtypenamer   r   s     rS   	<setcomp>z4TestConvolve.test_convolve_method.<locals>.<setcomp>   s#    111a!!111rU   )

complex256
complex192float128float96strvoidbytesobjectunicodestringc                 .    g | ]}D ]}d D ]}|||fS ))r   r   rX   r   )r   t1t2rZ   typess       rS   r   z5TestConvolve.test_convolve_method.<locals>.<listcomp>   sb     F F F2 F F2+DF F#' R F F F F FrU   *   r   rE   size)rr   frr   rQ   ur                 ?rR   c           	      8    i | ]}|t          |           S ))rn   rZ   )r   )r   keyrZ   x1x2s     rS   
<dictcomp>z5TestConvolve.test_convolve_method.<locals>.<dictcomp>   s<     5 5 5 HRCdCCC 5 5 5rU   )r   rl   r   rl   boolc                     g | ]}|d v S )>   float32	complex64r   r   s     rS   r   z5TestConvolve.test_convolve_method.<locals>.<listcomp>   s    DDDaA11DDDrU   -C6?gư>rtolatolfloat16MbP?h㈵>:0yE>)sumro   sctypesitemsremoverandomseedchoicerandnr   kindastyper
   r    anyr   )rO   nr   argsarray_typesr   r   resultskwargsrZ   r   r   r   s            @@@@rS   test_convolve_methodz!TestConvolve.test_convolve_method   s   662:#3#3#5#5666;;115111M 	$ 	$E~~U###F F F F F F F
 		rI,,aV!,<<IOOA..0 0.9#.>>C;s+&s+d;s3C.CCC  	I 	ILBDRXb\\./66r::BRXb\\./66r::B5 5 5 5 5 5"35 5 5G -wx/@/FGGG||"/B77BBB DDB8DDDEE 6"($77r2h&&"&55 #'55GENGH,=HHHHHH1	I 	IrU   c                 $   dD ]}t          j        d|z  gt           j                  }t          ||d          }t          ||d          }|dk     r<t	          ||           t	          |dd|z  z             t	          |dd|z  z             d S )N)	rG      2   3   4   5   6   <   r   rF   r   r   rm   rl   r  )ro   r   int64r   r
   )rO   r   rf   r   rl   s        rS    test_convolve_method_large_inputz-TestConvolve.test_convolve_method_large_input   s     6 
	/ 
	/A!Q$rx000A1a...Ca8444F 2vvS&)))S!ac(+++VQ1X...
	/ 
	/rU   c                 v   t          t          t          dgdd           t          t          t          ddgd           t          t          t          dgdd           t          t          t          ddgd           t          t          t          dgdgg           t          t          t          dgd           d S NrE   rF   rl   rm   r   r@   r   rO   s    rS   test_mismatched_dimsz!TestConvolve.test_mismatched_dims   s    j(QC8DDDDj(As8DDDDj(QC5AAAAj(As5AAAAj(QC1#777j(QC33333rU   N)r   )	r   r   r   r   r   r   r   r  r  r   rU   rS   r   r      s{        * * *,! ! !
J 
J 
J.I .I .I .I`/ / /4 4 4 4 4rU   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	eeg          ej                            d
dg dgfdg dgfg          d                         Zd Zd Zd ZdS )_TestConvolve2dc                     g dg dg}g dg dg}t          g dg dg dg          }t          ||          }t          ||           d S ry   r   r   r   )rO   rP   rQ   r   es        rS   r   z_TestConvolve2d.test_2d_arrays  s|    YY			"YY			"%%%'''''') * * q!1a     rU   c                     g dg dg}g dg dg}t          g dg          }t          ||d          }t          ||           t          ||d          }t          ||           d S )NrF   r@   rA   rB   rC   r|   r   rA   rB   rC   r|   r   	   rG   rD   rW   r   P   b   t      r   r  rO   r  r   hgs        rS   test_valid_modez_TestConvolve2d.test_valid_mode  s    """$:$:$:;YY			")))*++q!W%%1a    q!W%%1a     rU   c                    g dg dg}t          j        g dg dgt                    dz   }t          g dg          }t          ||d          }t	          ||           t          ||d          }t          ||           d S )	Nr  r  rD   rW   r	  r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )ro   r   complexr   r   r   r  s        rS   test_valid_mode_complxz&_TestConvolve2d.test_valid_mode_complx  s    """$:$:$:;Hiii+7;;;b@GGGHIIq!W%%!!Q''' q!W%%1a     rU   c                     g dg dg}g dg dg}d}t          ||dd|          }t          g dg d	g d
g          }t          ||           d S )NrD   rW   rz   r{   rE   r   fill)      r   r[   rJ   )rI   (   r   @   r  )rJ   .   C   r   0   r   r   r   )rO   rP   rQ   fillvalrR   r   s         rS   test_fillvaluez_TestConvolve2d.test_fillvalue$  s    YY			"YY			"q!VVW55''''''''') * * 	1a     rU   c                    d}t           j                                        5 }|                    t           j        d           t          t          |          5  t          dggddggd           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d}t          t          |          5  t          dggddggddg           d d d            d S # 1 swxY w Y   d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesmatchrE   rF   r   	fillvaluez,`fillvalue` must be scalar or an array with )ro   testingr   filterComplexWarningr   r   r   )rO   msgsups      rS   test_fillvalue_errorsz%_TestConvolve2d.test_fillvalue_errors.  s   BZ))++ 	:sJJr(*BCCCz555 : :QC5Aq6(b9999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 =:S111 	: 	:u1vh1a&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sG   7BA<0B<B 	 BB 	BBB6CC!$C!c                 L    t          t          t          dggddggg            d S )NrE   rF   r4  r   r   r   r  s    rS   test_fillvalue_emptyz$_TestConvolve2d.test_fillvalue_empty9  s8    j*seq!fX "	$ 	$ 	$ 	$ 	$ 	$rU   c                     g dg dg}g dg dg}t          ||dd          }t          g dg dg dg          }t          ||           d S )	NrD   rW   rz   r{   r   wrap)r  r  J   r  r  )D   rB  r   rB  rB  r.  r   s        rS   test_wrap_boundaryz"_TestConvolve2d.test_wrap_boundary>  s    YY			"YY			"q!VV,,''''''''') * * 	1a     rU   c                     g dg dg}g dg dg}t          ||dd          }t          g dg dg d	g          }t          ||           d S )
NrD   rW   rz   r{   r   symm)r[   r   ,   r   B   )r  r-  r   r  T   )R   r   \   n   r   r.  r   s        rS   test_sym_boundaryz!_TestConvolve2d.test_sym_boundaryG  s    YY			"YY			"q!VV,,'''''')))+ , , 	1a     rU   funczboundary, expectedrE  )g     B@      E@      F@g     F@r@  )     E@rP  rO       C@c                     t          j        g dg          }t          j        d          } |||d|          }t          ||           d S )N)       @            @      @)rE      rX   rZ   boundary)ro   r   onesr   )rO   rN  rZ  r   imagekernelresults          rS   test_same_with_boundaryz'_TestConvolve2d.test_same_with_boundaryP  s\     ///011!!eV&8DDD 	68,,,,,rU   c           	      F   dd l m} t          j        ddt                                        dd          }t          j        ddt                                        dd          }t          ||dd	
          }t          ||                    ||d	d                     d S )Nr   rE   r   r	  rG   r@   e   rX   r@  rY  )r   r   )rZ   origin)	scipy.ndimagendimagero   r   floatrp   r   r   r   )rO   ndirP   rQ   rR   s        rS   test_boundary_extension_samez,_TestConvolve2d.test_boundary_extension_samea  s     	$#####Iau---55b!<<Ia...66r2>>q!&6:::1cll1afXlNNOOOOOrU   c                    dd l m} t          j        ddt                                        dd          }t          j        ddt                                        dd          }t          ||dd	
          }t          j        |dd	          }t          ||	                    ||d	          d dd df                    d S )Nr   rE   rG   r	  r@   %   rC   r   r@  rY  )r@   r@   rj  rY   r   )
rc  rd  ro   r   re  rp   r   padr   r   )rO   rf  rP   rQ   rR   apads         rS   test_boundary_extension_fullz,_TestConvolve2d.test_boundary_extension_fullk  s     	$#####Iae,,,44Q::Iae,,,44Q::q!&6:::va)6221cll4l@@"crcJKKKKKrU   c                 "   t          j        dd                              d          }t          j        dd                              d          }t          t          t
          g||fR i ddi t          t          t
          g||fR i ddi d S r   )ro   r   rp   r   r   r   r   s      rS   r   z#_TestConvolve2d.test_invalid_shapesv  s     IaOO##F++Ib!$$V,,j*K1vKKK&'9JKKKj*K1vKKK&'9JKKKKKrU   N)r   r   r   r   r!  r$  r0  r;  r>  rC  rM  pytestmarkparametrizer   r   r_  rg  rm  r   r   rU   rS   r  r    sH       ! ! !
! 
! 
!
! 
! 
!! ! !	: 	: 	:$ $ $
! ! !! ! ! [Vj+%>??[1%(@(@(@'AB%(@(@(@'ABDE E- -E E @?-P P P	L 	L 	L
L 
L 
L 
L 
LrU   r  c                       e Zd Zd Zd Zd Zd Zej        j	        ej        
                    d          d                         ZdS )TestConvolve2dc                     g dg dg}g dg dg}t          ||d          }t          g dg dg          }t          ||           d S )NrD   rW   r  r  rX   )rH   rI   r[   )r  r  r  r.  )rO   r  r   r   r  s        rS   r   zTestConvolve2d.test_same_mode  ss    YY			""""$:$:$:;q!V$$<<< ==" # #1a     rU   c                 b   g dg dg}g dg dg}g dg}t          ||d          }t          ||           t          ||d          }t          ||           ddgd	d
gg}g dg dg}ddgg}t          ||d          }t          ||           t          ||d          }t          ||           d S )NrD   rW   r  r  r  r   r`   r   rb         @        )r         @       @rv  )rv  y      @      ?y      @      y      ;@      y      G@       @)r   r   )rO   r  r   r   r   s        rS   r   zTestConvolve2d.test_valid_mode2  s    YY			""""$:$:$:;***+Aw''3)))Aw''3)))f/0%%%'?'?'?@h'(Aw''3))) Aw''3)))))rU   c           
      t   t          j        d          }t          j        g d          }dD ]}t          t          j        |||          t          j        |||                     t          t          j        t          j        |g|g|                    t          j        |||                     d S )NrB   g	@gffffff?r@   r   r   rX   rY   )ro   r   r   r   r   r   squeezer   rO   rP   rQ   rZ   s       rS   test_consistency_convolve_funcsz.TestConvolve2d.test_consistency_convolve_funcs  s    IaLLH]]]##- 	2 	2DAqt < < < &14 @ @ @B B B
!1#s666!8 !8140002 2 2 2	2 	2rU   c                     t          t          t          dd           t          t          t          dgdg           t          t          t          dgggdggg           d S )Nr@   rA   r=  r  s    rS   test_invalid_dimsz TestConvolve2d.test_invalid_dims  sT    j*a333j*qcA3777j*ug!w?????rU   z!Can't create large array for testc                    ddt          j                    j        z  z  }t          j        d|z  dz  t          j                    j        z  dz             t          j        d|z  t           j                  }d|d d d<   t           j        j                            ||dfd	          }t          j
        |ddgg          }t          j        |dk              }|d
         j        d
k    sJ d S )Nl          rF     g    .Ar	  rE   )iH  r   )shapestridesr   )ro   r
  itemsizer<   check_free_memoryzeroslibstride_tricks
as_stridedr   r   wherer   )rO   r   rP   countfailss        rS   test_large_arrayzTestConvolve2d.test_large_array  s     dRXZZ001$QUT\BHJJ4G%G#%MNNN HTAXRX...##A#F ++AaY	+RR!!q!fX..##Qx}!!!!!!rU   N)r   r   r   r   r   r}  r  ro  rp  slowxfail_on_32bitr  r   rU   rS   rs  rs    s        ! ! !* * *.	2 	2 	2@ @ @
 [[ CDD" " ED " " "rU   rs  c                      e Zd Zej                            dddddgddgg          d             Zej                            dddgddgg          d             Zej                            dddddgddgg          d	             Zej                            dddgddgg          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             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             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             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             Zej                            dddddgddgg          d             Zej                            ddddgdgg          d             Zej                            dddddgddgg          d             Zej                            dddgg          d             Zej                            dddddgddgg          d             Zej                            dddgddgg          d             Zd Zd Zd Zd Zej                            dddddgddgg          d             Zej                            dddgddgg          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             Zej        j        ej                            d  e edd!                     e ed"d#                    z   ej                             d$          !                    d%d&d'          "                                z             d(                         Z#d) Z$dS )*TestFFTConvolveaxes Nr   r   c                     t          g d          }t          g d          }|dk    rt          ||          }nt          |||          }t          ||           d S )NrD   rE   rA   rG   rL         "@r  r  r   r   r   rO   r  rP   r   r   s        rS   	test_realzTestFFTConvolve.test_real  sk    )))+++,,2::a##CCa...C!#x00000rU   rE   c                     t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          |||          }t	          ||           d S )NrD   r  rF   rE   r  r   ro   tiler   r   r  s        rS   test_real_axeszTestFFTConvolve.test_real_axes  s{    )))+++,,GA1v78aV,,!QT***!#x00000rU   c                     t          g d          }t          g d          }|dk    rt          ||          }nt          |||          }t          ||           d S )Nr`          @       @y      @      @rc   y               @y              4@y              8@y              2@r  r  r  r  s        rS   rg   zTestFFTConvolve.test_complex  sn    ***++DDDEE2::a##CCa...C!#x00000rU   c                     t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          |||          }t	          ||           d S )Nr  r  rF   rE   r  r  r  s        rS   test_complex_axesz!TestFFTConvolve.test_complex_axes  s~    ***++DDDEEGA1v78aV,,!QT***!#x00000rU   c                     t          g dg dg          }t          g dg dg dg          }|dk    rt          ||          }nt          |||          }t          ||           d S )NrD   r{   rE   rA   rG   rL   r  r   r(  8   r  r   r}   r)  r   r  r   r  r  r  r  s        rS   test_2d_real_samez!TestFFTConvolve.test_2d_real_same  s     99999  +++---...0 1 1 2::a##CCa...C!#x00000rU   rF   c                     t          g dg dg          }t          g dg dg dg          }t          j        |g d          }t          j        |g d          }t          |||          }t	          ||           d S )NrD   r{   r  r  r  rF   rE   rE   r  r  r  s        rS   test_2d_real_same_axesz&TestFFTConvolve.test_2d_real_same_axes  s     99999  +++---...0 1 1 GAyyy!!78YYY//!QT***!#x00000rU   c                     t          g dg dg          }t          g dg dg dg          }|dk    rt          ||          }nt          |||          }t          ||           d S )N      ?       @      @      @y      @      @ra   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  s        rS   test_2d_complex_samez$TestFFTConvolve.test_2d_complex_same   s     ++++++- . .AAA(((<<<   2::a##CCa...C!#x00000rU   c                     t          g dg dg          }t          g dg dg dg          }t          j        |g d          }t          j        |g d          }t          |||          }t	          ||           d S )Nr  r  r  r  r  r  r  r  r  s        rS   test_2d_complex_same_axesz)TestFFTConvolve.test_2d_complex_same_axes:  s     ++++++- . .AAA(((<<<   GAyyy!!78YYY//!QT***!#x00000rU   c                 z   t          g d          }t          g d          }t          g d          }t          g d          }|dk    rt          ||d          }nt          ||d|          }t          ||           |dk    rt          ||d          }nt          ||d|          }t          ||           d S )NrD   	r@   r@   rB   rC   r   r|   r  r   rE        A@     D@     G@	r  g      4@      9@r  r  r  rR  g      <@rT  r  rX   r  r  rO   r  rP   rQ   
expected_1
expected_2r   s          rS   test_real_same_modez#TestFFTConvolve.test_real_same_modeQ  s    )))---..???++
FFFGG
2::aF++CCaF666C!#z2222::aF++CCaF666C!#z22222rU   c                    t          g d          }t          g d          }t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          ||d|          }t	          ||           t          ||d|          }t	          ||           d S )	NrD   r  r  r  rF   rE   rX   r  r  r  s          rS   test_real_same_mode_axesz(TestFFTConvolve.test_real_same_mode_axesd  s    )))---..???++
FFFGG
GA1vGA1vWZ!Q00
WZ!Q00
!QT222!#z222!QT222!#z22222rU   c                 X   t          g d          }t          g d          }t          g d          }|dk    rt          ||d          }nt          ||d|          }t          ||           |dk    rt          ||d          }nt          ||d|          }t          ||           d S )Nr@   rF   rE   r  g      8@g      ?@r  rQ  g     H@r        (@r  r   r  r  rO   r  rP   rQ   r   r   s         rS   test_valid_mode_realz$TestFFTConvolve.test_valid_mode_realv  s     )))---..<<<==2::aG,,CCaG$777C!#x0002::aG,,CCaG$777C!#x00000rU   c                 <   t          g d          }t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          ||d|          }t	          ||           d S Nr  r  r  rF   rE   r   r  r  r  s         rS   test_valid_mode_real_axesz)TestFFTConvolve.test_valid_mode_real_axes  s     )))---..<<<==GA1vGA1v78aV,,!Qd333!#x00000rU   c                 X   t          g d          }t          g d          }t          g d          }|dk    rt          ||d          }nt          ||d|          }t          ||           |dk    rt          ||d          }nt          ||d|          }t          ||           d S )N      @      y       @      @r   rw  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r  r   r  r  r  s         rS   test_valid_mode_complexz'TestFFTConvolve.test_valid_mode_complex  s    ***++:::;;<<<==2::aG,,CCaG$777C!#x0002::aG,,CCaG$777C!#x00000rU   c                    t          g d          }t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          ||d|          }t	          ||           t          ||d|          }t	          ||           d S )Nr  r  r  rF   rE   r   r  r  r  s         rS   test_valid_mode_complex_axesz,TestFFTConvolve.test_valid_mode_complex_axes  s    ***++:::;;<<<==GA1vGA1v78aV,,!Qd333!#x000!Qd333!#x00000rU   c                 <   t          g d          }t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          ||dd          }t	          ||           d S r  r  r   s        rS   test_valid_mode_ignore_nonaxesz.TestFFTConvolve.test_valid_mode_ignore_nonaxes  s    )))---..<<<==GA1vGA1v78aV,,!Qa000!#x00000rU   c                     t          t          g g           j        dk               t          t          ddgg           j        dk               t          t          g dg          j        dk               d S Nr   rB   rC   r|   )r   r   r   r  s    rS   
test_emptyzTestFFTConvolve.test_empty  sn    B##(A-...QFB'',1222B$$)Q./////rU   c                     t          d          }t          d          }t          ||          }t          |||z             d S rv   r   r   r
   rO   rP   rQ   r   s       rS   ri   zTestFFTConvolve.test_zero_rank  sA    $KK$KK!QS!a%     rU   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S rv   r  r  s       rS   rw   z#TestFFTConvolve.test_single_element  sE    4&MM4&MM!QS!a%     rU   c                    t           j                            d           t           j                            d          dt           j                            d          z  z   }t           j                            d          dt           j                            d          z  z   }t          j        ||d          }|dk    rt          ||d          }nt          ||d|          }t          t          j        ||d	                     d S )
N    r   )  r   r  r  绽|=r   )ro   r   r   randr   r   r   allcloser  s         rS   test_random_dataz TestFFTConvolve.test_random_data  s    
	tINN4  2	t(<(<#<<INN4  2	t(<(<#<<;q!V,,2::aF++CCaF666CC66677777rU   c                 p   t           j                            d           t           j                            d          dt           j                            d          z  z   }t           j                            d          dt           j                            d          z  z   }t          j        ||d          }t          j        |ddg          }t          j        |ddg          }t          j        |ddg          }t          ||d|          }t          t          j        ||d	
                     d S )Nr  r  r   r  r   rF   rE   r  r  r  )	ro   r   r   r  r   r  r   r   r  r  s         rS   test_random_data_axesz%TestFFTConvolve.test_random_data_axes  s    
	tINN4  2	t(<(<#<<INN4  2	t(<(<#<<;q!V,,GA1vGA1v78aV,,!QT222C66677777rU   rA   c                 P   d\  }}t           j                            d           t          j        j        | dt          j        j        | z  z   }t          j        j        | dt          j        j        | z  z   }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          j        |                    dd          dd          }t          j        |                    dd          dd          }t          j        |                    dd          dd          }t          j        |g d	          }t          j        |g d
          }t          j        |g d          }t          ||d|          }t          ||dd           d S )N)){   rH   )      r  r   r   r   rF   rE   rA   )rF   rE   r@   rE   rE   )rF   rE   rE   rA   rE   )rF   rE   r@   rA   rE   r  r  r   )
ro   r   r   r  r   moveaxisswapaxesr  r   r   )rO   r  a_shapers   rP   rQ   r   r   s           rS   test_random_data_multidim_axesz.TestFFTConvolve.test_random_data_multidim_axes  s    0
	tING$rBING,D'DDING$rBING,D'DDaF++aaaD$$%aaaD$$%AAAqqq$d23K

1a((!Q//K

1a((!Q//;x00A661== GA''GA''78___55!QT222XE>>>>>>rU   r   r   r  i  r  r  '  rB   c                    t           j                            |          dt           j                            |          z  z   }t           j                            |          dt           j                            |          z  z   }t          j        ||d          }t	          ||d          }t          ||d           t	          ||ddg          }t          ||d           d S )Nr   r   r  r   r   r  )ro   r   r  r   r   r   )rO   r   rP   rQ   r   r   s         rS   test_many_sizeszTestFFTConvolve.test_many_sizes  s     INN1RY^^A%6%6 66INN1RY^^A%6%6 66;q!V,,!Q''XE2222!QaS111XE222222rU   c                 r   d}t           j                            d          }|                    |          }t           j        t           j        fD ]g}||d<   t          j        dd          }t          j	        t          d          5  t          j        ||dd	
           d d d            n# 1 swxY w Y   hd S )Nr  l   [<zn( r      皙?zUse of fft convolutionr2  rX   r   r   )ro   r   default_rngstandard_normalnaninfr   firwinro  warnsRuntimeWarningr   )rO   r   rngsig_nanvalcoeffss         rS   test_fft_nanzTestFFTConvolve.test_fft_nan#  s   i##K00%%a((FBF# 	L 	LCGCL]3,,Fn4LMMM L LfUKKKKL L L L L L L L L L L L L L L		L 	Ls   B++B/	2B/	)%r   r   r   ro  rp  rq  r  r  rg   r  r  r  r  r  r  r  r  r  r  r  r  r  ri   rw   r  r  r  r  listrq   ro   r   RandomStaterandinttolistr  r	  r   rU   rS   r  r    s"       [Vb$A3RD%ABB	1 	1 CB	1 [Va!b2$%7881 1 981 [Vb$A3RD%ABB1 1 CB1 [Va!b2$%7881 1 981 [Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	1 	11 1	1 	11 [Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1 11 11 11 [Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	1 	11 1	1 	11  [Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1 11 11 11 [Vb$A3RD%ABB3 3 CB3$ [VaaS2$%7883 3 983" [Vb$A3RD%ABB1 1 CB1$ [Va!X..1 1 /.1 [Vb$A3RD%ABB1 1 CB1" [Va!b2$%7881 1 9811 1 10 0 0! ! !! ! ! [Vb$A3RD%ABB
8 
8 CB
8 [Va!b2$%7888 8 988 [Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1 1? ?1 1?. [[UU1c]]UU4	 
	d##++D%;;BBDD	EF F
	3 	3F F 	3
L 
L 
L 
L 
LrU   r  c                       t          d          )NzFell back to fftconvolve)RuntimeError)r   r   s     rS   fftconvolve_errr  /  s    
1
2
22rU   c                 8    d t          | d          D             S )Nc                 H    g | ]\  }}t          ||z
            d k    ||f S )r@   )absr   rP   rQ   s      rS   r   z!gen_oa_shapes.<locals>.<listcomp>4  s:       tq!1q5zzA~~ F~~rU   rF   repeatr   sizess    rS   gen_oa_shapesr  3  s/     wuQ777    rU   c                     t          |           }t          |           }d t          ||          D             }g d}d t          ||          D             S )Nc                     g | ]
\  }}||z   S r   r   )r   ishapes0ishapes1s      rS   r   z$gen_oa_shapes_2d.<locals>.<listcomp>;  s.     % % %$6Hhhx % % %rU   rz  c                     g | ]Y\  }}|d k    sH|d         |d         k    r|d         |d         k    s$|d         |d         k     A|d         |d         k     S||fz   ZS )r   r   rE   rF   r@   r   )r   ishapesimodes      rS   r   z$gen_oa_shapes_2d.<locals>.<listcomp>?  s     C C C%QZ'!*$$gaj)@)@QZ'!*$$gaj)@)@ UH *A)@)@rU   )r  zipr   )r  shapes0shapes1shapesmodess        rS   gen_oa_shapes_2dr&  8  s    E""GE""G% %'7##% % %F &%%EC C7653I3I C C C CrU   c                 8    d t          | d          D             S )Nc                 (    g | ]\  }}||k    ||fS r   r   r  s      rS   r   z$gen_oa_shapes_eq.<locals>.<listcomp>F  s0       tq!Avv FvvrU   rF   r  r   r  s    rS   gen_oa_shapes_eqr)  E  s/     wuQ777    rU   c                      e Zd Zej                                        ej                            d e e e	d                     e e	ddd                    z                       d                         Z
ej                            d eg d                    ej                            ddd	g          ej                            d
g 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                                                                         Zej                            d eg d                    ej                            ddd	g          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                                                             Zd Zd Zd ZdS )TestOAConvolvezshape_a_0, shape_b_0r   r  rK   c                     t           j                            |          }t           j                            |          }t          ||          }t	          ||          }t          ||           d S N)ro   r   r  r   r   r   )rO   	shape_a_0	shape_b_0rP   rQ   r   r   s          rS   test_real_manylensz!TestOAConvolve.test_real_manylensK  s^     INN9%%INN9%%q!$$A!#x00000rU   )r  /   rC   rA   rE   
is_complexTFrZ   rz  c                    t           j                            |          }t           j                            |          }|rJ|dt           j                            |          z  z   }|dt           j                            |          z  z   }t          |||          }|                    t
          j        dt                     t          |||          }	t          |	|           d S Nr   rY   r   
ro   r   r  r   setattrr   _signaltoolsr  r   r   )
rO   r.  r/  r2  rZ   monkeypatchrP   rQ   r   r   s
             rS   test_1d_noaxeszTestOAConvolve.test_1d_noaxesY  s     INN9%%INN9%% 	1Bry~~i0000ABry~~i0000Aq!$///F/+	- 	- 	-AD)))!#x00000rU   r  r   rE   )r  r1  rC   rA   shape_a_extrar@   shape_b_extrac	                    |gdz  }	|gdz  }
||	|<   ||
|<   t          j        j        |	 }t          j        j        |
 }|r2|dt          j        j        |	 z  z   }|dt          j        j        |
 z  z   }t          ||||          }|                    t
          j        dt                     t          ||||          }t          ||           d S )NrF   r   rZ   r  r   r5  )rO   r  r.  r/  r:  r;  r2  rZ   r8  ax_aax_brP   rQ   r   r   s                  rS   test_1d_axeszTestOAConvolve.test_1d_axesm  s     q q T
T
IND!IND! 	-Bry~t,,,ABry~t,,,Aq!$T:::F/+	- 	- 	-ADt444!#x00000rU   z0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                    t           j                            ||          }t           j                            ||          }	|rL|dt           j                            ||          z  z   }|	dt           j                            ||          z  z   }	t          ||	|          }
|                    t
          j        dt                     t          ||	|          }t          ||
           d S r4  r5  )rO   r.  r/  	shape_a_1	shape_b_1rZ   r2  r8  rP   rQ   r   r   s               rS   test_2d_noaxeszTestOAConvolve.test_2d_noaxes  s     INN9i00INN9i00 	<Bry~~i;;;;ABry~~i;;;;Aq!$///F/+	- 	- 	-AD)))!#x00000rU   rF   c                    |gdz  }|gdz  }|||d         <   |||d         <   |||d         <   |||d         <   t          j        j        | }t          j        j        | }|	r2|dt          j        j        | z  z   }|dt          j        j        | z  z   }t          ||||          }|
                    t
          j        dt                     t          ||||          }t          ||           d S )Nr@   r   rE   r   r=  r   r5  )rO   r  r.  r/  rB  rC  rZ   r:  r;  r2  r8  r>  r?  rP   rQ   r   r   s                    rS   test_2d_axeszTestOAConvolve.test_2d_axes  s    q q !T!W!T!W!T!W!T!WIND!IND! 	-Bry~t,,,ABry~t,,,Aq!$T:::F/+	- 	- 	-ADt444!#x00000rU   c                     t          t          g g           j        dk               t          t          ddgg           j        dk               t          t          g dg          j        dk               d S r  )r   r   r   r  s    rS   r  zTestOAConvolve.test_empty  sn    
2r""'1,---
Aq62&&+q0111
2s##(A-.....rU   c                     t          d          }t          d          }t          ||          }t          |||z             d S rv   r   r   r
   r  s       rS   ri   zTestOAConvolve.test_zero_rank  sA    $KK$KKAS!a%     rU   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S rv   rI  r  s       rS   rw   z"TestOAConvolve.test_single_element  sE    4&MM4&MMAS!a%     rU   N)r   r   r   ro  rp  r  rq  r)  r
  rq   r0  r  r9  r@  r&  rD  rF  r  ri   rw   r   rU   rS   r+  r+  J  s       [[3--dd55::.>.>.2d55dB3G3G.H.H/I J J 1 1	  
1 [3*]+<+<+<==? ?[\D%=99[V%>%>%>??1 1 @? :9? ?1  [VaV,,[3*]>>>::< <[_q!f55[_q!f55[\D%=99[V%>%>%>??1 1 @? :9 65 65< < -,1, [ :--nnn==? ? [\D%=991 1 :9? ?1" [Vq!fq!fq!f%=>>[ :--nnn==? ? [_q!f55[_q!f55[\D%=991 1 :9 65 65? ? ?>12/ / /! ! !! ! ! ! !rU   r+  c                      e Zd Zej                            deeg          d             Zej                            deeg          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                         Z
ej                            deeg          d	             Zej                            d
ej        ej        g          d             ZdS )TestAllFreqConvolvesconvapproachc                     t          j        dd                              d          }t          j        dd                              d          }t          t          d          5   |||d	
           d d d            d S # 1 swxY w Y   d S )NrE   r|   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr2  r   rY   )ro   r   rp   r   r   rO   rM  rP   rQ   s       rS   r   z(TestAllFreqConvolves.test_invalid_shapes  s     IaOO##F++Ib!$$V,,:"FG G G 	- 	- LAG,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   'BB
Bc                     t          j        g d          }t          j        g d          }t          t          d          5   |||ddg           d d d            d S # 1 swxY w Y   d S )N)rB   rC   rF   rE   )rB   rC   r@   rE   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r2  r   rE   r  )ro   r  r   r   rO  s       rS   test_invalid_shapes_axesz-TestAllFreqConvolves.test_invalid_shapes_axes  s     H\\\""H\\\"":"67 7 7 	, 	, LAQF++++		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A!!A%(A%za,brE   rF   r@   c                 |    t          t          d          5   |||           d d d            d S # 1 swxY w Y   d S )Nz/in1 and in2 should have the same dimensionalityr2  r   r   )rO   rP   rQ   rM  s       rS   r  z)TestAllFreqConvolves.test_mismatched_dims  s     :"-. . . 	 	 LA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   155c                    t          t          d          5   |dgdgd           d d d            n# 1 swxY w Y   t          t          d          5   |dgdgg            d d d            n# 1 swxY w Y   t          t          d	          5   |dgdgddgd
dgg           d d d            n# 1 swxY w Y   t          t          d	          5   |dgdgg d           d d d            n# 1 swxY w Y   t          t          d          5   |dgdgdg           d d d            n# 1 swxY w Y   t          t          d          5   |dgdgdg           d d d            n# 1 swxY w Y   t          t          d          5   |dgdgddg           d d d            d S # 1 swxY w Y   d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r2  rE   rF   chipsrY   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersr@   rA   )      ?rT  rV  rW  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   rS  )rO   rM  s     rS   test_invalid_flagsz'TestAllFreqConvolves.test_invalid_flags  s    :"01 1 1 	1 	1 L!qc0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 :!FH H H 	, 	,L!qc++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, : .2 3 3 3 	: 	:L!qc!Q!Q(89999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: : .2 3 3 3 	: 	:L!qc(8(8(89999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: :!GI I I 	- 	-L!qc,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- :!GI I I 	. 	.L!qc----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. :!:< < < 	0 	0L!qcA////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0sx   488A22A69A6B66B:=B:C66C:=C:D55D9<D9E44E8;E8F55F9<F9r   c                    t           j                            d                              |          }t           j                            d                              |          }t          j         |                      r
|dz  }|dz  }t	          ||          }t          |t          ||d                     |j        |k    sJ d S )N)rk   rk   )rA   rA   y        ?rl   rm   )ro   r   r   iscomplexobjr   r   r   r   )rO   r   rd   re   ress        rS   test_longdtype_inputz)TestAllFreqConvolves.test_longdtype_input  s    IX&&--e44IV$$++E22?5577## 	HAHA!QXa8<<<===yE!!!!!!rU   N)r   r   r   ro  rp  rq  r   r   r   rQ  r  rW  ro   	longfloatlongcomplexr[  r   rU   rS   rL  rL    sy       [^):68 8- -8 8- [^):68 8, ,8 8, [U !sAh 1#h !saSEl,- - [^):68 8 8 8	- - [^):68 80 08 80< [Wr|R^&DEE	" 	" FE	" 	" 	"rU   rL  c                   `   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 Zej        	                    de
j        e
j        e
j        e
j        e
j        ee
j        e
j        e
j        e
j        e
j        g          d             Zej        	                    de
j        e
j        e
j        e
j        e
j        g          d             Zd Zd Zd Zej        	                    de
j        e
j        e
j        g          d             ZdS ) TestMedFilt)
r  r  r  r  r  rJ     rk   r   r+  )
r  r  r  r  r  r   H   M   rB  rG  )
r  r  r  r  r  r+  r1     r*  rb  )
r  r  r  r  r  r         _   #   )
r  r  r  r  r  r+  r[   r  rX  rG  )
r   a   rI   rB  r   rb  r   r   G   r   )
r*  r  rF  re  rB  rJ   rc  rB  r'  rH  )
r@   !   r  r,  rE   r   rA  7   rL   S   )
r|   r  r+  r   r  r1  r'  +   r   r(  )
rJ   r   X   r|   '   rA   rJ  r*  r   r   )
r   r  r  r  r   rd  rd  r`  rk   r   )
r   r  r  r  r  r   rc  rX  re  r   )
r  r  r  r  r  r1  r[   r[   r+  rg  )
r  r  r  r  r  r  r   r1  r*  r   )
r  r  r  r  r  r  r+  rk  r*  rg  )
rj  r  r  r  r  r1  r+  rm  rk  r(  )
rJ   r  r  r  r  r1  r+  r   rk  r(  )
r|   r+  r  r  r1  r+  r+  rm  r   rX  )
r   rJ   rj  ro  rJ   rJ   rm  rm  rm  r   )
r   r|   r  r|   rA   rA   rc  rc  r'  r   r|   r@   c                     t          j        | j        | j                  }t          j        t          j        | j        t                    | j                  }t          || j	                   t          ||           d S r-  )
r   medfiltINKERNEL_SIZE	medfilt2dro   r   re  r   OUT)rO   r   r  s      rS   rT   zTestMedFilt.test_basic<  sc    N47D$455RXdgu55t7GHH1dh'''1a     rU   r   c                     t          j        | j        |          }t          t	          j        |          j        |           t          t	          j        |          j        |           d S Nr	  )ro   r   rr  r
   r   rq  r   rt  rO   r   in_typeds      rS   
test_typeszTestMedFilt.test_typesB  s[    
 8DG5111V^H--3U;;;V%h//5u=====rU   c                 Z   t          j        | j        |          }t          j        t
          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr	  order_filterNDr2  )	ro   r   rr  ro  r	   r   r   rq  rt  rx  s      rS   test_invalid_dtypeszTestMedFilt.test_invalid_dtypesK  s"    8DG5111]:-=>>> 	% 	%N8$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ]:-=>>> 	' 	'X&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's#   AAA>B  B$'B$c                 V   t          j        t                    5  t          t          t
          j        d            d d d            n# 1 swxY w Y   t          j        dt          j	                  }|dd         }d|_
        t          t          j        |d          dk               d S )NrG   r	  rB   rC   r}   rE         @)ro  r  UserWarningr   	TypeErrorr   rq  ro   r   float64r  r   )rO   dummyrP   s      rS   	test_nonezTestMedFilt.test_noneU  s    \+&& 	; 	;)V^T:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 	"BJ///!A#J	q!$$*+++++s   !AAAc                    t          d          }t          j        ||gt                    }t	          t
          d          rdt          j        |          z  }nd}t          j        t                    5  t          |          D ]}t          j        |           	 d d d            n# 1 swxY w Y   t	          t
          d          r%t          t          j        |          |k                t          |||g           d S )Nr  r	  getrefcountrF   rG   )r   ro   r   r   hasattrsysr  ro  r  r  rq   r   rq  r   r
   )rO   rP   rd   r   js        rS   test_refcountingzTestMedFilt.test_refcountinga  s/   CLLHaV6***3&& 	COA&&&AAA\+&& 	" 	"1XX " "q!!!!"	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 3&& 	,COA&&*+++QAs   5'B))B-0B-c                     t          j        | j        t                    }t          j        | j        t                    }t          t          j        || j                  |           d S rw  )	ro   r   rr  r   ru  r   r   rq  rs  )rO   	in_object
out_objects      rS   test_objectzTestMedFilt.test_objectq  s^    HTWF333	Xdhf555
6>)T5EFF%	' 	' 	' 	' 	'rU   c                 h   
 t          j         j        |          t          j         j        |          }j        |j        k    sJ |j        d         dz  
|j        d         dz   j        d         dz  dz    j        d         dz  dz   
 fdt          j        |          }t          d          5 h d}fd	|D             }t          |          D ]!}|	                                \  }}}	||||	f<   "	 d d d            n# 1 swxY w Y   t          ||           d S )
Nr	  r   rF   rE   c                 (   | \  }}|dk    r5t          dz             }t          d           }t          d          }n3t          z
  d           }t          d           }t          d           }|dk    r5t          dz             }t          d           }t          d          }n3t          z
  d           }t          d           }t          d           }||f         }	t          j        |	j                  }
|
||f         ||fS )Nr   )slicer   rt  rs  )chunkMNMinMselMoutNinNselNout
chunk_datamedM1N1ry  offMoffNrO   s              rS   applyz2TestMedFilt.test_medfilt2d_parallel.<locals>.apply  s    DAqAvvArDy))QQ||BIt,,T4((RAvvArDy))QQ||BIt,,T4((R "#s(+J":t/?@@CtTz?D$..rU   rA   )max_workers>   rE   r   r   r   r   rE   rE   rE   c                 <    h | ]}                     |          S r   )submit)r   r  r  pools     rS   r   z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>  s'    EEEUt{{5%00EEErU   )ro   r   rr  ru  r  rs  
zeros_liker   r   r^  r   )rO   r   r   outputchunksfuturesfuturedataMsliceNslicer  r  r  ry  r  r  r  s   `         @@@@@@@rS   test_medfilt2d_parallelz#TestMedFilt.test_medfilt2d_parallelw  s   8DG51118DHE222 ~////
 ^A!#^A!#"a'!+"a'!+	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/8 x((A... 	.$555FEEEEEfEEEG 'w// . .'-}}$ff)-vv~&&.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	68,,,,,s   ADDDN) r   r   r   rr  ru  rs  rT   ro  rp  rq  ro   ubytebyteushortshortuintint	ulonglongr   r  
longdoublerz  bool_cfloatcdoubleclongdoubler   r}  r  r  r  r  r   rU   rS   r_  r_  "  s       
2
2
2
1
1
1
2
2
2
2
2
2
1
1
1
2
2
2
2
2
2
0
0
0
1
1
1
0
0
0	
2B 211111333333333333333222111---	/C Q%K! ! ! [Wrx")RX')wR\2<')z2:r}'N O O> >O O> [WrxBJ')~rz'D E E' 'E E'
, 
, 
,      ' ' ' [WrxRZ&HII5- 5- JI5- 5- 5-rU   r_  c                       e Zd Zd ZdS )
TestWienerc                    t          g dg dg dg dgd          }t          g dg dg dg d	g          }t          t          j        |          |d
           t          t          j        |d          |d
           d S )N)rB   rC   rA   r@   )r@   rB   rC   rF   )rF   r@   rB   rC   )rE   rC   r  r|   r   )gSXO@gXq	@gq@g?)g]`UUU@gFUUUU@gq@gcq@)gyq@gXq@gXq@gUJ4@)gUUUU?g2k6k@gҷWH@g@_)@rC   decimalr@   )mysize)r   r   r   wiener)rO   r   r  s      rS   rT   zTestWiener.test_basic  s    <<<<<<<<<! #&' ' IIILLLLLLMMMO P P 	"&-"2"2AqAAAA!&-!"<"<"<aKKKKKKrU   Nr   r   r   rT   r   rU   rS   r  r    s(        
L 
L 
L 
L 
LrU   r  )meanmedianminimummaximumlinec                   n   e Zd Zd Zej                            dd          ej                            dd          ej                            dd          d                                     Zd	 Zej                            d
d          ej                            dd          ej                            dd          d                                     Z	ej                            de
          d             Zej                            de
          d             Zej                            de
          ej                            dej        ej        g          d                         Zej                            ddg e edgddge
                    z             d             Zd Zd ZdS )TestResamplec           	      j   t          j        d          }d}t          j        dd          }t	          t
          t          j        |||           t	          t
          t          j        |dd           t	          t
          t          j        |dd           t	          t
          t          j        |d	dd
           t	          t
          t          j        |d	ddd           t          j        t          j        d          d          }t          j        ||d|           t          |j
        dk               d S )N      )kaiser       @   windowyorE   r   rF   r  padtyper  rG   )r  cval)rF   rE   r   axisr  )r  )ro   r   r   
get_windowr   r   resampleresample_polyr  r   r  )rO   signumwinsig2s        rS   rT   zTestResample.test_basic  s   
 inn55j&/3CHHHH 	j&"6T1EEEj&"6QBBBj&"6Q2NNNNj&"6Q$2	/ 	/ 	/ 	/ wry~~v..c37777	V#$$$$$rU   r  )Nhammingr  )r  rc  r  )r   ra  rG   r  c           	         t          j        dd|d          }t          j        |dz   dz            }t          t	          j        |||          t	          j        |dz   ||          j                   t          j        t          j        |dz   dz            t          j        |dz   dz            g          }|dz   }t          t	          j        ||d	|
          t	          j        ||d	|
          j        d           d S )Nr   rG   F)endpointrF   g      @r  r   rE   r  &.>r  )	ro   linspacecosr   r   r  realr   sin)rO   r  r  r  rd   re   	y_complexs          rS   	test_rfftzTestResample.test_rfft  s    K2q5111FAqD593v>>>BFCCCH	J 	J 	J HbfadU3Y''Ac	):):;<<F	OAs6:::OIs6BBBG	 	 	 	 	 	rU   c                     t          j        d          dz   }t          |          }d}t          t	          j        ||d          t	          j        ||d          d           d S )Nr  r   freq)domaintimer  r  )ro   r   r   r   r   r  )rO   tsigfsigr  s       rS   test_input_domainzTestResample.test_input_domain  sp    y~~"4yyOD#f555OD#f555	 	 	 	 	 	rU   nx)rE   rF   r@   rB   r   nyr   )re  r#  c                     t          j        dg|z  |          }t          j        ||          }t	          |dg|z             d S )NrE   )ro   r   r   r  r   )rO   r  r  r   rd   re   s         rS   test_dczTestResample.test_dc  sH     HaS2Xu%%OAr""A38$$$$$rU   r  c                    t          j        d          }t           j                            d                              d          }|                                }t          j        |dd||           t          ||           d S )Nr@   r   rF   rB   rE   r  r  )	ro   r  r   r  r   copyr   r  r   )rO   r  impulser  window_origs        rS   test_mutable_windowz TestResample.test_mutable_window  ss     (1++&&q))//22kkmmWa67KKKK6;/////rU   c                     t          j        dt           j                  }t          j        g dt           j                  }t	          j        |dd||          }|j        t           j        k    sJ d S )NrG   r	  rE   rE   rE   rE   rF   r  )ro   r   r   r   r   r  r   )rO   r  rd   r  re   s        rS   test_output_float32z TestResample.test_output_float32  sj     Ib
+++HYYYbj111 AqGDDDw"*$$$$$$rU   c                     t          j        d|          }t          j        |dd|          }|j        |j        k    sJ d S )NrG   r	  rE   rF   r  )ro   r   r   r  r   )rO   r  r   rd   re   s        rS   test_output_match_dtypez$TestResample.test_output_match_dtype  sL     Ib&&& Aq':::w!'!!!!!!rU   zmethod, ext, padtype)r   FN	polyphaseFTc                    d}g d}t          j        |          t          |          z  }t          j        d          d d t           j        f         }t          j        dt           j        z  |z  |z            t          |          z  }|D ]}	t          j        |	          t          |	          z  }
t          j        dt           j        z  |z  |
z            t          |	          z  }|dk    rt          j	        ||	d          }ny|r]|	|k    rWt          |	|          }|	|z  }||z  }t          ||          }d|z  }d	|z  }t          j        d|z  d
z   |d          }||d}nd|i}t          j        ||	|fddi|}t          |||          D ]\  }}}|d|	z  k    r?|                    d           |dv rt!          ||d           ;t!          ||d           Nt#          |j        |j                   t          j        ||          d         }t)          |dk    |||	f           t           j                            d          }t          |          t          j        |                    |                    z  }|D ]}	t          j        |	          t          |	          z  }
t          j        |
||          }|dk    rt          j	        ||	          }nt          j        ||	||          }t#          |j        |j                   t          j        ||          d         }t)          |dk    |           |dk    rt          j        ddg          }t          j	        |d          }t          j        g d          }t!          ||d           t          j        g d           }t          j	        |d          }t          j        ddg          }t!          ||d           d S d S )!Nr   )	r   r  r  c   r   ra     r     )rV        $@g      D@rF   r   r   r  rV  rG   rE   )r  r  r  r  r  r        ?        )r  r  333333?r  r   r  gGz?)r9  r   r  r   r   rA   )r         ?        r   r  -q=)rV  r
  r  r
  )ro   r   re  r   newaxisr  pir7   r   r  r   maxr  r  r!  r&  r   r   r  corrcoefr   r   r  cumsumr   interp) rO   rn   extr  raterates_tor   freqsrd   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_trues                                    rS   test_resample_methodsz"TestResample.test_resample_methods  s,    <<< IdOOeDkk)((BJ7F1ru9u$q())DJJ6 !	D !	DG9W%%g6DF1ru9u,t344tG}}DE"OAwR@@@		 47d??GT**A AB19D"2t}}Hx-C!H}H#]1x<!+;S2AC C CF*0WEEHH )73H"0GT = = =3;= =	 ),E9e(D(D 
D 
D$h3=((IIbMMM"888'$TBBBBB'$TBBBBB&tz8>BBB;tX66t<DD4KdD'-BCCCCC
D i##A&&JJ399T??333 	+ 	+G9W%%g6D9T1a((D!?1g66!/7D8?A A Atz8>:::;tX..t4DD4KT***** U??66*++Bob!,,GhAAABBGGW59999,,,--Bob!,,GhBx((GGW5999999 ?rU   c           	      z   t           j                            d          }t          t           j        t           j        t          t          f}d}g d}|D ]}|                    |          	                    |          }|t           j        t           j
        fv r|d|                    |          z  z  }d|d<   d|d<   |D ]|}t          j        dd|z  d	
          }t          |d|d          d d |         }	t          ||d d d                   }
t          j        |d||

          }t!          |	|dd           }d S )Nr~   r  )rF   r  O   r   r   r   r   rV  r  r  constantr  rE   Hz>r   r   )ro   r   r  r  r   r   re  r#  r   r   
complex128r   r  r%   r   r  r   )rO   random_state	try_typesr   down_factorsr   rd   r  r  yfhcre   s               rS   test_poly_vs_filtfiltz"TestResample.test_poly_vs_filtfilti  sU   y,,R00"*blE7C	"{{ 	= 	=E""4((//66Ar}555R,,,T2222 AaDAbE$ 	= 	=M"b4i	BBBaa<<<VVtVD
 a44R4))(AtB???ADt<<<<<	=	= 	=rU   c           
      Z   dD ]}t          dd|          D ]}dD ]}t          j                            |f          }t          j                            |f          }t          ||d d d         d          }t	          j        |d||          }t          |d d |         |           d S )	N)rF   rA   rE   r)  )rJ   rj  r   r-  rY   )r  r  r  )rq   ro   r   r   r   r  r   )rO   r  r  nweightsrd   weightsy_gy_ss           rS   test_correlate1dzTestResample.test_correlate1d  s     	6 	6DAr4(( 6 6 ( 6 6H	(("//A i..{;;G%a2ZHHHC .ad7< < <C#C$K555566	6 	6rU   N)r   r   r   rT   ro  rp  rq  r  r  r  padtype_optionsr  r   ro   r   r  r  r
  r   r*  r6  r<  r   rU   rS   r  r    sA       % % %, [X'899[S(++[U$677  87 ,+ :9   [T?33[T?33[W&:;;% % <; 43 43%
 [Y880 0 980 [Y88% % 98% [Y88[Wrz2:&>??" " @? 98" [	
$Gt}o 
 
	
 G: G: G:R= = =8	6 	6 	6 	6 	6rU   r  c                       e Zd Zd Zd ZdS )TestCSpline1DEvalc                 `   t          g d          }t          t          |                    }|d         |d         z
  }t          j        |          }t          t          |          dz            dz  }t          j        ||||d                   }t          |d d d         |d           d S )	N)	rE   rF   r@   rA   r@   rF   rE   rF   rV  rE   r   r  )dxx0rG   rB   r  )r   r   lenr   	cspline1dcspline1d_evalr   )rO   re   rd   rA  cjr   y2s          rS   rT   zTestCSpline1DEval.test_basic  s    ///003q66NNqTAaD[a  CFFTM""T)"2rbQqT::: 	""TTrT(Aq999999rU   c                    t          j        d          }t          j        |j        t           j                  }d}d|z  }t          j        dt           j        z  |z  |z            }t          j        |          }t          j	        dg          }t          j
        ||          }t          |j        |j                   d S )NrF   r	  r  rV  rc   r
  )ro   r   r  r  r   expr  r   rD  r   rE  r
   r   )rO   rd   re   Tr   cyxnewynews           rS   rg   zTestCSpline1DEval.test_complex  s    IaLLHQWBL111!GF4"%<!#a'(( a   x$R..TZ)))))rU   N)r   r   r   rT   rg   r   rU   rS   r?  r?    s2        
: 
: 
:* * * * *rU   r?  c                       e Zd Zd ZdS )TestOrderFiltc                 Z    t          t          j        g dg dd          g d           d S )NrD   rE   r   rE   rE   )rF   r@   rF   )r   r   order_filterr  s    rS   rT   zTestOrderFilt.test_basic  s>    6.yyy)))QGG$99	& 	& 	& 	& 	&rU   Nr  r   rU   rS   rO  rO    s#        & & & & &rU   rO  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )_TestLinearFilterc                     t          j        dt          j        |          dz
  t          j        |                                        |          }|                     |          S )Nr   rE   )ro   r  prodrp   convert_dtype)rO   r  rd   s      rS   generatez_TestLinearFilter.generate  sL    K275>>A-rwu~~>>FFuMM!!!$$$rU   c                 f   | j         t          j         d          k    ryt          j        |          }t          j        |j        | j                   }t          j        ||gddgdgdgg          }|D ]#\  }}|                     |d                   |d<   $|S t          j        || j         d	          S )
NOrefs_okzerosize_okreadonly	writeonlyr   .F)r  )r   ro   asarrayemptyr  nditertyper   )rO   arrr   iterrd   re   s         rS   rW  z_TestLinearFilter.convert_dtype  s    :#&&*S//C(39dj11C9c3Z)M)B${m46 6D * *11R5))#J8C%8888rU   c                     |                      d          }|                     ddg          }|                     ddg          }|                     g d          }t          t          |||          |           d S NrC   rE   r   r
        ࿩r   rF   rA   rC   r   r  rX  rW  r   r#   rO   rd   rQ   rP   y_rs        rS   test_rank_1_IIRz!_TestLinearFilter.test_rank_1_IIR  s}    MM$2w''T{++  !5!5!566!'!Q"2"2C88888rU   c                     |                      d          }|                     ddg          }|                     dg          }|                     g d          }t          t          |||          |           d S )Nrg  rE   r   rE   r@   rB   r|   r  rj  rk  s        rS   test_rank_1_FIRz!_TestLinearFilter.test_rank_1_FIR  s{    MM$1v&&s##  !4!4!455!'!Q"2"2C88888rU   c                    |                      d          }|                     g d          }|                     ddg          }|                     ddg          }|                     g d          }|                     dd	g          }t          ||||
          \  }}t          ||           t          ||           d S )Nrg  rE   r   r   r
  rh  rE   rF   )rE   rB   r     r~   rX  rs  zirX  rW  r#   r   	rO   rd   rQ   rP   rv  rl  zf_rre   zfs	            rS   test_rank_1_IIR_init_condz+_TestLinearFilter.test_rank_1_IIR_init_cond  s    MM$zzz**T{++A''  !6!6!677!!2s),,1aB'''2!!S)))!"d+++++rU   c                    |                      d          }|                     g d          }|                     dg          }|                     ddg          }|                     g d          }|                     ddg          }t          ||||          \  }}t          ||           t          ||           d S )Nrg  r  rE   )rE   rF   r@   rC   r  r  r  rB   ru  rw  rx  s	            rS   test_rank_1_FIR_init_condz+_TestLinearFilter.test_rank_1_FIR_init_cond  s    MM$yyy))s##A''  !5!5!566!!1a&))1aB'''2!!S)))!"d+++++rU   c                    |                      d          }|                     ddg          }|                     ddg          }|                     g dg dg dg dg          }t          |||d          }t          ||           d S )	NrA   r@   rE   r   r
  r   rF   rA   rC   rA   rF   r   r	  rw  )rO   rd   rQ   rP   y_r2_a0re   s         rS   test_rank_2_IIR_axis_0z(_TestLinearFilter.test_rank_2_IIR_axis_0  s    MM&!!2w''Sz**$$iiiIII&/ii&1 2 2Aq!!$$$!'1-----rU   c                    |                      d          }|                     ddg          }|                     ddg          }|                     g dg dg dg dg          }t          |||d	          }t          ||           d S )
Nr  rE   r   r
  r   rF   r   rC   r  rC   rL   rt  rL   r`  ir`  r	  rw  )rO   rd   rQ   rP   y_r2_a1re   s         rS   test_rank_2_IIR_axis_1z(_TestLinearFilter.test_rank_2_IIR_axis_1  s    MM&!!2w''Sz**$$iii]]])MM&+ , ,Aq!!$$$!'1-----rU   c                    |                      d          }|                     ddg          }|                     ddg          }|                     t          j        d                    }|                     g dg dg dg d	g          }|                     g d
          d d t          j        f         }t          |||d|          \  }}t          ||           t          ||           d S )Nr  rE   r   r
  )rA   rE   r  )r|   r|   )rs  rs  )rc  rc  )r  r  iir  rv  )rX  rW  ro   r[  r  r#   r   )	rO   rd   rQ   rP   rv  	y_r2_a0_1ry  re   rz  s	            rS    test_rank_2_IIR_axis_0_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_0_init_cond  s    MM&!!2w''Sz**//&&			:::}}}+mm(- . .	!!"5"5"566qqq"*}E1aaB///2!)Q///!"d+++++rU   c                    |                      d          }|                     ddg          }|                     ddg          }|                     t          j        d                    }|                     g dg dg dg dg          }|                     g dg          }t	          |||d	|
          \  }}t          ||           t          ||           d S )Nr  rE   r   r
  )rE   r@   )rE   r@   rB   )rB   r@   rE   )r  r  r   r  )rX  rW  ro   r[  r#   r   )	rO   rd   rQ   rP   rv  	y_r2_a0_0ry  re   rz  s	            rS    test_rank_2_IIR_axis_1_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_1_init_cond  s    MM%  2w''Sz**//&&			999(1		999(> ? ?	!!???"3441aaB///2!)Q///!"d+++++rU   c                 6   |                      d          }|                     ddg          |                     ddg          t          |j                  D ]>}t	          ||          }t          j        fd||          }t          ||           ?d S )NrA   r@   rF   rE   r   r
  c                 &    t          |           S r-  r#   wrP   rQ   s    rS   <lambda>z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>       1a0@0@ rU   rX  rW  rq   ndimr#   ro   apply_along_axisr   rO   rd   r  re   rl  rP   rQ   s        @@rS   test_rank_3_IIRz!_TestLinearFilter.test_rank_3_IIR  s    MM)$$2w''Sz**!&MM 	. 	.D1a&&A%&@&@&@&@&@$JJC%a----	. 	.rU   c                 L   |                      d          }|                     ddg          |                     ddg          t          |j                  D ]}t	          |j                  }d||<   |                     t          j        |                    }|                     dg          t          |||          \  }}fd}fd}t          j	        |||          }	t          j	        |||          }
t          ||	           t          ||
           d S )Nr  rE   r   r
  c                 6    t          |           d         S Nru  r   r  r  rP   rQ   zi1s    rS   r  z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>.      GAq!444Q7 rU   c                 6    t          |           d         S Nru  rE   r  r  s    rS   r  z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>/  r  rU   rX  rW  rq   r  r
  r  ro   r[  r#   r  r   rO   rd   r  zi_shaperv  re   rz  lf0lf1rl  ry  rP   rQ   r  s              @@@rS   test_rank_3_IIR_init_condz+_TestLinearFilter.test_rank_3_IIR_init_cond#  s9   MM)$$2w''Sz**!&MM 	0 	0DAG}}HHTN##BGH$5$566B$$aS))CAq!T2..EAr777777C777777C%c433C&sD!44D%a---%b$////	0 	0rU   c                 4   |                      d          }|                     g d          |                     dg          t          |j                  D ]>}t	          ||          }t          j        fd||          }t          ||           ?d S )Nr  rr  rE   c                 &    t          |           S r-  r  r  s    rS   r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda><  r  rU   r  r  s        @@rS   test_rank_3_FIRz!_TestLinearFilter.test_rank_3_FIR5  s    MM)$$zzz**s##!&MM 	. 	.D1a&&A%&@&@&@&@&@$JJC%a----	. 	.rU   c                 L   |                      d          }|                     g d          |                     dg          t          |j                  D ]}t	          |j                  }d||<   |                     t          j        |                    }|                     ddg          t          |||          \  }}fd}fd}t          j	        |||          }	t          j	        |||          }
t          ||	           t          ||
           d S )Nr  rr  rE   rF   c                 6    t          |           d         S r  r  r  s    rS   r  z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>J  r  rU   c                 6    t          |           d         S r  r  r  s    rS   r  z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>K  r  rU   r  r  s              @@@rS   test_rank_3_FIR_init_condz+_TestLinearFilter.test_rank_3_FIR_init_cond?  s9   MM)$$zzz**s##!&MM 	0 	0DAG}}HHTN##BGH$5$566B$$aV,,CAq!T2..EAr777777C777777C%c433C&sD!44D%a---%b$////	0 	0rU   c                 z   |                      d          }t          j        ddd          \  }}|                     |          }|                     |          }|j        d         dz
  }|                     t          j        dd	|f                    }|                     t          j        dd|f                    }t          ||||
          \  }}t          ||||
          \  }	}
t          |	|           t          ||
           t          t          t          |||dt          j        |                     d S )N)rA   rB   r  r   r  bar  r   rE   rA   rB   ru  r   )rX  r   r&   rW  r  ro   r[  r#   r   r   r   )rO   rd   rQ   rP   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings              rS   test_zi_pseudobroadcastz)_TestLinearFilter.test_zi_pseudobroadcastQ  s*   MM*%%mAs4000!q!!q!!'!*q. $$RWaG_%=%=>>$$RWaG_%=%=>>!!Qg666!!Qg666!&&111!'7333 	j'1aB8H8HIIIIIrU   c                    |                      d          }|                     g d          }|                     dg          }|                     g d          }t          ||d         |          }t          ||           d S )NrC   rr  rE   )r   rE   rF   rF   rF   rF   r   rw  )rO   rd   rQ   rP   rl  re   s         rS   test_scalar_az_TestLinearFilter.test_scalar_af  s    MM!zzz**s##  !3!3!344AqtQ!!S)))))rU   c                 ^   |                      t          j        dd                    }|                      t          j        dd                    }|                      t          j        g d                    }t          j        dd          }|dd d d d fxx         dz  cc<   |dd d d d fxx         dz  cc<   |                      |          }|                      t          j        d	d                    }t          j        dd          }dggdggdggg|d d d d d d
f<   |                      |          }t          |||d|          \  }}t          ||           t          ||           t          ||d         |d|          \  }	}
t          |	|           t          |
|           d S )N)r@   rF   rB   lrB   rE   r   r   )r@   rE   rA   rE   rF   r@   )r@   rF   rA   rA   r   r   )rW  ro   r  r[  r   r#   r   )rO   rd   rQ   rP   rv  zf_expected
y_expectedy_iirzf_iiry_firzf_firs              rS   test_zi_some_singleton_dimsz-_TestLinearFilter.test_zi_some_singleton_dimsp  s    rx5566rwq#//rx0011WWc""
1QQQqqq5			Q			
1QQQqqq5			Q			##(('3)?)?@@Xgs++
 !seqcUaSE2
111QQQrr6''
33
  1aR00v!%444!&+666  1Q4B33v!%444!&+66666rU   c           	          |                      |          }|                      |          }|                      |          }|                      |          }t          t          t          |||||           d S r-  )rW  r   r   r#   )rO   rQ   rP   rd   r  rv  s         rS   base_bad_size_ziz"_TestLinearFilter.base_bad_size_zi  sn    q!!q!!q!!##j'1aD"=====rU   c                 ~   t          j        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          j        d                              d	          }|                     dgdg|ddg           |                     ddgdg|dg d           |                     ddgdg|dg dgg           |                     ddgdg|ddgdgd
gg           |                     ddgdg|dddgg           |                     ddgdg|dg dg           |                     g ddg|dg d           |                     g ddg|dg dg dgg           |                     g ddg|dddgd
dgddgg           |                     g ddg|dddgd
dgg           |                     g ddg|dg dg dg           |                     dgddg|dg d           |                     dgddg|dg dgg           |                     dgddg|ddgdgd
gg           |                     dgddg|dddgg           |                     dgddg|dg dg           |                     dgg d|dg d           |                     dgg d|dg dg dgg           |                     dgg d|dddgd
dgddgg           |                     dgg d|dddgd
dgg           |                     dgg d|dg dg dg           |                     g dddg|dg d           |                     g dddg|dg dg dgg           |                     g dddg|dddgd
dgddgg           |                     g dddg|dddgd
dgg           |                     g dddg|dg dg dg           |                     dgdg|ddg           |                     ddgdg|dg d           |                     ddgdg|ddgdgd
gdggg           |                     ddgdg|dg dg           |                     ddgdg|ddgdgd
gg           |                     ddgdg|ddgdgd
gdgdgg           |                     g ddg|dg d           |                     g ddg|dddgd
dgddgddggg           |                     g ddg|dg dg dg           |                     g ddg|dddgd
dgddgg           |                     g ddg|dddgd
dgddgddgddgg           |                     dgddg|dg d           |                     dgddg|ddgdgd
gdggg           |                     dgddg|dg dg           |                     dgddg|ddgdgd
gg           |                     dgddg|ddgdgd
gdgdgg           |                     dgg d|dg d           |                     dgg d|dddgd
dgddgddggg           |                     dgg d|dg dg dg           |                     dgg d|dddgd
dgddgg           |                     dgg d|dddgd
dgddgddgddgg           |                     g dddg|dg d           |                     g dddg|dddgd
dgddgddggg           |                     g dddg|dg dg dg           |                     g dddg|dddgd
dgddgg           |                     g dddg|dddgd
dgddgddgddgg           d S )NrC   rE   r   r   )r   rE   rF   r  r   rE   rF   r@   rL   r  rF   )r   rE   rF   r@   rA   rB   rW   r@   rA   rB   )rA   rB   rC   r|   )r   rE   rF   r@   rA   rB   rC   r|   r|   r   r  )ro   r   r  rp   )rO   r   r   s      rS   test_bad_size_ziz"_TestLinearFilter.test_bad_size_zi  sy   Yq\\qcA3B444q!fqc2rAq6:::q!fqc2rQC5999q!fqc2r999===iii!b"se<<<iii!b"iii@@@qcAq62rAq6:::qcAq62rQC5999qcAq62r999===iii!QR!===iii!QR1#sDDDiii!QRCCCiii!QRFFFq!fiiiR!===q!fiiiR1#sDDDq!fiiiRCCCq!fiiiRFFF Yr]]""5))qcA3As333 	q!fqc2q''':::q!fqc2qGGG9+>>>q!fqc2qA3aS/BBBq!fqc2qAa5':::q!fqc2q999+>>>iii!b!]]]CCCiii!b!wwwwww6G5HIIIiii!b!qeQqE1Q%5HIIIiii!b!qeQqE]CCCiii!b!iii			5JKKKqcAq62q''':::qcAq62qGGG9+>>>qcAq62qA3aS/BBBqcAq62qAa5':::qcAq62q999+>>>qc999b!]]]CCCqc999b!wwwwww6G5HIIIqc999b!qeQqE1Q%5HIIIqc999b!qeQqE]CCCqc999b!iii			5JKKKiii!QQFFFiii!QQ''''''9J8KLLLiii!QQ!A!uaU8KLLLiii!QQ!A!uFFFiii!QQ9998MNNN 	qcA3As333q!fqc2q)))<<<q!fqc2qQCQC3D2EFFFq!fqc2q<<<.AAAq!fqc2qA3sA3-@@@q!fqc2qA3sA3sA32GHHHiii!b!5F5F5FGGGiii!b!!uaUAa5!A6O5PQQQiii!b!iii			5JKKKiii!b!qeQqE1Q%5HIIIiii!b!qeQqE1Q%1qQRe5TUUUqcAq62q)))<<<qcAq62qQCQC3D2EFFFqcAq62q<<<.AAAqcAq62qA3sA3-@@@qcAq62qA3sA3sA32GHHHqc999b!5F5F5FGGGqc999b!!uaUAa5!A6O5PQQQqc999b!iii			5JKKKqc999b!qeQqE1Q%5HIIIqc999b!qeQqE1Q%1qQRe5TUUUiii!QQ8I8I8IJJJiii!QQ1Q%1qeQqE9R8STTTiii!QQ9998MNNNiii!QQ!A!uaU8KLLLiii!QQ!A!uaUAa5RSTUQV8WXXXXXrU   c                 \   |                      d          }|                     dg          }|                     dg          }|                     g           }t          ||||          \  }}t          ||           t	          |j        | j                   t	          |j        d           d S )N)rB   rE   ru  r   )rX  rW  r#   r   r
   r   r   )rO   rd   rP   rQ   rv  re   rz  s          rS   test_empty_ziz_TestLinearFilter.test_empty_zi  s    MM$s##s####1aB'''2!!Q'''RXtz***RWa     rU   c                    |                      dg          }|                      dg          }t          ||ddg          }t          ||ddg          }t          ||ddg          }t          ||           t          ||           d S )NrE   rV  r   TF)rW  r,   r   )rO   rP   rQ   rv  zi_1zi_2s         rS   test_lfiltic_bad_ziz%_TestLinearFilter.test_lfiltic_bad_zi  s    s##s##QB7##q!aV$$q!dE]++2t$$$2t$$$$$rU   c                    |                      dg          }|                      g d          }|                      ddg          }|                      dg          }|                      dg          }|                      ddg          }t          ||||          \  }}t          ||           t          ||           d S )	NrE   rr  rF   r|   ra  rA  ru  rW  r#   r   	rO   rP   rQ   rv  rd   yezfere   rz  s	            rS   test_short_x_FIRz"_TestLinearFilter.test_short_x_FIR  s     s##zzz**A''t$$%%  !S**1aB'''2!!R(((!"c*****rU   c                    |                      ddg          }|                      g d          }|                      ddg          }|                      dg          }|                      dg          }|                      ddg          }t          ||||	          \  }}t          ||           t          ||           d S )
NrE   rr  rF   r|   ra  rA  ir  ru  r  r  s	            rS   test_short_x_IIRz"_TestLinearFilter.test_short_x_IIR  s     1v&&zzz**A''t$$%%  #s,,1aB'''2!!R(((!"c*****rU   c                    |                      d          }|                     ddg          }|                                }|                     ddg          }|                                }|                     g d          }t          |||          }t	          ||           t          ||           t          ||           d S rf  rX  rW  r  r#   r   r
   rO   rd   rQ   b0rP   a0rl  y_fs           rS   test_do_not_modify_a_b_IIRz,_TestLinearFilter.test_do_not_modify_a_b_IIR"  s    MM$2w''VVXXT{++VVXX  !5!5!566aA!#s+++QQrU   c                    |                      d          }|                     g d          }|                                }|                     dg          }|                                }|                     g d          }t          |||          }t	          ||           t          ||           t          ||           d S )Nrg  rQ  rF   )r   r
  rE   rF   r@   rW  r  r  s           rS   test_do_not_modify_a_b_FIRz,_TestLinearFilter.test_do_not_modify_a_b_FIR.  s    MM$yyy))VVXXs##VVXX  !6!6!677aA!#s+++QQrU   N)r   r   r   rX  rW  rm  rp  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rU   rS   rT  rT    s       % % %
9 
9 
99 9 99 9 9	, 	, 	,	, 	, 	,. . .. . ., , ,, , ,. . .0 0 0$. . .0 0 0$J J J** * *7 7 76> > >^Y ^Y ^Y@	! 	! 	!	% 	% 	%+ + ++ + +
 
 

 
 
 
 
rU   rT  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloat32r   Nr   r   r   ro   r   r   rU   rS   r  r  ;          BHSMMEEErU   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloat64r   Nr  r   rU   rS   r  r  ?  r  rU   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloatExtendedr   Nr  r   rU   rS   r  r  C  r  rU   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplex64FNr  r   rU   rS   r  r  G  r  rU   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplex128DNr  r   rU   rS   r  r  K  r  rU   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplexExtendedGNr  r   rU   rS   r  r  O  r  rU   r  c                   4    e Zd Z ej        d          Zd ZdS )TestLinearFilterDecimalrZ  c                 :    t          t          |                    S r-  )r   r   rO   rd   s     rS   rb  zTestLinearFilterDecimal.typeU  s    s1vvrU   N)r   r   r   ro   r   rb  r   rU   rS   r  r  R  s2        BHSMME    rU   r  c                   2    e Zd Z ej        d          ZeZdS )TestLinearFilterObjectrZ  N)r   r   r   ro   r   re  rb  r   rU   rS   r  r  Y  s"        BHSMMEDDDrU   r  c                      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 )NrV  )rV  NrT  rV  rT  rV  )r   r  r#   r   rU   rS   test_lfilter_bad_objectr  ^  sg     )WsecU4D4D4DEEE)WsedV___EEE)Wtfse___EEEEErU   c                  L    t          t          t          ddgddgg d           d S )NrF   r@   rA   rB   )rE   rF   r@   rA   rB   )r   NotImplementedErrorr#   r   rU   rS   !test_lfilter_notimplemented_inputr  f  s+    %w1!ukkkJJJJJrU   dtc                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestCorrelateRealc                    t          j        ddd                              |          }t          j        ddd                              |          }t          j        g d                              |          }|||fS )Nr   r@   rA   rE   rF   )r   rF   rB   r   r@   )ro   r  r   r   rO   r	  rP   rQ   rl  s        rS   _setup_rank1zTestCorrelateReal._setup_rank1p  sq    K1a  ''++K1a  ''++h''..r22!SyrU   c                     d}	 t          j        |          }t          |d          r)t          dt          j        |j                  z            }n# t          $ r Y nw xY w|S )NrC   
resolutionrh  )ro   finfor  r  log10r  	Exception)rO   res_dtr  dt_infos       rS   equal_tolerancez!TestCorrelateReal.equal_tolerancew  ss    	hv&&Gw-- Ad28G,>#?#??@@ 	 	 	D	s   AA 
AAc                     |t           j        k    r|                     t           j                  S |                     |          S r-  )ro   r  r  double)rO   r  s     rS   equal_tolerance_fftz%TestCorrelateReal.equal_tolerance_fft  s;     R]""''	222''///rU   c                    |t           k    r>t          t          d          gt          d          g          }t          |d           d S |                     |          \  }}}t	          ||d          }t	          ||d          }t          |||                     |j                             t          |||                     |j                             t          |j        |           t          |j        |           d S )NrA   r@   rl   r   rm   r  )	r   r    r
   _setup_rank3r   r   r  r   r  )rO   r	  rn   rP   rQ   rl  y_ffty_directs           rS   test_methodzTestCorrelateReal.test_method  s    =='wqzzlCCF*****))"--IAq#a5111E Ah777H%c5$:R:RSXS^:_:_````%c8T=Q=QRZR`=a=abbbbb))),,,,,rU   c                 B   |                      |          \  }}}t          ||d          }t          ||dd                    t          |j        |           t          ||d          }t          ||dd         d d d                    t          |j        |           d S )Nr   rE   rA   r   r  r   r   r
   r   rO   r	  rP   rQ   rl  re   s         rS   test_rank1_validz"TestCorrelateReal.test_rank1_valid  s    %%b))	1caG$$!!S1X...QWb!!! aG$$!!S1Xddd^444QWb!!!!!rU   c                     |                      |          \  }}}t          ||d          }t          ||d d                    t          |j        |           d S )NrX   r   r   r!  s         rS   test_rank1_samez!TestCorrelateReal.test_rank1_same  s\    %%b))	1caF##!!S"X...QWb!!!!!rU   c                     |                      |          \  }}}t          ||d          }t          ||           t          |j        |           d S )Nr   r   r!  s         rS   test_rank1_fullz!TestCorrelateReal.test_rank1_full  sT    %%b))	1caF##!!S)))QWb!!!!!rU   c                    t          j        ddd                              dd                              |          }t          j        dd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|          }|||fS )Nr   ro  r)  )rF   rA   rB   r  )orderrK   r'  rz   )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     @rR  )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	  )ro   r  rp   r   r   r  s        rS   r  zTestCorrelateReal._setup_rank3  s]   K2r""**9C*@@GG K2r""**9C*@@GG  EEEIIIKKKKKKJJJFFFH JIIKKKLLLLLLLLLIIIK GFFIIIKKKLLLIIIEEEGH( )  , !SyrU   c           	      p   |                      |          \  }}}t          ||d          }t          ||ddddddf                    t          |j        |           t          ||d          }t          ||ddddddf         d d dd d dd d df                    t          |j        |           d S )Nr   rE   rF   rA   r@   rB   r   r  r   r   r
   r   r!  s         rS   test_rank3_validz"TestCorrelateReal.test_rank3_valid  s    %%b))	1caG$$!!S1ac1Q3%7888QWb!!! aG$$!!S1ac1Q3%7"dddDDbD8H%IJJJQWb!!!!!rU   c                     |                      |          \  }}}t          ||d          }t          ||ddddddf                    t          |j        |           d S )NrX   r   r   rE   r  r1  r!  s         rS   test_rank3_samez!TestCorrelateReal.test_rank3_same  sl    %%b))	1caF##!!S2qtQrT)9%:;;;QWb!!!!!rU   c                     |                      |          \  }}}t          ||          }t          ||           t          |j        |           d S r-  r1  r!  s         rS   test_rank3_allz TestCorrelateReal.test_rank3_all  sP    %%b))	1caOO!!S)))QWb!!!!!rU   N)r   r   r   r  r  r  r  r"  r$  r&  r  r2  r4  r6  r   rU   rS   r  r  k  s        
  	 	 	0 0 0- - -	" 	" 	"" " "" " "  <	" 	" 	"" " "" " " " "rU   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestCorrelatec                 "   t          j        dd                              d          }t          j        dd                              d          }t          t          t
          g||fR i ddi t          t          t
          g||fR i ddi d S r   )ro   r   rp   r   r   r   r   s      rS   r   z!TestCorrelate.test_invalid_shapes  s     IaOO##F++Ib!$$V,,j)Jq!fJJJ8IJJJj)Jq!fJJJ8IJJJJJrU   c                 J   g d}g d}t          t          t          ||d           t          t          t          ||dd           t          t          t          ||dd	           t          t          t          ||d
d           t          t          t          ||dd           d S r   r   r   r   r   s      rS   r   z!TestCorrelate.test_invalid_params  s    IIIIj)Q????j)QuMMMMj)QhOOOOj)QwOOOOj)QwOOOOOOrU   c                 v   t          t          t          dgdd           t          t          t          ddgd           t          t          t          dgdd           t          t          t          ddgd           t          t          t          dgdgg           t          t          t          dgd           d S r  r;  r  s    rS   r  z"TestCorrelate.test_mismatched_dims  s    j)aS!HEEEEj)QHEEEEj)aS!EBBBBj)QEBBBBj)aSA3%888j)aS!44444rU   c                 4   g d}ddg}t          t          ||d          g d           g d}g d}t          t          ||d          g d           t          t          ||d	          g d
           t          t          ||d          dg           d S )NrD   rA   rB   rX   rY   )rB      rK   r{   )r~   rJ   rK   r   )rC   r~   rJ   rK   rL   r   rJ   )r   r   r   s      rS   test_numpy_fastpathz!TestCorrelate.test_numpy_fastpath  s    IIF	!QV444kkkBBBIIII	!QV444lllCCC	!QV4446I6I6IJJJ	!QW555t<<<<<rU   N)r   r   r   r   r   r  r?  r   rU   rS   r8  r8    sV        
K 
K 
KP P P5 5 5	= 	= 	= 	= 	=rU   r8  rZ   r   rX   r   behindTF
input_size)r   ra  r  r  r  i'  c                    t           j                            d          }|                    |          }t	          |dz            }|r-t          j        |                    |          |g          }| }n||d          }|}t          |||           }t          |j        |j        |           }	t          j	        |          }
t          |	|
         |           t          |	j        |j                   d S )Nr   rG   rY   )ro   r   r  r  r  concatenater   r   r   argmaxr
   r  )rZ   rA  rB  r  in1offsetin2r   correlationlags	lag_indexs              rS   test_correlation_lagsrL    s    
 )


"
"C


j
)
)CBF nc11&993?@@7 &''lC4000KCHchT:::D	+&&Ii(+++[./////rU   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestCorrelateComplexc                     |t           j        k    rt           j        }t          dt          j        |          j        z  dz            S )NrF   r@   )ro   r  r  r  r  	precision)rO   r	  s     rS   r  zTestCorrelateComplex.decimal7  s9    B1rx||--1222rU   c                 
   t           j                            d           t           j                            d                              |          }|dt           j                            d                              |          z  z  }t           j                            d                              |          }|dt           j                            d                              |          z  z  }t          |j        |j        |          t          |j        |j        |          z                       |          }|dt          |j        |j        |           t          |j        |j        |          z   z  z  }|||fS )Nr  rG   r   r   rY   )ro   r   r   r   r   r   r  imag)rO   r	  rZ   rP   rQ   rl  s         rS   r  z!TestCorrelateComplex._setup_rank1<  s?   
	qIOOB&&r**	R")//"%%,,R0000IOOA%%b))	R")//!$$++B////d333d33345;VBZZ 	riT::::qvqvD999: ; 	;!SyrU   c                    |                      |d          \  }}}t          ||d          }t          |||                     |                     t	          |j        |           t          ||d          }t          ||d d d                                         |                     |                     t	          |j        |           d S )Nr   r  r   )r  r   r   r  r
   r   conjr!  s         rS   r"  z%TestCorrelateComplex.test_rank1_validI  s    %%b'22	1caG$$!!S$,,r2B2BCCCCQWb!!! aG$$!!S2Y^^%5%5t||B?O?OPPPPQWb!!!!!rU   c                     |                      |d          \  }}}t          ||d          }t          |||                     |                     t	          |j        |           d S )NrX   r  r  r   r   r  r
   r   r!  s         rS   r$  z$TestCorrelateComplex.test_rank1_sameT  g    %%b&11	1caF##!!S$,,r2B2BCCCCQWb!!!!!rU   c                     |                      |d          \  }}}t          ||d          }t          |||                     |                     t	          |j        |           d S )Nr   r  rV  r!  s         rS   r&  z$TestCorrelateComplex.test_rank1_fullZ  rW  rU   c                     t          j        g d|          }t          j        g d|          }t          ||          }t          |g d           d S )Nr   r`   r  r	  y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      )ro   r   r   r
   rO   r	  r   kre   s        rS   test_swap_fullz#TestCorrelateComplex.test_swap_full`  sb    H---R888H555R@@@aOOQLLLMMMMMrU   c                 ^    g d}g d}t          ||d          }t          |g d           d S )NrZ  r[  rX   rY   )r\  r]  r^  )r   r
   r_  s        rS   test_swap_samez#TestCorrelateComplex.test_swap_samef  sI    $$$,,,a(((Q33344444rU   c                 b   t           j                            ddd                              |          }|dt           j                            ddd                              |          z  z  }t           j                            ddd                              |          }|dt           j                            ddd                              |          z  z  }t	          |j        |j                  t	          |j        |j                  z                       |          }|dt	          |j        |j                   t	          |j        |j                  z   z  z  }t	          ||d          }t          |||                     |          dz
             t          |j
        |           d S )	NrG   r   rC   r   rA   r   rE   r  )ro   r   r   r   r   r  rR  r   r  r
   r   r!  s         rS   
test_rank3zTestCorrelateComplex.test_rank3l  sc   IOOB1%%,,R00	R")//"a++2226666IOOAq!$$++B//	R")//!Q**11"5555((1616**+,2F2JJ 	ri///)AFAF2K2KKLLaF##!!S$,,r2B2BQ2FGGGGQWb!!!!!rU   c           	         t          j        t           j                                                                      |          }|dt          j        t           j                                                                      |          z  z  }t          j        t           j                                                                      |          }|dt          j        t           j                                                                      |          z  z  }t          |j        |j                  t          |j        |j                  z                       |          }|dt          j        t          |j        |j                   t          |j        |j                  z             z  z  }t          ||d          }t          ||| 	                    |          dz
             t          |j        |           t          t          dgdg          t          dd                     t          t          dgdg          t          dd                     t          t          dgdg          t          dd                     d S )Nr   r   rE   r  rc                 @rA   )ro   r   r   r   r   r   r  rR  r   r  r
   r   r!  s         rS   
test_rank0zTestCorrelateComplex.test_rank0z  s   HRY__&&''..r22	R"(29??,,--44R8888HRY__&&''..r22	R"(29??,,--44R8888((1616**+,2F2JJ 	rBHi777&qvqv667 8 8 8 	8 aF##!!S$,,r2B2BQ2FGGGGQWb!!!YsRD))9Q+;+;<<<YtbT**Ib",=,=>>>YtaS))9R+;+;<<<<<rU   N)r   r   r   r  r  r"  r$  r&  ra  rc  re  rh  r   rU   rS   rN  rN  .  s        3 3 3
  	" 	" 	"" " "" " "N N N5 5 5" " "= = = = =rU   rN  c                        e Zd Zd Zd Zd ZdS )TestCorrelate2dc           
         t          j        d          }t          j        g d          }dD ]}t          t          j        |||          t          j        |||                     t          t          j        t          j        |g|g|                    t          j        |||                     |dk    rt          t          j        |||          t          j        |||                     t          t          j        t          j        |g|g|                    t          j        |||                     d S )NrB   ry  rz  rY   r   )ro   r   r   r   r   r   r{  r   r|  s       rS    test_consistency_correlate_funcsz0TestCorrelate2d.test_consistency_correlate_funcs  s}   IaLLH]]]##- 	G 	GDQ = = = & 0AD A A AC C C
6+=qcA3CG,I ,I ,I !J !J & 0AD A A AC C C
 w#BLAD$A$A$A$*$4Q$E$E$EG G G#BJv/A1#sGK0M 0M 0M %N %N$*$4Q$E$E$EG G G	G 	GrU   c                 6   t          j        dd                              d          }t          j        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   )ro   r   rp   r   r   r   r   r   s      rS   r   z#TestCorrelate2d.test_invalid_shapes  s     IaOO##F++Ib!$$V,,j&"4S1vSSS&'ARSSSj&"4S1vSSS&'ARSSSSSrU   c                     t          t          j        dggdgg          d           t          t          j        dggdgg          d           t          t          j        dggdgg          d           d S )NrE   rc   y              rg  rC   rA   y              (@)r
   r   r   r  s    rS   test_complex_inputz"TestCorrelate2d.test_complex_input  sw    V'!v66<<<V'""77;;;V'"!66<<<<<rU   N)r   r   r   rl  r   ro  r   rU   rS   rj  rj    sG        G G G&
T 
T 
T= = = = =rU   rj  c                   z    e Zd Zd Zd Zej                            dej	        ej
        g          d             ZdS )TestLFilterZIc                     t          j        g d          }t          j        g d          }t          j        ddg          }t          ||          }t          ||           d S )N)rV  rU  r
  )rV  r  rT  r  rU  )ro   r   r$   r   )rO   rP   rQ   zi_expectedrv  s        rS   rT   zTestLFilterZI.test_basic  sc    H%%%&&H___%%hT{++1!"k22222rU   c                     t          j        g d          }t          j        g d          }t          ||          }t          d|z  d|z            }t          ||d           d S )N)rF   r   rB   )rE   rE   r   rF   r  r  )ro   r   r$   r   )rO   rQ   rP   r  zi2s        rS   test_scale_invariancez#TestLFilterZI.test_scale_invariance  sk     HYYYHYYYA1ac""Su------rU   r   c                     t          j        d|          }t          j        dg|          }t          t          j        t          j        ||                    j        |           d S )Nr   r	  rE   )ro   r  r   r
   r  r   r$   r   )rO   r   rQ   rP   s       rS   rz  zTestLFilterZI.test_types  s\    Ha&&&HaS&&&RWV.q!4455;UCCCCCrU   N)r   r   r   rT   rv  ro  rp  rq  ro   r   r  rz  r   rU   rS   rq  rq    so        3 3 3. . . [Wrz2:&>??D D @?D D DrU   rq  c                   B    e Zd ZdZ	 	 ddZd Zd Zd	 Zd
 Zd Z	d Z
dS )TestFiltFilttfr   oddNrk  c           
          | j         dk    r"t          | \  }}	t          ||	||||||          S | j         dk    rt          | }
t	          |
||||          S d S )Nrz  sos)filtfilt_kindr'   r%   r(   r/   )rO   zpkrd   r  r  padlenrn   irlenrQ   rP   r}  s              rS   r%   zTestFiltFilt.filtfilt  sn    %%3<DAqAq!T7FFEJJJ5((3-CsAtWf=== )(rU   c                     t          g dg d          }|                     |t          j        d                    }t	          |t          d          d           d S )NrD   rL   g6{=r  )r1   r%   ro   r   r   )rO   r  r   s      rS   rT   zTestFiltFilt.test_basic  sU    YYY			**mmC2//VBZZh777777rU   c                    d}t          j        dd|dz             }t          j        dt           j        z  |z            }t          j        dt           j        z  |z            }||z   }t	          ddd	
          }t          j        |d                                                   }d}t          t          j        t          j	        |          t          j	        |          z                      }	| 
                    |||	          }
t          j        |
|z
                                            }t          |dk                t          j        |||z   g          }| 
                    |||	d          }t          |j        |j                   t          j        ||z
                                            }t          |dk                | 
                    ||j        |	d          }t          ||j                   d S )Ni  r   rV  rE   rG   i  r         ?r  r  r   )r  r   r  r  )ro   r  r  r  r&   r  r  r  ceillogr%   r   vstackr
   r  rJ  )rO   r  r   xlowxhighrd   r  repsr   re   errx2dy2dy2dts                  rS   	test_sinezTestFiltFilt.test_sine  s   K3q))vebema'((w*++5LQe,,,F3q6NN   sbfQii/0011 MM#qM++fQX""$$d
 ite|,--mmCQQm77SY	***fS4Z  $$&&d
 }}S#%}::S$&!!!!!rU   c                    t          j        d                              ddd          }t          ddd          }|                     ||d	d	
          }|                     |t          j        |d	d          d	d
          }t          |t          j        |d	d                     |                     |t          j        |d	d          d	d
          }t          |t          j        |d	d                     d S )Ng     @rG   r  rL   r@   r  r  r  r   r  rE   rF   )ro   r   rp   r&   r%   r  r   )rO   rd   r  y0y1rG  s         rS   	test_axiszTestFiltFilt.test_axis	  s    I())11"b"==Qe,,,]]3!!]44]]3Aq! 4 4QQ]GG2r{2q!44555]]3Aq! 4 4QQ]GG2r{2q!4455555rU   c                     | j         dk    rd S t          j        ddgdt          j        d                    }t          |t          j        d          dd           d S )Nrz  r
  rE   rG   +=r   )r~  r   r%   ro   r   r   )rO   r   s     rS   test_acoeffzTestFiltFilt.test_acoeff	  sY    %%For2h29R==99RYr]]UCCCCCCrU   c                 P   | j         dk    rt          j        d           t          j        ddg          }t          j        dg          }t          j        ddg          }t          |||          \  }}}t          |d         |d         gd|d         z  d	|d
         z  z   d	|d         z  d|d
         z  z   g           t          ||d         d|d         z  z   d|d         z  z   d|d
         z  z   d|d         z  |d         z   d|d         z  z   d|d
         z  z   g           d S )Nrz  $gust only implemented for TF systemsrV  rT  r
  rh  r   r  r  rE         ?r  )r~  ro  skipro   r   r8   r   )rO   rd   rQ   rP   re   z1z2s          rS   test_gust_simplezTestFiltFilt.test_gust_simple	  sH   %%K>??? Hc3Z  HcUOOHc4[!!"1a++	2rA1QqTC!H,c!A$hQqT.AB	D 	D 	DBqEDAJ.ad:U1Q4ZG AJA.qt;d1Q4iGI 	J 	J 	J 	J 	JrU   c                     | j         dk    rt          j        d           t          j        d          }d}d}t          |||d          }||z  dz  |z  }t          ||           d S )	Nrz  r  rL   rV  rT  gustrm   rF   )r~  ro  r  ro   r   r%   r   )rO   rd   rQ   rP   re   r   s         rS   test_gust_scalarszTestFiltFilt.test_gust_scalars 	  sw    %%K>??? IbMMQ1V,,,aC!8a<8$$$$$rU   )r   r{  Nrk  N)r   r   r   r~  r%   rT   r  r  r  r  r  r   rU   rS   ry  ry    s        M>B%)> > > >8 8 8
 "  "  "D6 6 6D D DJ J J% % % % %rU   ry  c                       e Zd ZdZd ZdS )TestSOSFiltFiltr}  c                 V   t           j                            d                              d          }t	          dd          D ]e}t          j        |dd          }t          | \  }}t          | }t          |||          }t          ||          }t          ||dd	|z  
           fdS )z1Test equivalence between sosfiltfilt and filtfiltr   r  rE   rC   ffffff?r  r  r  zorder=%s)r   err_msgN)ro   r   r  r   rq   r   r&   r'   r(   r%   r/   r   )	rO   rd   r(  r  rQ   rP   r}  re   y_soss	            rS   test_equivalencez TestSOSFiltFilt.test_equivalence1	  s    I!!!$$**4001a[[ 	N 	NE-tE:::C3<DAq3-CAq!!AQ''EAu5*u:LMMMMM	N 	NrU   N)r   r   r   r~  r  r   rU   rS   r  r  .	  s-        M	N 	N 	N 	N 	NrU   r  c                 T   d }t          t          |          t          |                     dz
  }t          | |          }t          j        |d|                                         |z  || d                                         |z  f          }t          ||| ||fdddddd		  	        }|\  }}	}
}}|d
k    rt          d|z            |d|         }||d         }t          | ||ddd         |          d
         ddd         }t          | |||          d
         }|||fS )aP  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significanly faster than this implementation.
    c                    t          t          |          t          |                    dz
  }| d|         }| |d         }t          ||||          d         }t          |||ddd         |          d         ddd         }t          |||ddd         |          d         ddd         }	t          |||	|          d         }
t          j        ||
z
  dz            }|S )z-Objective function used in filtfilt_gust_opt.rE   Nru  r   r   rF   )r  rC  r#   ro   r   )icsrQ   rP   rd   mz0fz0br  y_fby_by_bfvalues               rS   filtfilt_gust_opt_funcz1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcF	  s    AA!#"1"g!""gaA#&&&q)q!S2Y3///244R48aAdddG,,,Q/"5q!SS)))!,ta'((rU   rE   Nr  r  r  TF)r   xtolftolmaxfunmaxiterfull_outputdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr   ru  )	r  rC  r$   ro   rD  r  r   r  r#   )rQ   rP   rd   r  r  rv  r  r^  optfoptniterfuncallswarnflagr  r  r  re   s                    rS   filtfilt_gust_optr  =	  s^      	CFFCFFaA	Aq		B
.!BQB%**,,r/1aRSS6;;==+;<
=
=C(#Q1I5"0 0 0F ,2(Cuh!|| )+34 5 5 	5
bqb'C
abb'C !Q$$B$C
(
(
(
+DDbD
1C1cc"""1%Ac3;rU   c                    t           j                            d           t          j        j        | }t	          | |||d|          }t          | ||||          \  }}}	t          j        ||d          }
|
j        d d         }t          j        |
          }t          t          |          t          |                     dz
  }t          j        ||fz             }t          j        ||fz             }t          d |D              D ]&}t          | ||
|                   \  ||<   ||<   ||<   't          j        |d|          }t          j        |d|          }t          j        |d|          }t          ||dd	
           t          ||dd	
           t          ||dd	
           t          |	|dd	
           d S )Nr  r  )r  rn   r  )r  r  r   rE   c                 ,    g | ]}t          |          S r   )rq   )r   r   s     rS   r   z'check_filtfilt_gust.<locals>.<listcomp>}	  s    666q%((666rU   r   r  r   )ro   r   r   r   r%   r8   r  r  
empty_liker  rC  r`  r   r  r   )rQ   rP   r  r  r  rd   re   ygzg1zg2xx	out_shaper  r  zo1zo2indxs                    rS   check_filtfilt_gustr  i	  s   INN3
	A 	AqtF%@@@A "!QEBBBLBS
 
Qb	!	!B"I	r		BCFFCFFaA
(9t#
$
$C
(9t#
$
$C66I6667 K K):1aD)J)J&4#d)SYY	RT	"	"B
+c2t
$
$C
+c2t
$
$CAr40000BD1111C4d3333C4d333333rU   c            	         dD ]} dD ]}d\  }}}t          j        j        |f|z   }t          j        j        |f|z   }t          |||           }t	          ||           t          ||| d          \  }}	t          |dv            t          t          |	          t          u            t          d|	                                v od	|	                                v            d
}dD ]a}
t          t           |
          rJt          j
        ||
          }|                                }t	          t          |||           d	           bt          j        dgt           j                  }|                                }t	          t          |||           d	           t          d          t          d          g}t          d          t          d          g}t	          t          |||           d	           d S )Nr@  )rE   rF   )r   rC   rl   rY   T)rZ   measure>   r   rl   r   rl   rG   )r   r   r	  l         @ r@   rF   rE   rA   )ro   r   r   r    r
   r   rb  dictkeysr  r[  r  r   r
  r   )rZ   r  r   r`  true_methodrd   r  rn   
method_trytimesnot_fft_conv_supps              rS   test_choose_conv_methodr  	  s   ) D D 	H 	HD .Aq+	1$+/A	1$+/A'14888F--- 21adD Q Q QJJ"33444DKK4'(((EUZZ\\)Fh%**,,.FGGGG!= 	L 	Lr,-- LGA%6777FFHH/14@@@(KKKHeWBH---FFHH'14888(CCCQZZ$QZZ$'14888(CCCC7D DrU   c            	      Z   t          j        ddddd          \  } }}d}t          j        t          j        |                    }t          t          j        t          j        |          t          j        |          z                      }t          j        	                    d           t          | ||          \  }}d |fD ]I}d	|z  }	t          |||	fd
|           t          d          D ]}
g d}|	||
<   t          ||||
|           Jd|z  dz
  }t          |||fd
|           d S )Nr@   {Gz?x   gffffff?r  r  r  r  rB   r   )rF   rF   rF   rF   r  )r   ellipro   r  r  r  r  r  r   r   r'   r  rq   )rf   pr`  r  r  approx_impulse_lenrQ   rP   r  
signal_lenr  r  lengths                rS   test_filtfilt_gustr  	  sF   l1dC>>>GAq! C
rvayyARWRVC[[26!99%<==>>INN3!Q??DAq*+ 
: 
:++
 	Aq:-E::: !HH 	: 	:DIIE$E$K1eT59999	: !!B&F1vi,>?????rU   c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )TestDecimatec                     t          j        d          }t          t          t          j        |dd           t          t          t          j        |dd           d S )NrL   r
  rE   )qr   rF   )ro   r   r   r  r   decimater   s     rS   test_bad_argszTestDecimate.test_bad_args	  sK    IbMMi!sa@@@@i!qC@@@@@@rU   c                     t          j        d          }t          j        |dddd                                          }t          ||d d d                    d S )NrL   rF   rE   iirFr   ftype
zero_phasero   r   r   r  roundr   rO   rd   re   s      rS   test_basic_IIRzTestDecimate.test_basic_IIR	  U    IbMMOAqAUuEEEKKMM1a!f%%%%%rU   c                     t          j        d          }t          j        |dddd                                          }t          ||d d d                    d S )NrL   rF   rE   firFr  r  r  s      rS   test_basic_FIRzTestDecimate.test_basic_FIR	  r  rU   c                     t          j        d          }t          j        |ddd          }t	          |j        d           t          j        |ddd          }t	          |j        d           d S )	N)r   r   rF   r   F)r  r  )rd  r   rE   )r   rd  )ro   r  r   r  r
   r  )rO   rf   d0d1s       rS   
test_shapezTestDecimate.test_shape	  sk    HX_Qe<<<RXx(((_Qe<<<RXx(((((rU   c                     t                      5 }|                    t          d           |                     dd           d d d            d S # 1 swxY w Y   d S )NBadly conditioned filterr  Frn   r  r   r7  r2   _test_phaseshiftrO   r:  s     rS   test_phaseshift_FIRz TestDecimate.test_phaseshift_FIR	  s       	BCJJ(BCCC!!5!AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   3AAAc                     t                      5 }|                    t          d           |                     dd           d d d            d S # 1 swxY w Y   d S )Nr  r  Tr  r  r  s     rS   test_zero_phase_FIRz TestDecimate.test_zero_phase_FIR	  s       	ACJJ(BCCC!!4!@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar  c                 4    |                      dd           d S )Nr  Fr  r  r  s    rS   test_phaseshift_IIRz TestDecimate.test_phaseshift_IIR	  s!    Uu=====rU   c                 4    |                      dd           d S )Nr  Tr  r  r  s    rS   test_zero_phase_IIRz TestDecimate.test_zero_phase_IIR	  s!    Ut<<<<<rU   c           	         d}g d}t          d          }t          j        ||z  dz             t          |          z  }t          j        |          dz  dz  }t          j        dt          j        z  |d d t          j        f         z  |z            t          j	        
                    |j        d          z  }|D ]$}	||	z  }
t          j        |	|z  dz             t          |	          z  }t          j        dt          j        z  |d d t          j        f         z  |z            t          j	        
                    |j        d          z  }|d	k    r3d
}t          j        t          j        |dz   d|
z  d          d          }nI|dk    rCd}dt          j        z  |
z  }t          j        t          j        |d|t          j        z             }|du rNt          j        |j        |j        ||z  dz  t          j        z            \  }}|t          j        |          z  }nt          j        |          }t          j        |j        |
|||          }t          j        |                                |z  d          }|t          j        |          z  }|d|	z  k     }t1          t          j        |                                |z            |         ddd           &d S )Nr  )rd  r  r   r)  r   rE   皙?rF   rc   皙?r  r   rV  r  r  r  r   g?F)r  r  r   r	  r
  r   r   r/  )r  ro   r   re  r   rI  r  r  r   windowstukeyr   dltir  cheby1freqzr  denr  	ones_liker  r  r   rT  r   angle)rO   rn   r  r  r  t_totr   r  r   r  r  r  d_tosr   systemwcr   h_respsr  	h_resampssubnyqs                        rS   r  zTestDecimate._test_phaseshift	  s   ###CId5jl##eDkk1 ""S(1,VFRUNU111bj=%99A=>>~##AFC001   "	2 "	2GA9WU]1_--g>DVFRUNU111bj=-AADHII~++DIs;;<E V]1q5"q&:C&E &E &EFHJ J5Yq[fmAtRX&F&FG U""#\&*fj*/*Q,ru*<> >
726'??*,u--1F3=? ? ?I uzz||i7bAAAI	***IS[(F BHW\\^^I%=>>vF!%D2 2 2 2 2C"	2 "	2rU   c                    d}d}t          j        |          |z  }t          j        d|z            t          j        dt           j        z  |dz  z  |z            z  }t          t           j                            |          dd           t          j	        |d	d
          }t          t           j                            |          d           d S )Ng      Y@r  rT  rF   g      >@rV  r   r  r   r  )r  r  )ro   r   sqrtr  r  r   linalgnormr   r  r   )rO   sfreqr   r   rd   x_outs         rS   test_auto_nzTestDecimate.test_auto_n
  s     IaLL5 GBFOObfQY%#+%>%BCCC	q))2D99992U333")..//66666rU   c                     t          j        t          j        dt          j                  d          }t          t          j        |                    rJ d S )Nr  r	  rG   )r   r  ro   r[  r   r   isnanr   s     rS   test_long_float32zTestDecimate.test_long_float32+
  sH     OBGF"*===rBBrx{{#######rU   c                     t          j        t          j        dt          j                  d          }|j        j        t          j        k    sJ d S )Nr   r	  rG   )r   r  ro   r[  r   r   rb  r  r   s     rS   test_float16_upcastz TestDecimate.test_float16_upcast1
  sA    OBGCrz:::B??w|rz))))))rU   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r   r"  r   rU   rS   r  r  	  s        A A A
& & &
& & &
) ) )B B B
A A A
> > >= = =.2 .2 .2`
7 
7 
7$ $ $* * * * *rU   r  c                       e Zd Zd Zd Zd Zej                            de	j
        e	j        g          d             ZdS )TestHilbertc                     t          j        dg          }t          t          t          |           t          j        d          }t          t          t          |d           d S )Nr   r  r   r  )ro   r   r   r   r!   r   r   s     rS   r  zTestHilbert.test_bad_args9
  sO    Hj\""j'1---IcNNj'1222222rU   c           	      "   d}t           j        }t          j        dd|z  |dz            }t          j        |          }t          j        |          }t          j        d|z            }t          j        d|z            }t          j        ||||g          }t          |          }	t          j        |	          }
t          j        |	          }t          j	        |	          }t          |||           t          |
t          j        |j                  |           t          |dd df         t          j        | dz  |dz  |dz            |           t          |dd df         t          j        d||dz            |           t          |dd df         t          j        | dz  |dz  |dz            |           t          |dd df         t          j        d||dz            |           t          |	d         j        ||           d S )Nr>  r   rF   r  rE   r  r@   )ro   r  r   r  r  r  r!   r  r  r  r   r[  r  rR  )rO   r  r  r   r  a1a2a3rP   r  h_absh_angleh_reals                rS   test_hilbert_theoreticalz$TestHilbert.test_hilbert_theoretical?
  s   UIaRc**VAYYVAYYVAE]]VAE]]Ir2r2&''AJJq		(1++ 	FAw///E2717#3#3W=== 	GAttG,IrcAgrAvrCx@@#	% 	% 	%
 	AttGbi2rCx88'	C 	C 	C 	GAttG,IrcAgrAvrCx@@#	% 	% 	% 	AttGbi2rCx88'	C 	C 	C 	AaDIr733333rU   c                 $   t          j        d                              dd          }t          |d          }t	          t          |j        d          |j                   t          t          |d                   |d         d           t          |dd	          }t	          |j        ddg           t	          t          |j        dd	          j        ddg           t          j        g d
          }t          |d         |dd           d S )Nr`  r@   rC   r   r	  r   r>  r  )r  r  )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)	ro   r   rp   r!   r
   rJ  r   r  r   )rO   rP   aaaana0hilbs        rS   test_hilbert_axisNzTestHilbert.test_hilbert_axisNh
  s   IbMM!!!Q''QR   WQSq)))24000GAaDMM2a5"555 a2B'''SYB(((WQSBQ///5Aw???  F F F G G( 	CFFB?????rU   r   c                     t          j        d|          }t          t          j        t	          j        |                    j        |           d S )Nr   r	  )ro   r  r
   r  r   r!   r   rx  s      rS   test_hilbert_typeszTestHilbert.test_hilbert_types
  sC    8AU+++RWV^H5566<eDDDDDrU   N)r   r   r   r  r.  r3  ro  rp  rq  ro   r   r  r5  r   rU   rS   r$  r$  7
  s        3 3 3'4 '4 '4R#@ #@ #@J [Wrz2:&>??E E @?E E ErU   r$  c                   t    e Zd Zd Zej                            dej        ej	        g          d             Z
dS )TestHilbert2c                    t          j        dgg          }t          t          t          |           t          j        d                              ddd          }t          t          t          |           t          j        d                              dd          }t          t          t          |d           t          t          t          |d	           t          t          t          |d
           d S )Nr   r'  rF   r@   rA   r}   r   r&  )rF   r   )rF   )ro   r   r   r   r"   r   rp   r   s     rS   r  zTestHilbert2.test_bad_args
  s    Hzl^$$j(A... IbMM!!!Q**j(A... IbMM!!!Q''j(A3333j(A8888j(A666666rU   r   c                     t          j        d|          }t          t          j        t	          j        |                    j        |           d S )N)rF   rJ   r	  )ro   r  r
   r  r   r"   r   rx  s      rS   test_hilbert2_typesz TestHilbert2.test_hilbert2_types
  sC    8G5111RWV_X6677=uEEEEErU   N)r   r   r   r  ro  rp  rq  ro   r   r  r:  r   rU   rS   r7  r7  
  s`        7 7 7 [Wrz2:&>??F F @?F F FrU   r7  c                       e Zd Zedd            Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )TestPartialFractionExpansionr|   c                    t          j        |          }t          j        |          }t          j        t          |d d d f         |z
            t          | d d d f         |z
                      }t	          |          \  }}t          ||         ||         |           t          | |         ||         |           d S )Nr  )ro   r_  hypotr  r   r   )r  r  r_truep_truer  distancerowscolss           rS   assert_rp_almost_equalz3TestPartialFractionExpansion.assert_rp_almost_equal
  s    F##F##8C!!!T'
V 344!!!T'
V 3446 6 +844
dAdGVD\7CCCCAdGVD\7CCCCCCrU   c                 ^   t          g dg d          \  }}t          t          |          d           t          |d         t	          j        g d                     t          |d         t	          j        g d                     t          |d         t	          j        g d	                     t          |t	          j        g d
                     t          g dg dd          \  }}t          t          |          d           t          |d         t	          j        g d                     t          |d         t	          j        g d                     t          |d         t	          j        g d                     t          |d         t	          j        g d                     t          |d         t	          j        g d                     t          |d         t	          j        g d	                     t          |t	          j        g d
                     d S )NrD   r  r@   r   )rF   rF   r@   rE   )rE   rE   rE   r@   rF   )rE   rE   rE   rF   rF   )rE   rE   rE   rF   rF   r@   T)include_powersrC   )rE   rE   rF   rF   r@   )rE   rF   rF   r@   )rE   rE   rE   rF   r@   rA   rB   )r9   r
   rC  r   ro   poly)rO   factorsrG  s      rS   test_compute_factorsz1TestPartialFractionExpansion.test_compute_factors
  s   (III>>S\\1%%%GAJ			(:(:;;;GAJ(=(=>>>GAJ(@(@AAAD"'*<*<*<"="=>>>(III8<> > >S\\1%%%GAJ(@(@AAAGAJ(=(=>>>GAJ			(:(:;;;GAJ(@(@AAAGAJ(=(=>>>GAJ(@(@AAAD"'*<*<*<"="=>>>>>rU   c                 z    t          g ddd          \  }}t          |g d           t          |g d           d S )N)rV  gjt?g?5^I?rT  g/$ @rV  r  minr  r  )r:   r
   rO   uniquemultiplicitys      rS   test_group_polesz-TestPartialFractionExpansion.test_group_poles
  sQ    +000#u >  >V___---\999-----rU   c                    t          g dg d          \  }}}t          |g dd           t          |g dd           t          |dgd           t          dd	gg d
          \  }}}t          |d	dg           t          |ddg           t          |j        d           t          ddgg d          \  }}}t          |ddg           t          |ddg           t          |j        d           t          ddgg d          \  }}}|                     ||g dg d           t          |j        d           t          ddgg d          \  }}}|                     ||g dg d           t          |j        d           t          g dg d          \  }}}t          |g d           t          |g d           t          |ddg           t          dgg d          \  }}}t          |ddg           t          |dd g           t          |j        d           t          g d!g d"          \  }}}|                     ||g d#g d$           t          |j        d           t          g d%g d&          \  }}}|                     ||g d'g d(           t          |j        d           t          ddgg d)          \  }}}t          |dd*g           t          |ddg           t          |j        d           t          g d+g d)          \  }}}t          |dd,g           t          |ddg           t          |dg           t          g d-g d)          \  }}}t          |d.d/g           t          |ddg           t          |d0d1g           t          g d+g d2          \  }}}|                     ||g d3g d4           t          |j        d           d S )5NrB   r@   r  r|   r  r   r   r@   )gZd;O?g9#Jg&䃞ͪrA   r  )g-1ڿgeagvq-?g      r  r   rE   rC   r   ir  r   rE   )rE   r   r  r@   r   rF   )rF   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rE   rB   r   rA   )r   rE   r@   )r   r  r  )r@   gg)\(?g^I+g rh?)rE   gffffffgQg~jt?)rA   rE   )r  g333333ӿr  )rE   rF   rT  r        пrT  )rE   r   r  )rE   r   r   r   r   )rE   y              ?y             r   )r                r   rE   )r@   r   rC   rE   r@   r@   rE   rD   r   r   r   )rE   rT  rF   rB   )rF   r@   r   rs  )r|   rF   r@   r   r  E   r|   rK   )rE   rT  rA   r  )rA   y            @y            )rE         ?      r`   )r5   r   r
   r   rD  rO   r  r  r`  s       rS   test_residue_generalz1TestPartialFractionExpansion.test_residue_general
  s    ---771aA9991EEEEA9991EEEEAy!44442q'999--1aA3x(((ABx(((QVQ1a&+++..1aA1v&&&AAw'''QVQ1a&"9"9"9::1a##q???)))	+ 	+ 	+ 	QVQ1a&,,,//1a##Aq***lllCCCQVQ8881113 31aAzzz***A///000A1v&&&1#zzz**1aAe}---A2w'''QVQ***&6&6&6771a##Aq$8$8$8:J:J:J	L 	L 	LQVQ)))\\\221a##Aq)))\\\BBBQVQ1b':::..1aAAw'''A1v&&&QVQ***jjj111aABx(((A1v&&&As###---441aARy)))A1v&&&A2w'''***nnn551a##Aq*C*C*C$7$7$7	9 	9 	9AFA&&&&&rU   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 )NrQ  rR  )r   rB   r@   r  r|   )r   r  r   r   r@   )r   r   rB   r@   r  r|   )r   r   r   r  r   r   r@   )r5   r   rO   r0p0k0r1p1k1r2p2k2r3p3k3s                rS   test_residue_leading_zerosz7TestPartialFractionExpansion.test_residue_leading_zeros  s   ]]]MMM::
B---}}}==
B]]],<,<,<==
B0002H2H2HII
BB###B###B###B###B###B###B###B###B#####rU   c                    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          5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr   rS  r  r  rE   Denominator `a` is zero.r2  )r5   r   r
   r   ro  r	   r   r[  s       rS   test_resiude_degeneratez4TestPartialFractionExpansion.test_resiude_degenerate$  s)   1a&))),,1aA1v&&&ABx(((QVQ!Q--1aQVQQVQQVQ]:-GHHH 	 	AqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    CC"%C"c                 *	   t          g dg d          \  }}}|                     ||g dg d           t          |dg           t          g dg d          \  }}}|                     ||dd	gd
dgd           t          |dg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          j        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          \  }}}|                     ||g d7g d8d           t          |j        d           d S )9N)rE   rC   rC   rF   )rE   y             r  rV  )y             @y      @      @y            ()r   rE   rE   rc   )rE   rF   rE   )rE   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrA   r  gŏ1w@rE   r   )rE   r  rC   rF   r@   r   rz   rW  )rA   r  r@   rX  )rE   rt  r  rA   )rF   r  r  r
  g            ?r`  )r`  r@   r  r   )g
ףp=
?gQ?皙?)r
  UUUUUUտrr  rh  r  g
gUUUUUU@rU  rE   r  rE   rV  r   )rE   r   r  )rE   g      r  )rE   rC   rF   rt  r  rC   r  r   ird  rG   rQ  )rE   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿrq  yjM?%uyjM?%u?)ySsA?ySsArV  y-?8gDio?y-?8gDio)r6   rD  r   r
   r   ro   polymulr[  s       rS   test_residuez_generalz2TestPartialFractionExpansion.test_residuez_general3  sg   <<<)F)F)FGG1a##Aq*G*G*G$.JJ	0 	0 	0At$$$999ooo661a##Aq%68I$J%2M$B,- 	$ 	/ 	/ 	/ 	Ax3333Ar7JJJ//1aAAw'''A1v&&&QVQ999lll331a##Aq***lllCCCQVQ???KKK881aAT{+++AAw'''ARy)))B4111a##Aq$5$5$57H7H7H	J 	J 	JQVQAq62:q$i!S#B#BCC1aAt}---As|,,,QVQ:::2w//1aAs###As###A2w'''1q#h''1aAs###At$$$QVQ1mmm,,1aA1v&&&ASz***QVQ1...//1aAAw'''Ac{+++QVQ999jjj111aAQx(((A1v&&&As###Aq6:::..1aAAw'''A1v&&&QVQ<<<441aARy)))A1v&&&AAw'''999&9&9&9::1a##Aq%N %N %N%N %N %N,- 	$ 	/ 	/ 	/ 	QVQrU   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 )NrQ  rR  )rB   r@   r  r|   r   )r  r   r   r@   r   )rB   r@   r  r|   r   r   )r  r   r   r@   r   r   r   )r6   r   r^  s                rS   test_residuez_trailing_zerosz9TestPartialFractionExpansion.test_residuez_trailing_zeros  s    mmm]]];;
B...>>
Bmmm-=-=-=>>
B1113I3I3IJJ
BB###B###B###B###B###B###B###B###B#####rU   c                 `   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          5  t          dd           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          dg d	           d d d            d S # 1 swxY w Y   d S )
Nr   rS  r  r  rE   rm  r2  z6First coefficient of determinant `a` must be non-zero.r  )r6   r   r
   r   ro  r	   r   r[  s       rS   test_residuez_degeneratez5TestPartialFractionExpansion.test_residuez_degenerate  s   Aq6999--1aA1v&&&ABx(((QVQ1a..1aQVQQVQQVQ]:-GHHH 	 	QNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]:"01 1 1 	& 	& Q%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s$    CC!$C!D##D'*D'c                    g d}g d}g }g d}g d}dD ]n}t          ||||          \  }}t          ||           t          ||           t          ||||          \  }}t          ||           t          ||           od S )N)r  UUUUUUſg)r   r  r  )r   rE   r@   )rE   r|   rG   r   avgr  rK  r  r  r  rtyper)   r   r*   )	rO   r  r  r`  
b_expected
a_expectedr  rQ   rP   s	            rS   *test_inverse_unique_roots_different_rtypeszGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypes  s    %%%KKYY
"]]
 I 	+ 	+E!Q///DAqAz***Az***1a%000DAqAz***Az****	+ 	+rU   c                    g d}g d}g }g d}g d}g d}dD ]r}t          ||||          \  }}	t          ||d	           t          |	|           t          ||||          \  }}	t          ||d	           t          |	|           sd S )
Ng333333?g98ȿr{  gll?r   r  r  r  )r   r   rE   r@   )r{  gUUUUUUgUUUUUU?r@   )rE   r  r'  r  r   r|  r~  r  r  r  )
rO   r  r  r`  r  b_expected_zr  r  rQ   rP   s
             rS   ,test_inverse_repeated_roots_different_rtypeszITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypes  s    ---OO!\\
,,,&&&
H 	+ 	+E!Q///DAqAz6666Az***1a%000DAqA|%8888Az****	+ 	+rU   c                 4   g d}g d}g }t          j        t          d          5  t          |||d           d d d            n# 1 swxY w Y   t          j        t          d          5  t	          |||d           d d d            d S # 1 swxY w Y   d S )Nr  r  z`rtype` must be one ofr2  r  r~  )ro  r	   r   r)   r*   r[  s       rS   test_inverse_bad_rtypez3TestPartialFractionExpansion.test_inverse_bad_rtype  s.   ---OO]:-EFFF 	, 	,1a(++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:-EFFF 	- 	-Aq!8,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s#   AA
A
,BBBc                     dg}dg}dg}t          |||          \  }}t          |dg           t          |ddg           d S )NrE   rF   r   rV  g       )r*   r   )rO   r  r  r`  rQ   rP   s         rS    test_invresz_one_coefficient_bugz=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  sX    CCCq!Q1C5!!!C;'''''rU   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 )NrE   r   rZ  rF         ?      rE   r   r`   y      @      y      !      ?y      @      
@rE   y             y      ?       @y      ?      r
  rZ  r  rD   )rE                     ?       r  rG   rE               rA   r   rF   r   r  rA   r  r   r   r   r@   r@   r@   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prE   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rF   )rE   r   r  rb   rs  )r)   r   rO   rQ   rP   s      rS   test_invresz(TestPartialFractionExpansion.test_invres  s   qcA3##1As###A2w'''+++->->->CC1ADDDEEEACCCDDDsAh 0)))<<1AAAABBBA///000333R9 91A  9  9  9 	: 	: 	:A  7  7  7 	8 	8 	8 r2hAA//1A111222Azzz*****rU   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 )NrE   r   r  r  r  r  r
  rZ  r  rD   )g      @r  r  y            rL   r  r  r  )rC   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rF   )r   rE   rT  rF   rs  )r*   r   r  s      rS   test_invreszz)TestPartialFractionExpansion.test_invresz  s   sQC$$1As###A2w''',,,.?.?.?DD1ADDDEEEACCCDDDQx&&!1999==1ABBBCCCA///111444b: :1A  9  9  9 	: 	: 	:A  7  7  7 	8 	8 	8 Bx!Q!Q001A~~~...Azzz*****rU   c                     t          ddd          \  }}t          |ddg           t          |ddg           t          ddd          \  }}t          |ddg           t          |ddg           d S )NrE   r   r   rF   )r)   r   r*   r  s      rS   test_inverse_scalar_argumentsz:TestPartialFractionExpansion.test_inverse_scalar_arguments  s    aA1A1v&&&A2w'''q!Q1A2w'''A2w'''''rU   N)r|   )r   r   r   staticmethodrD  rI  rO  r\  rk  rn  ru  rw  ry  r  r  r  r  r  r  r  r   rU   rS   r<  r<  
  s       	D 	D 	D \	D? ? ?&. . .B' B' B'H$ $ $   O  O  O b$ $ $"& & &&+ + +&+ + +"- - -( ( (+ + +0+ + +0( ( ( ( (rU   r<  c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )TestVectorstrengthc                    t          j        dg          }d}d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr
  r  rV  r  r   rF   ro   r   r+   r
   r  r   r  rO   eventsperiodtarg_strength
targ_phasestrengthphases          rS   test_single_1dperiodz'TestVectorstrength.test_single_1dperiod  s    2$
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                 J   t          j        dg          }g d}dgdz  }t          j        g d          }t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr
  )rE   rF   r  rV  r@   )r
  r  r  rE   rF   )ro   r   r+   r
   r  r   r   r  r  s          rS   test_single_2dperiodz'TestVectorstrength.test_single_2dperiod'  s    2$qXmmm,,
(88%X]A&&&UZ###!(M:::E1ru9z#9:::::rU   c                    t          j        g d          }d}d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  r  r  r  r  r  rF   rV  r  r   r  r  s          rS   test_equal_1dperiodz&TestVectorstrength.test_equal_1dperiod4  s    88899
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                 L   t          j        g d          }ddg}dgdz  }t          j        ddg          }t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  rE   rF   rV  r  r  r  r  s          rS   test_equal_2dperiodz&TestVectorstrength.test_equal_2dperiodA  s    88899QqXsDk**
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                    t          j        g d          }d}d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  g?g @gffffff@g333333$@rE   rV  r  r   rF   r  r  s          rS   test_spaced_1dperiodz'TestVectorstrength.test_spaced_1dperiodN  s    33344
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                 L   t          j        g d          }ddg}dgdz  }t          j        ddg          }t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  rE   r
  rV  rF   r  r  r  r  s          rS   test_spaced_2dperiodz'TestVectorstrength.test_spaced_2dperiod[  s    33344RqXr2h''
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                    t          j        g d          }d}d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  r
        ?rE   UUUUUU?r
  r   rF   r  r  s          rS   test_partial_1dperiodz(TestVectorstrength.test_partial_1dperiodh  s    ...))
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                 L   t          j        g d          }g d}dgdz  }t          j        g d          }t          ||          \  }}t          |j        d           t          |j        d           t          ||           t          |dt           j        z  |z             d S )Nr  )rV  rV  rV  rV  r  rA   )r
  r
  r
  r
  rE   rF   r  r  s          rS   test_partial_2dperiodz(TestVectorstrength.test_partial_2dperiodu  s    ...))!!! 	AX...//
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rU   c                     t          j        g d          }d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           d S )Nr   r  r
  r  rV  r   ro   r   r+   r
   r  r   rO   r  r  r  r  r  s         rS   test_opposite_1dperiodz)TestVectorstrength.test_opposite_1dperiod  so    +++,,(88%X]A&&&UZ###Hm44444rU   c                     t          j        g d          }dgdz  }dgdz  }t          ||          \  }}t          |j        d           t          |j        d           t          ||           d S )Nr  rV  rG   r  rE   r  r  s         rS   test_opposite_2dperiodz)TestVectorstrength.test_opposite_2dperiod  s{    +++,,r	(88%X]A&&&UZ###Hm44444rU   c                 p    t          j        ddgg          }d}t          t          t          ||           d S )NrE   rF   rV  ro   r   r   r   r+   rO   r  r  s      rS   test_2d_events_ValueErrorz,TestVectorstrength.test_2d_events_ValueError  s6    Aq6(##j.&&AAAAArU   c                 n    d}t          j        dgg          }t          t          t          ||           d S )NrV  rE   r  r  s      rS   test_2d_period_ValueErrorz,TestVectorstrength.test_2d_period_ValueError  s2    A3%j.&&AAAAArU   c                 F    d}d}t          t          t          ||           d S )NrV  r   r   r   r+   r  s      rS   test_zero_period_ValueErrorz.TestVectorstrength.test_zero_period_ValueError  s&    j.&&AAAAArU   c                 F    d}d}t          t          t          ||           d S )NrV  r   r  r  s      rS   test_negative_period_ValueErrorz2TestVectorstrength.test_negative_period_ValueError  s&    j.&&AAAAArU   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rU   rS   r  r    s        ; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;	5 	5 	5	5 	5 	5B B B
B B B
B B B
B B B B BrU   r  c                     t          j        |           j        }t          j        | t           j                  } t          j        |t           j                  }t          | |                              |          S )zEConvert TF2SOS, casting to complex128 and back to the original dtype.)ro   r_  r   r   r0  r-   r   )rQ   rP   r   s      rS   cast_tf2sosr    sV     JqMME
BM""A
BM""A!Q<<u%%%rU   r.  c                     | j         j        dk    rNt          j        | j        d                   j         }|                     |          |                    |          }} t          | |||           dS )z1Wrap assert_allclose while casting object arrays.rZ  r   N)r   r   ro   r   flatr   r   )actualdesiredr   r   r   s        rS   assert_allclose_castr    se    |CQ((. --..u0E0EFGT400000rU   rN  c                    t          d          t          d          t          d          g}t          d          t          d          t          d          g}t          d          t          d          t          d          g}t          j        |          }|j        j        dk    sJ t          t          j        |t                    t          j        |t                    |                    t                              }| t          u rt          ||z   g|          }nt          |||          }t          d |D                       sJ t          |                    t                    |                    t                               | t
          u rddg}nt          dd          g}t          j        t          d          5   | |d	di d d d            d S # 1 swxY w Y   d S )
NrE   rF   r@   rZ  c              3   @   K   | ]}t          |t                    V  d S r-  )
isinstancer   )r   rd   s     rS   	<genexpr>z)test_nonnumeric_dtypes.<locals>.<genexpr>  s,      66!z!W%%666666rU   rV  zmust be at least 1-Dr2  rd   )r   ro   r   r   r   r#   re  r   r.   allr   r-   ro  r	   r   )rN  rd   rQ   rP   r  r  r   s          rS   test_nonnumeric_dtypesr    s   	WQZZ,A	WQZZ,A	WQZZ,A
A7<3bhq%(("(1e*<*<ahhuooNNGw!a%!$$Aq!!66v66666666FMM%(('..*?*?@@@wBxr2	z)?	@	@	@  db                 s   	GG"%G"fdgFDGOc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSOSFiltc                    t          j        ddd                              |          }t          j        ddg                              |          }t          j        ddg                              |          }t          j        g d                              |          }t	          ||          }|j        j        |k    sJ t          t          t	          ||          |          |           t          j        ddg                              |          }t          j        ddg                              |          }t          j        g d	                              |          }t          t          t	          ||          |          |           g d
}g d}t          j	        d          }t          j
        ||f          }d|_        t          ||          }t          |g d           d S )Nr   rB   rC   rE   r   r
  rh  ri  ro  )rE   rE   r   r  r   )rE   rC   )rE   rF   rF   rF   rF   rF   rF   rF   )ro   r  r   r   r  r   charr   r.   r[  rD  r  r   )rO   r	  rd   rQ   rP   rl  r}  re   s           rS   
test_rank1zTestSOSFilt.test_rank1  s   K1a  ''++HaW$$R((Hc4[!!((,, h+++,,33B77!Qy~####!'+a*;*;Q"?"?EEE HaV##B''HaV##B''h***++22266!'+a*;*;Q"?"?EEEIIIIGAJJnaV$$	COO33344444rU   c                    d}t          j        dt          j        |          dz
  t          j        |                                        |          }|                    |          }t          j        ddg                              |          }t          j        ddg                              |          }t          j        g dg dg dg dg|          }t          j        g d	g d
g dg dg|          }t          t          ||          |d          }t          ||           t          t          ||          |d          }t          ||           d S )Nr  r   rE   r   r
  r  r  r	  r  r  r  r  r	  )	ro   r  rV  rp   r   r   r.   r  r   )	rO   r	  r  rd   rQ   rP   r  r  re   s	            rS   
test_rank2zTestSOSFilt.test_rank2  s_   K275>>A-rwu~~>>FFuMMHHRLLHaW$$R((Hc3Z  ''++(IIIyyy)))YYYG!#% % % (IIIzzz===)MM+246 6 6 K1%%qq111!'1---K1%%qq111!'1-----rU   c                 \   d}t          j        dt          j        |          dz
  t          j        |                                        |          }t          j        ddg                              |          }t          j        ddg                              |          }t          t          ||          |          }t          |j	        d                   D ]N}t          |j	        d                   D ]1}t          |||f         t          |||||f                              2Od S )Nr  r   rE   r   r
  )ro   r  rV  rp   r   r   r.   r  rq   r  r   r#   )	rO   r	  r  rd   rQ   rP   re   rr   r  s	            rS   re  zTestSOSFilt.test_rank3  s   K275>>A-rwu~~>>FFuMMHaW$$R((Hc3Z  ''++ K1%%q))qwqz"" 	K 	KA171:&& K K)!AqD'71a1a43I3IJJJJK	K 	KrU   c                    t          j        ddd          \  }}t          j        ddd          \  }}t          j        ddd          \  }}t          j        t          j        ||          |          }t          j        t          j        ||          |          }	t          j        t          j        ||f         t          j        ||f         t          j        ||f         f          }
t          j                            d                              |          }t          ||	|d d         t          j
        d                    \  }}t          j        |t          ||	|dd          |          d	         f         }t          |t          ||	|                     t          |
|d d         t          j
        d
                    \  }}t          j        |t          |
|dd          |          d	         f         }t          ||           t          |
          }t          j        d|          }t          |
||          \  }}t          |t          j        d                     t          ||           d|j        z   |_        t!          t"          t          |
||           |                                }|j        d	         dd|j        d         f|_        t!          t"          t          |
||d d d d d d g df                    t          |
||          \  }}t          |d         t          j        d                     t          |d d d	d	d d f         |           d S )NrF   r  lowr  r  r  rC   ru  r   r   r   r  rE   r   )r   rE   rE   r  )r   r&   ro   r   r   r_r   r  r   r#   r  r  r.   r0   r[  r  r   r   r  )rO   r	  b1r(  b2r)  b3r*  rQ   rP   r}  rd   y_truerv  r  re   rz  zi_nds                     rS   test_initial_conditionsz#TestSOSFilt.test_initial_conditions  s    q$..Bq$..Bq$..BKB++R00KB++R00hb"fruRV}beBFmDEEINN2%%b)) Q1SbS6bhqkk:::
vwq!QrssV;;;A>>?VWQ1%5%5666C3B3BHV,<,<===	reWS!BCC&R888;;<VU+++ __GArNNQ2&&&2Q

+++R$$$ 17"j'3b9999		x{Aq"(2,7j'3qqq!!!QQQ			12	4 	4 	4 	4Q5)))2QtWbgajj111R1a
^R00000rU   c                     t           j                            d                              ddd          }|                    |          }t          j        ddd	          }t          | }|j        d         }d
}t          |j                  }d||<   |g|z   }t          j
        |          }t          ||||          \  }	}
t          ||d d d dd d f         ||          \  }}t          ||d d dd d d f         ||          \  }}t          j        ||f|          }t          ||	dd           t          ||
dd           t          |          }|d
dd
g|_        ||d d dd
d d f         z  }t          ||||          d         }t          | \  }}t!          ||          }d
|j        d
g|_        ||d d dd
d d f         z  }t%          |||||          d         }t          ||dd           d S )N   r   rB   )rF   rd  r@   r   rC   r  r  r  rE   rF   r  r	  r  vIh%<=r   )ro   r   r  r  r   r   r&   r(   r  r
  r  r.   rD  r  r0   r'   r$   r   r#   )rO   r	  rd   r  r}  	nsectionsr  shpz0r4  rz  r  r  rG  r  re   rv  rQ   rP   y_tfs                       rS    test_initial_conditions_3d_axis1z,TestSOSFilt.test_initial_conditions_3d_axis1@  sD    I!!#&&..q!*.EEHHRLL mAtE222smIaL	  17mmD	kCXc]] adr222B a2A2qqqk<<<Ba122qqqk<<<B NB8$///QU;;;;R%e<<<< __q!Q'!AAAqsAAAI,C"---a0s|11rw?!AAAqsAAAI,q!QTb111!4Q5u======rU   c                    t          j        d|          }t          j        d          }t          j        d          }t          j        t
          d          5  t          |||d           d d d            n# 1 swxY w Y   d|d d d	f<   t          j        t
          d
          5  t          |||d           d d d            d S # 1 swxY w Y   d S )N)r@   rd  r@   )rA   rC   )rA   r@   r@   rF   zshould be all onesr2  rE   )rv  r  rV  r@   zInvalid zi shape)ro   r`  r  ro  r	   r   r.   )rO   r	  rd   r}  rv  s        rS   test_bad_zi_shapezTestSOSFilt.test_bad_zi_shapen  sW    HZ$$hvXl##]:-ABBB 	+ 	+Cr****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+AAAqD	]:-?@@@ 	+ 	+Cr****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   A99A= A=(C		CCc                 0   t          j        ddd          }t          |          }t          |t	          j        d|          |          \  }}t          ||d           t	          j        |d d d d	f                             d
          |d d d	d f                             d
          z            }t          ||d           t          |t	          j        d|          |	                                          \  }}t          ||d           d S )NrC   r  r}  r  r)  ru  r  r  r@   r   r	  )
r   r&   r0   r.   ro   r[  r  rV  r   r  )rO   r	  r}  rv  re   rz  ssr   s           rS   test_sosfilt_zizTestSOSFilt.test_sosfilt_ziz  s   mAs5111__RWR__4442R%0000 WSBQBZ^^^,,s111abb5z~~2~/F/FFGGQ//// RWR__===2R%000000rU   N)
r   r   r   r  r  re  r  r  r  r  r   rU   rS   r  r    s        5 5 54. . .(K K K$1 $1 $1L,> ,> ,>\
+ 
+ 
+1 1 1 1 1rU   r  c                        e Zd Zd Zd Zd ZdS )TestDeconvolvec                 n    g d}ddg}g d}t          j        ||          \  }}t          ||           d S )N)r   rE   r   r   rE   rE   r   r   rF   rE   )	r   rF   rE   r   rF   r@   rE   r   r   )r   
deconvolver   )rO   originalimpulse_responserecorded	recovered	remainders         rS   rT   zTestDeconvolve.test_basic  sP    +++q6...%0;KLL	9	8,,,,,rU   c                     ddgddgg}ddg}t          j        t          d          5  t          j        ||          \  }}d d d            d S # 1 swxY w Y   d S )Nr   zsignal must be 1-D.r2  ro  r	   r   r   r  rO   r  r  quotientr  s        rS   test_n_dimensional_signalz(TestDeconvolve.test_n_dimensional_signal  s    FQF#q6]:-BCCC 	P 	P"("3H>N"O"OHi	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P   AAAc                     ddg}ddgddgg}t          j        t          d          5  t          j        ||          \  }}d d d            d S # 1 swxY w Y   d S )Nr   zdivisor must be 1-D.r2  r  r	  s        rS   test_n_dimensional_divisorz)TestDeconvolve.test_n_dimensional_divisor  s    q6FQF+]:-CDDD 	P 	P"("3H>N"O"OHi	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Pr  N)r   r   r   rT   r  r  r   rU   rS   r  r    sI        - - -P P PP P P P PrU   r  c                       e Zd Zd Zd ZdS )TestDetrendc                     t          t          g d                    }t          g d          }t          ||           d S )NrD   )r   r   r   )r3   r   r   )rO   	detrendeddetrended_exacts      rS   rT   zTestDetrend.test_basic  sB    E))),,--				**!)_=====rU   c                     t          g d          }t          |d          }t          |d          }t          ||           d S )N)rE   333333?rp  g?g333333@F)overwrite_dataT)r   r3   r   )rO   rd   
copy_arrayinplaces       rS   	test_copyzTestDetrend.test_copy  sP    )))**Qu555
!D111!*g66666rU   N)r   r   r   rT   r  r   rU   rS   r  r    s2        > > >
7 7 7 7 7rU   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestUniqueRootsc                     g d}t          |          \  }}t          ||d           t          |t          j        t          |                               d S )N)rU  rh  r  r  r  rd  r  r4   r   r
   ro   r[  rC  rO   r  rM  rN  s       rS   test_real_no_repeatz#TestUniqueRoots.test_real_no_repeat  sV    (((+AFAr2222\273q66??33333rU   c                 p   g d}t          |dd          \  }}t          |g dd           t          |g d           t          |dd	          \  }}t          |g d
d           t          |g d           t          |dd          \  }}t          |g dd           t          |g d           d S )N)rU  ffffff{Gz皙r
  rV  ?r  rK  tolr  )rU  r"  r
  rV  rd  r  rF   rF   rE   rF   r  )r!  r#  r
  r$  r}  )g333333g
ףp=
r
  gffffff?r4   r   r
   r  s       rS   test_real_repeatz TestUniqueRoots.test_real_repeat  s    666+A4uEEEF$;$;$;RHHHH\<<<000+A4uEEEF$<$<$<bIIII\<<<000+A4uEEEF$@$@$@"MMMM\<<<00000rU   c                     g d}t          |          \  }}t          ||d           t          |t          j        t          |                               d S )N)rU  r         ?      ?r  rw  rd  r  r  r  s       rS   test_complex_no_repeatz&TestUniqueRoots.test_complex_no_repeat  sV    ===+AFAr2222\273q66??33333rU   c                 p   g d}t          |dd          \  }}t          |g dd           t          |g d           t          |dd	          \  }}t          |g d
d           t          |g d           t          |dd          \  }}t          |g dd           t          |g d           d S )N)rU        𿚙?ffffff333333?333333?r  r+  ??r  rK  r%  )rU  r/  r  r1  rd  r  r'  r  )r.  r0  r  r+  r}  )y      𿚙?y333333?r  yffffff??r(  r  s       rS   test_complex_repeatz#TestUniqueRoots.test_complex_repeat  s   ' ' '  ,A4uEEEF$L$L$L$&	( 	( 	( 	(\<<<000+A4uEEEFJJJ$&	( 	( 	( 	( 	\<<<000+A4uEEEHHH	 	 	 	 	\<<<00000rU   c                 \   t          j        t          j        t          j        d          t          j        d                              }g d}t	          |          \  }}t          j        |          }t          t          j        |          |d           t          |g d           d S )NrB   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r|   r  )rF   rF   rF   rF   )ro   rootsr   r[  r4   sortr   r
   )rO   r  
true_rootsrM  rN  s        rS   test_gh_4915zTestUniqueRoots.test_gh_4915  s    HR[RWQZZ8899KKK
+ABGFOOZCCCC\<<<00000rU   c                     t          g d          \  }}t          |ddgd           t          |ddg           t          g dd	
          \  }}t          |ddgd           t          |ddg           d S )N)rV  r   rV  rV  r   rd  r  rF   rE   )rE   g_p   ?&.>      ?r  )r&  r9  r(  rL  s      rS   test_complex_roots_extraz(TestUniqueRoots.test_complex_roots_extra  s    +,<,<,<==FS$K<<<<\Aq6***+,D,D,D#NNNFS+$6CCCC\Aq6*****rU   c                    t           j                            d          dt           j                            d          z  z   }t          |d          \  }}t	          |t          j        |          gd           t          |dg           d S )Nr   r   rF   rd  r  )ro   r   r  r4   r   rK  r
   r  s       rS   test_single_unique_rootz'TestUniqueRoots.test_single_unique_root  sx    INN3"ry~~c':':"::+Aq11FRVAYYK<<<<\C5)))))rU   N)
r   r   r   r  r)  r,  r2  r7  r:  r<  r   rU   rS   r  r    s}        4 4 41 1 14 4 41 1 1*1 1 1+ + +* * * * *rU   r  r-  )r.  r   )r  concurrent.futuresr   r   r  r   	itertoolsr   mathr   ro  r	   r   numpy.testingr
   r   r   r   r   r   r   r   numpyr   r   ro   	scipy.fftr   rc  r   scipy.optimizer   r   scipyr   scipy.signalr   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<   r>   r   r  rs  r  r  r  r&  r)  r+  rL  r_  r  r=  r  r?  rO  rT  r  r  r  r  r  r  r  r  r  r  rp  rq  r  r  r  r  r  r  r  r   r  r  r  r8  rL  csingler  r  rN  rj  rq  ry  r  r  r  r  r  r  r$  r7  r<  r  r  r  r  r  r  r  r  r   rU   rS   <module>rK     s   



 ? ? ? ? ? ? ? ?                    * * * * * *                   
                    % % % % % % 6 6 6 6 6 6 6 6                                                                      & % % % % %4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 ! ! ! ! ! !eO eO eO eO eO eO eO eOPq4 q4 q4 q4 q4= q4 q4 q4hL L L L L L L LD?" ?" ?" ?" ?"_ ?" ?" ?"DhL hL hL hL hL hL hL hLT3 3 3  

C 
C 
C  
E! E! E! E! E! E! E! E!PM" M" M" M" M" M" M" M"`K- K- K- K- K- K- K- K-\L L L L L L L L CBB > !K6 K6 K6 K6 K6 K6 K6 K6\* * * * * * * *>& & & & & & & &A A A A A A A AH    /       /       $5        1       !2       &7       /       .   
F F FK K K
 "'29bh "blBL "
BJ ' ) * *s" s" s" s" s" s" s"	* *s"l*= *= *= *= *= *= *= *=Z !:!:!:;;D%=11'K'K'KLL0 0 ML 21 <;02 
BJGHH\= \= \= \= \= \= \= IH\=~$= $= $= $= $= $= $= $=ND D D D D D D D2]% ]% ]% ]% ]% ]% ]% ]%@N N N N Nl N N N) ) )X4 4 4 4@D D D>@ @ @>m* m* m* m* m* m* m* m*`YE YE YE YE YE YE YE YExF F F F F F F F.k( k( k( k( k( k( k( k(\RB RB RB RB RB RB RB RBj& & &1 1 1 1 '7!344  54. y))k1 k1 k1 k1 k1 k1 k1 *)k1\P P P P P P P P.7 7 7 7 7 7 7 7H* H* H* H* H* H* H* H* H* H*rU   