
    Ug$                       d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl
mZ d dlmZmZmZmZmZmZmZmZ d dlmZmZ d dlZd d	lmZ d d
lmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZNmOZO  G d d          ZP G d deP          ZQ G d d          ZR G d deR          ZS G d d          ZTd ZUd ZVd ZWd  ZX G d! d"          ZY G d# d$          ZZ G d% d&          Z[ G d' d(          Z\g d)Z]e]eIz  Z] G d* d+          Z^ G d, d-          Z_ G d. d/          Z` G d0 d1          Za G d2 d3ea          Zb G d4 d5ea          Zc G d6 d7ea          Zd G d8 d9ea          Ze G d: d;ea          Zf G d< d=ea          Zg G d> d?ea          Zh G d@ dAea          ZidB ZjdC Zke
jl        m                    dDejn        ejo        ejp        ejq        eOeNejr        ejr        ejs        ejt        eju        eg           G dE dF                      Zv G dG dH          Zwe
jl        m                    dIg dJ          e
jl        m                    dKdLdMg          e
jl        m                    dNg dO          dP                                     Zxe
jl        m                    dDejy        ejz        ej{        g           G dQ dR                      Z| G dS dT          Z} G dU dV          Z~ G dW dX          Z G dY dZe          Zd[ Zdwd\Ze
jl                            d]          d^             Ze
jl                            d]          d_             Z G d` da          Z G db dc          Z G dd de          Z G df dg          Z G dh di          ZdxdkZe
jl        m                    dle9e.f          dm             Ze
jl        m                    dDdn           G do dp                      Z G dq dr          Z G ds dt          Z G du dv          ZdS )y    N)ThreadPoolExecutoras_completed)Decimalproduct)gcd)raises)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_assert_array_lesssuppress_warnings)arrayarange)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2dcorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodhilberthilbert2lfilter
lfilter_zifiltfiltbutterzpk2tfzpk2sosinvresinvreszvectorstrengthlfiltictf2sossosfiltsosfiltfilt
sosfilt_zitf2zpkBadCoefficientsdetrendunique_rootsresidueresiduez)hann)_filtfilt_gust_compute_factors_group_poles)_upfirdn_modes)
_testutils)ComplexWarningnp_longnp_ulongc                   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)            rE   rD         rC   )rC   
             rM         r   r   r   selfabcs       b/var/www/surfInsights/venv3-11/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rC   rD   rE   )rH   rI   rC   rD   samemode)rJ   rK   "   rP   rQ   s       rV   	test_samez_TestConvolve.test_same-   sJ    IILLQ'''1eLLL1122222rX   c                 x    g d}g d}t          ||d          }t          |t          g d                     d S )NrZ   rG   r[   r\   )rJ   rK   rK   rP   rQ   s       rV   test_same_eqz_TestConvolve.test_same_eq3   sJ    IIIIQ'''1eLLL1122222rX   c                     t          g d          }t          ddg          }t          ||          }t          |t          g d                     d S )N)      ?      ?       @      ?      @      ?rc   rd   )               @y       @      @y      @       @y      @      @)r   r   r   )rR   xyzs       rV   test_complexz_TestConvolve.test_complex9   sZ    ***++66"##QNN1e$@$@$@AABBBBBrX   c                 T    d}d}t          ||          }t          |||z             d S )Ni	  i  )r   r
   rQ   s       rV   test_zero_rankz_TestConvolve.test_zero_rank?   s3    QNNQArX   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   rC   rH   directmethodr   )npr   reshaperanger   r   )rR   rS   rT   ib_shaperg   rh   s          rV   test_broadcastablez _TestConvolve.test_broadcastableE   s    IbMM!!!Q**IaLLq 	" 	"Ac!eGGAJAIIg..x@@@AAIIg..u===AAq!!!!	" 	"rX   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S Nig  iP  )r   r   r
   rQ   s       rV   test_single_elementz!_TestConvolve.test_single_elementO   sC    4&MM4&MMQNNQArX   c                     g dg dg}g dg dg}t          ||          }t          g dg dg dg          }t          ||           d S NrG   rZ   rI   rC   rD   rD   rE   rF   )rI            rO   )rJ      >   :   &   )rO      r   1   r   r   r   r   rR   rS   rT   rU   ds        rV   test_2d_arraysz_TestConvolve.test_2d_arraysU   sz    YY			"YY			"QNN%%%'''''') * * 	1a     rX   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   rI                 ?rn   rC   )                y      :@        y      9@      ?y      8@       @)y      J@        y     b@      @y      b@      &@y     @W@      &@)y      G@      @y     `@      7@y     _@      =@y     @T@      7@)y      D@      (@y     X@      @@y     @W@     B@y      K@      8@)y      Z@        y     n@      *@y     m@      7@y     `@      5@)y     q@      >@y     @      X@y     @      _@y     t@     U@)y     n@     P@y      @     f@y     @@      j@y     q@     `@)y     a@     P@y     0s@      d@y     r@     `f@y      c@     Z@)y      Q@      B@y     c@     Y@y     `b@     @\@y     @T@     R@)y     e@     @a@y     w@     u@y      v@     w@y     @g@     l@)y     @a@     e@y     r@      {@y     p@     |@y     @a@     `q@)y     Q@     @a@y      b@     0t@y     _@     Pu@y     O@     h@)y      @@      R@y      Q@     d@y     M@     e@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     L@     o@)y      C@     k@y     @R@     0@y     I@     H@y      5@     0r@)y      (@      b@y      4@     s@y      @     t@y             f@fullr[   rH   r   valid)r   rs   r   r   r   )rR   smallbig	out_arrays       rV   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 	5rX   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 NrZ   rG   spamr\   eggsr   r]   rq   hamro   r   baconr[   assert_raises
ValueErrorr   rR   rS   rT   s      rV   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NrX   N)__name__
__module____qualname__rW   r_   ra   rj   rl   rw   rz   r   r   r    rX   rV   rA   rA   %   s        F F F3 3 33 3 3C C C  " " "  ! ! !#5 #5 #5JO O O O OrX   rA   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)rH   rI   rC   rF   rE   rC   )	rI   rC   rD   rE   rC   rD   rI   rI   rH   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $)r   r   rR   rS   rT   expectedouts        rV   test_valid_mode2zTestConvolve.test_valid_mode2   s    '''###q!W%%3)))q!W%%3)))$$$VG$q!W%%3)))q!W%%3)))))rX   c                 z    g d}g d}t          ||d          }t          g d          }t          ||           d S )N)rH   rI   rC   rC   rH   rI   )rH   rD   rC   rD   rE   rF   r   rD   rC   rI   rH   rH   rC   r[   )9   =   ?   r   -   $   r   r   s        rV   test_same_modezTestConvolve.test_same_mode   sS    333Q6""***++1a     rX   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 	NrH   r   rI   rC   r   rC   rI   r]   r   )rr   r   rs   r   r   r   r   s      rV   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IrX   d   c                 t  	
 h d		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 )N>   boolint8int16int32int64uint8uint16uint32uint64float16float32float64	complex64
complex128c                 .    g | ]}D ]}d D ]}|||fS ))r   r   r[   r   ).0t1t2r]   typess       rV   
<listcomp>z5TestConvolve.test_convolve_method.<locals>.<listcomp>   sb     F F F2 F F2+DF F#' R F F F F FrX   *   r   rH   size)ru   fru   rT   ur                 ?rU   c           	      8    i | ]}|t          |           S ))rq   r]   )r   )r   keyr]   x1x2s     rV   
<dictcomp>z5TestConvolve.test_convolve_method.<locals>.<dictcomp>   s<     5 5 5 HRCdCCC 5 5 5rX   )r   ro   r   ro   r   c                     g | ]}|d v S )>   r   r   r   )r   ts     rV   r   z5TestConvolve.test_convolve_method.<locals>.<listcomp>   s    DDDaA11DDDrX   -C6?gư>rtolatolr   MbP?h㈵>:0yE>)rr   randomseedchoicerandndtypekindastyper
   r    anyr   )rR   nargsarray_typesr   r   resultskwargsr]   r   r   r   s           @@@@rV   test_convolve_methodz!TestConvolve.test_convolve_method   s;   4 4 4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rX   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)	rJ      2   3   4   5   6   <   r   rI   r   r   rp   ro   r   )rr   r   r   r   r
   )rR   r   ri   r   ro   s        rV    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...
	/ 
	/rX   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 NrH   rI   ro   rp   r   rC   r   rR   s    rV   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3rX   N)r   )	r   r   r   r   r   r   r   r  r  r   rX   rV   r   r      s{        * * *,! ! !
J 
J 
J*I *I *I *IX/ / /4 4 4 4 4rX   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 r|   r   r   r   )rR   rS   rT   r   es        rV   r   z_TestConvolve2d.test_2d_arrays   s|    YY			"YY			"%%%'''''') * * q!1a     rX   c                     g dg dg}g dg dg}t          g dg          }t          ||d          }t          ||           t          ||d          }t          ||           d S )NrI   rC   rD   rE   rF   r   r   rD   rE   rF   r   r   	   rJ   rG   rZ   r   P   b   t      r   r  rR   r  r   hgs        rV   test_valid_modez_TestConvolve2d.test_valid_mode  s    """$:$:$:;YY			")))*++q!W%%1a    q!W%%1a     rX   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  rG   rZ   r  r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rr   r   complexr   r   r   r  s        rV   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     rX   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 )NrG   rZ   r}   r~   rH   r   fill)      r   r^   rM   )rL   (   r   @   r   )rM   .   C   r   0   r   r   r   )rR   rS   rT   fillvalrU   r   s         rV   test_fillvaluez_TestConvolve2d.test_fillvalue   s    YY			"YY			"q!VVW55''''''''') * * 	1a     rX   c                    d}t           j                                        5 }|                    t          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matchrH   rI   r   	fillvaluez,`fillvalue` must be scalar or an array with )rr   testingr   filterr=   r   r   r   )rR   msgsups      rV   test_fillvalue_errorsz%_TestConvolve2d.test_fillvalue_errors*  s   BZ))++ 	:sJJ~'?@@@z555 : :QC5Aq6(b9999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 =:S111 	: 	:u1vh1a&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sG   2BA7+B7A;	;B>A;	?BBB1CCCc                 L    t          t          t          dggddggg            d S )NrH   rI   r,  r   r   r   r  s    rV   test_fillvalue_emptyz$_TestConvolve2d.test_fillvalue_empty5  s8    j*seq!fX "	$ 	$ 	$ 	$ 	$ 	$rX   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 )	NrG   rZ   r}   r~   r   wrap)r  r  J   r  r  )D   r9  r   r9  r9  r&  r   s        rV   test_wrap_boundaryz"_TestConvolve2d.test_wrap_boundary:  s    YY			"YY			"q!VV,,''''''''') * * 	1a     rX   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 )
NrG   rZ   r}   r~   r   symm)r^   r   ,   r   B   )r   r%  r   r  T   )R   r   \   n   r   r&  r   s        rV   test_sym_boundaryz!_TestConvolve2d.test_sym_boundaryC  s    YY			"YY			"q!VV,,'''''')))+ , , 	1a     rX   funczboundary, expectedr<  )g     B@      E@      F@g     F@r7  )     E@rG  rF       C@c                     t          j        g dg          }t          j        d          } |||d|          }t          ||           d S )N)       @            @      @)rH      r[   r]   boundary)rr   r   onesr   )rR   rE  rQ  r   imagekernelresults          rV   test_same_with_boundaryz'_TestConvolve2d.test_same_with_boundaryL  s\     ///011!!eV&8DDD 	68,,,,,rX   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   rH   r   r  rJ   rC   e   r[   r7  rP  )r   r   )r]   origin)	scipy.ndimagendimagerr   r   floatrs   r   r   r   )rR   ndirS   rT   rU   s        rV   test_boundary_extension_samez,_TestConvolve2d.test_boundary_extension_same]  s     	$#####Iau---55b!<<Ia...66r2>>q!&6:::1cll1afXlNNOOOOOrX   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   rH   rJ   r  rC   %   rF   r   r7  rP  )rC   rC   ra  r\   r   )
rZ  r[  rr   r   r\  rs   r   padr   r   )rR   r]  rS   rT   rU   apads         rV   test_boundary_extension_fullz,_TestConvolve2d.test_boundary_extension_fullg  s     	$#####Iae,,,44Q::Iae,,,44Q::q!&6:::va)6221cll4l@@"crcJKKKKKrX   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   )rr   r   rs   r   r   r   r   s      rV   r   z#_TestConvolve2d.test_invalid_shapesr  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KrX   N)r   r   r   r   r  r  r(  r2  r5  r:  rD  pytestmarkparametrizer   r   rV  r^  rd  r   r   rX   rV   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rX   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 )NrG   rZ   r  r  r[   )rK   rL   r^   )r  r  r  r&  )rR   r  r   r  r  s        rV   r   zTestConvolve2d.test_same_mode  ss    YY			""""$:$:$:;q!V$$<<< ==" # #1a     rX   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 )NrG   rZ   r  r  r  r   rc   r   re         @        )r         @       @rm  )rm  y      @      ?y      @      y      ;@      y      G@       @)r   r   )rR   r  r   r   r   s        rV   r   zTestConvolve2d.test_valid_mode2  s    YY			""""$:$:$:;***+Aw''3)))Aw''3)))f/0%%%'?'?'?@h'(Aw''3))) Aw''3)))))rX   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 )NrE   g	@gffffff?rC   r   r   r[   r\   )rr   r   r   r   r   r   squeezer   rR   rS   rT   r]   s       rV   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 	2rX   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 )NrC   rD   r4  r  s    rV   test_invalid_dimsz TestConvolve2d.test_invalid_dims  sT    j*a333j*qcA3777j*ug!w?????rX   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          rI     g    .Ar  rH   )iH  r   )shapestridesr   )rr   r   itemsizer<   check_free_memoryzeroslibstride_tricks
as_stridedr   r   wherer   )rR   r   rS   countfailss        rV   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}!!!!!!rX   N)r   r   r   r   r   rt  rv  rf  rg  slowxfail_on_32bitr  r   rX   rV   rj  rj    s        ! ! !* * *.	2 	2 	2@ @ @
 [[ CDD" " ED " " "rX   rj  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 )NrG   rH   rD   rJ   rO         "@r  r  r   r   r   rR   r  rS   r   r   s        rV   	test_realzTestFFTConvolve.test_real  sk    )))+++,,2::a##CCa...C!#x00000rX   rH   c                     t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          |||          }t	          ||           d S )NrG   r  rI   rH   r  r   rr   tiler   r   r  s        rV   test_real_axeszTestFFTConvolve.test_real_axes  s{    )))+++,,GA1v78aV,,!QT***!#x00000rX   c                     t          g d          }t          g d          }|dk    rt          ||          }nt          |||          }t          ||           d S )Nrc          @       @y      @      @rf   y               @y              4@y              8@y              2@r  r  r  r  s        rV   rj   zTestFFTConvolve.test_complex  sn    ***++DDDEE2::a##CCa...C!#x00000rX   c                     t          g d          }t          g d          }t          j        |ddg          }t          j        |ddg          }t          |||          }t	          ||           d S )Nr  r  rI   rH   r  r  r  s        rV   test_complex_axesz!TestFFTConvolve.test_complex_axes  s~    ***++DDDEEGA1v78aV,,!QT***!#x00000rX   c                     t          g dg dg          }t          g dg dg dg          }|dk    rt          ||          }nt          |||          }t          ||           d S )NrG   r~   rH   rD   rJ   rO   r  r   r   8   r   r   r   r!  r   r  r   r  r  r  r  s        rV   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0rX   rI   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 )NrG   r~   r  r  r  rI   rH   rH   r  r  r  s        rV   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0rX   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      @      @rd   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@r  y      $@      4@y      5@      L@y      2@      S@y      &@      N@r  r  r  r  s        rV   test_2d_complex_samez$TestFFTConvolve.test_2d_complex_same  s     ++++++- . .AAA(((<<<   2::a##CCa...C!#x00000rX   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        rV   test_2d_complex_same_axesz)TestFFTConvolve.test_2d_complex_same_axes6  s     ++++++- . .AAA(((<<<   GAyyy!!78YYY//!QT***!#x00000rX   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 )NrG   	rC   rC   rE   rF   r   r   r  r   rH        A@     D@     G@	r  g      4@      9@r  r  r  rI  g      <@rK  r  r[   r  r  rR   r  rS   rT   
expected_1
expected_2r   s          rV   test_real_same_modez#TestFFTConvolve.test_real_same_modeM  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2rX   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 )	NrG   r  r  r  rI   rH   r[   r  r  r  s          rV   test_real_same_mode_axesz(TestFFTConvolve.test_real_same_mode_axes`  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2rX   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rC   rI   rH   r  g      8@g      ?@r  rH  g     H@r        (@r  r   r  r  rR   r  rS   rT   r   r   s         rV   test_valid_mode_realz$TestFFTConvolve.test_valid_mode_realr  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0rX   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  rI   rH   r   r  r  r  s         rV   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0rX   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   rn  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r  r   r  r  r  s         rV   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0rX   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  rI   rH   r   r  r  r  s         rV   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0rX   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        rV   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0rX   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   rE   rF   r   )r   r   r   r  s    rV   
test_emptyzTestFFTConvolve.test_empty  sn    B##(A-...QFB'',1222B$$)Q./////rX   c                     t          d          }t          d          }t          ||          }t          |||z             d S ry   r   r   r
   rR   rS   rT   r   s       rV   rl   zTestFFTConvolve.test_zero_rank  sA    $KK$KK!QS!a%     rX   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S ry   r  r  s       rV   rz   z#TestFFTConvolve.test_single_element  sE    4&MM4&MM!QS!a%     rX   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   )rr   r   r   randr   r   r   allcloser  s         rV   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7rX   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   rI   rH   r  r  r  )	rr   r   r   r  r   r  r   r   r  r  s         rV   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7rX   rD   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)){   rK   )      r  r   r   r   rI   rH   rD   )rI   rH   rC   rH   rH   )rI   rH   rH   rD   rH   )rI   rH   rC   rD   rH   r  r  r   )
rr   r   r   r  r   moveaxisswapaxesr  r   r   )rR   r  a_shaperv   rS   rT   r   r   s           rV   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>>>>>>rX   r   r   rx  i  r  ry  '  rE   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  )rr   r   r  r   r   r   )rR   r   rS   rT   r   r   s         rV   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2rX   c                 v   d}t           j                            d          }|                    |          }t           j        t           j        fD ]i}||d<   t          j        dd          }d}t          j	        t          |          5  t          j        ||dd	
           d d d            n# 1 swxY w Y   jd S )Nrx  l   [<zn( r      皙?z4Use of fft convolution.*|invalid value encountered.*r*  r[   r   r   )rr   r   default_rngstandard_normalnaninfr   firwinrf  warnsRuntimeWarningr   )rR   r   rngsig_nanvalcoeffsr0  s          rV   test_fft_nanzTestFFTConvolve.test_fft_nan  s	   i##K00%%a((FBF# 	L 	LCGCL]3,,FHCnC888 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--B1	4B1	)%r   r   r   rf  rg  rh  r  r  rj   r  r  r  r  r  r  r  r  r  r  r  r  r  rl   rz   r  r  r  r  listrt   rr   r   RandomStaterandinttolistr  r   r   rX   rV   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rX   r  c                       t          d          )NzFell back to fftconvolve)RuntimeError)r   r   s     rV   fftconvolve_errr  ,  s    
1
2
22rX   c                 8    d t          | d          D             S )Nc                 H    g | ]\  }}t          ||z
            d k    ||f S )rC   )absr   rS   rT   s      rV   r   z!gen_oa_shapes.<locals>.<listcomp>1  s:       tq!1q5zzA~~ F~~rX   rI   repeatr   sizess    rV   gen_oa_shapesr  0  s/     wuQ777    rX   c                     t          |           }t          |           }d t          ||          D             }g d}d t          ||          D             S )Nc                     g | ]
\  }}||z   S r   r   )r   ishapes0ishapes1s      rV   r   z$gen_oa_shapes_2d.<locals>.<listcomp>8  s.     % % %$6Hhhx % % %rX   rq  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   rH   rI   rC   r   )r   ishapesimodes      rV   r   z$gen_oa_shapes_2d.<locals>.<listcomp><  s     C C C%QZ'!*$$gaj)@)@QZ'!*$$gaj)@)@ UH *A)@)@rX   )r  zipr   )r  shapes0shapes1shapesmodess        rV   gen_oa_shapes_2dr  5  s    E""GE""G% %'7##% % %F &%%EC C7653I3I C C C CrX   c                 8    d t          | d          D             S )Nc                 (    g | ]\  }}||k    ||fS r   r   r  s      rV   r   z$gen_oa_shapes_eq.<locals>.<listcomp>C  s0       tq!Avv FvvrX   rI   r  r   r  s    rV   gen_oa_shapes_eqr   B  s/     wuQ777    rX   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   rx  rN   c                     t           j                            |          }t           j                            |          }t          ||          }t	          ||          }t          ||           d S N)rr   r   r  r   r   r   )rR   	shape_a_0	shape_b_0rS   rT   r   r   s          rV   test_real_manylensz!TestOAConvolve.test_real_manylensH  s^     INN9%%INN9%%q!$$A!#x00000rX   )r   /   rF   rD   rH   
is_complexTFr]   rq  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   r\   r   
rr   r   r  r   setattrr   _signaltoolsr  r   r   )
rR   r%  r&  r)  r]   monkeypatchrS   rT   r   r   s
             rV   test_1d_noaxeszTestOAConvolve.test_1d_noaxesV  s     INN9%%INN9%% 	1Bry~~i0000ABry~~i0000Aq!$///F/+	- 	- 	-AD)))!#x00000rX   r  r   rH   )r   r(  rF   rD   shape_a_extrarC   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 )NrI   r   r]   r  r   r,  )rR   r  r%  r&  r1  r2  r)  r]   r/  ax_aax_brS   rT   r   r   s                  rV   test_1d_axeszTestOAConvolve.test_1d_axesj  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0rX   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 r+  r,  )rR   r%  r&  	shape_a_1	shape_b_1r]   r)  r/  rS   rT   r   r   s               rV   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0rX   rI   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 )NrC   r   rH   r   r4  r   r,  )rR   r  r%  r&  r9  r:  r]   r1  r2  r)  r/  r5  r6  rS   rT   r   r   s                    rV   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0rX   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    rV   r  zTestOAConvolve.test_empty  sn    
2r""'1,---
Aq62&&+q0111
2s##(A-.....rX   c                     t          d          }t          d          }t          ||          }t          |||z             d S ry   r   r   r
   r  s       rV   rl   zTestOAConvolve.test_zero_rank  sA    $KK$KKAS!a%     rX   c                     t          dg          }t          dg          }t          ||          }t          |||z             d S ry   r@  r  s       rV   rz   z"TestOAConvolve.test_single_element  sE    4&MM4&MMAS!a%     rX   N)r   r   r   rf  rg  r  rh  r   r  rt   r'  r  r0  r7  r  r;  r=  r  rl   rz   r   rX   rV   r"  r"  G  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/ / /! ! !! ! ! ! !rX   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 )NrH   r   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr*  r   r\   )rr   r   rs   r   r   rR   rD  rS   rT   s       rV   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)rE   rF   rI   rH   )rE   rF   rC   rH   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r*  r   rH   r  )rr   r~  r   r   rF  s       rV   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,brH   rI   rC   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 dimensionalityr*  r   r   )rR   rS   rT   rD  s       rV   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'r*  rH   rI   chipsr\   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrC   rD   )      ?rK  rM  rN  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   rJ  )rR   rD  s     rV   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)rn   rn   )rD   rD   y        ?ro   rp   )rr   r   r   iscomplexobjr   r   r   r   )rR   r   rg   rh   ress        rV   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!!!!!!rX   N)r   r   r   rf  rg  rh  r   r   r   rH  r  rN  rr   
longdoubleclongdoublerR  r   rX   rV   rC  rC    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}bn&EFF	" 	" GF	" 	" 	"rX   rC  c                   T   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ee
j        e
j        e
j        e
j        g
          d             Zej        	                    de
j        e
j        e
j        e
j        e
j        e
j        ddg          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   rA     rn   r   r#  )
r   r   r   r   r   r   H   M   r9  r>  )
r   r   r   r   r   r#  r(     r"  rY  )
r   r   r   r   r   r         _   #   )
r   r   r   r   r   r#  r^   r  rO  r>  )
r   a   rL   r9  r   rY  r   r   G   r   )
r"  r   r=  r\  r9  rM   rZ  r9  r  r?  )
rC   !   r   r$  rH   r   r8  7   rO   S   )
r   r  r#  r   r  r(  r  +   r   r   )
rM   r   X   r   '   rD   rA  r"  r   r   )
r   r   r   r   r   r[  r[  rW  rn   r   )
r   r   r   r   r   r   rZ  rO  r\  r   )
r   r   r   r   r   r(  r^   r^   r#  r^  )
r   r   r   r   r   r   r   r(  r"  r   )
r   r   r   r   r   r   r#  rb  r"  r^  )
ra  r   r   r   r   r(  r#  rd  rb  r   )
rM   r   r   r   r   r(  r#  r   rb  r   )
r   r#  r   r   r(  r#  r#  rd  r   rO  )
r   rM   ra  rf  rM   rM   rd  rd  rd  r   )
r   r   r  r   rD   rD   rZ  rZ  r  r   r   rC   c                     t          j        | j        | j                  }t          j        t          j        | j        t                    | j                  }t          || j	                   t          ||           d S r$  )
r   medfiltINKERNEL_SIZE	medfilt2drr   r   r\  r   OUT)rR   r   r  s      rV   rW   zTestMedFilt.test_basic9  sc    N47D$455RXdgu55t7GHH1dh'''1a     rX   r   c                     t          j        | j        |          }t          t	          j        |          j        |           t          t	          j        |          j        |           d S )Nr  )rr   r   ri  r
   r   rh  r   rk  rR   r   in_typeds      rV   
test_typeszTestMedFilt.test_types?  s[    
 8DG5111V^H--3U;;;V%h//5u=====rX   float96float128c                    |dv r>t          j        t           j                  j        |k    rt	          j        d|            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 )N)rq  rr  zPlatform does not support r  znot supportedr*  )rr   finforS  r   rf  skipr   ri  r	   r   r   rh  rk  rn  s      rV   test_invalid_dtypeszTestMedFilt.test_invalid_dtypesH  s_    ,,,HR]++1U::K<U<<===8DG5111]:_=== 	% 	%N8$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ]:_=== 	' 	'X&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's$   9BB!B C""C&)C&c                     d}t          t          |          5  t          j        d            d d d            d S # 1 swxY w Y   d S )Nz(dtype=object is not supported by medfiltr*  )r   r   r   rh  )rR   r0  s     rV   	test_nonezTestMedFilt.test_noneY  s    8:S111 	! 	!N4   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   ;??c                     t          j        dt           j                  }|dd         }d|_        t	          t          j        |d          dk               d S )NrJ   r  rE   rF   r   rH         @)rr   r   r   r{  r   r   rh  )rR   dummyrS   s      rV   test_odd_strideszTestMedFilt.test_odd_strides_  sS     	"BJ///!A#J	q!$$*+++++rX   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   rI   rH   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   rk  rj  )chunkMNMinMselMoutNinNselNout
chunk_datamedM1N1ro  offMoffNrR   s              rV   applyz2TestMedFilt.test_medfilt2d_parallel.<locals>.applyx  s    DAqAvvArDy))QQ||BIt,,T4((RAvvArDy))QQ||BIt,,T4((R "#s(+J":t/?@@CtTz?D$..rX   rD   )max_workers>   rH   r   r   r   r   rH   rH   rH   c                 <    h | ]}                     |          S r   )submit)r   r  r  pools     rV   	<setcomp>z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>  s'    EEEUt{{5%00EEErX   )rr   r   ri  rl  rz  rj  
zeros_liker   r   rU  r   )rR   r   r   outputchunksfuturesfuturedataMsliceNslicer  r  r  ro  r  r  r  s   `         @@@@@@@rV   test_medfilt2d_parallelz#TestMedFilt.test_medfilt2d_parallelh  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   ri  rl  rj  rW   rf  rg  rh  rr   ubytebyteushortshortr?   r>   	ulonglongr   r   rp  bool_r   r   rT  r   object_rv  rx  r|  r  r   rX   rV   rV  rV    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'/",')z2:'? @ @> >@ @> [Wrxr}')~rz2:'0*'> ? ?' '? ?'! ! !, , , [WrxRZ&HII5- 5- JI5- 5- 5-rX   rV  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)rE   rF   rD   rC   )rC   rE   rF   rI   )rI   rC   rE   rF   )rH   rF   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@_)@rF   decimalrC   )mysize)r   r   r   wiener)rR   r  r  s      rV   rW   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KrX   Nr   r   r   rW   r   rX   rV   r  r    s(        
L 
L 
L 
L 
LrX   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yorH   r   rI   r  padtyper  rJ   )r  cval)rI   rH   r   axisr  )r  )rr   r   r   
get_windowr   r   resampleresample_polyr  r   rz  )rR   signumwinsig2s        rV   rW   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#$$$$$rX   r  )Nhammingr  )r   rZ  r  )r   rX  rJ   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   rJ   F)endpointrI   g      @r  r   rH   r  &.>r  )	rr   linspacecosr   r   r  realr   sin)rR   r  r  r  rg   rh   	y_complexs          rV   	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	 	 	 	 	 	rX   c                     t          j        d          dz   }t          |          }d}t          t	          j        ||d          t	          j        ||d          d           d S )Nr  r   freq)domaintimer  r  )rr   r   r   r   r   r  )rR   tsigfsigr  s       rV   test_input_domainzTestResample.test_input_domain  sp    y~~"4yyOD#f555OD#f555	 	 	 	 	 	rX   nx)rH   rI   rC   rE   r   nyr   )r\  r  c                     t          j        dg|z  |          }t          j        ||          }t	          |dg|z             d S )NrH   )rr   r   r   r  r   )rR   r  r  r   rg   rh   s         rV   test_dczTestResample.test_dc  sH     HaS2Xu%%OAr""A38$$$$$rX   r  c                    t          j        d          }t           j                            d                              d          }|                                }t          j        |dd||           t          ||           d S )NrC   r   rI   rE   rH   r  r  )	rr   r~  r   r  r   copyr   r  r   )rR   r  impulser  window_origs        rV   test_mutable_windowz TestResample.test_mutable_window  ss     (1++&&q))//22kkmmWa67KKKK6;/////rX   c                     t          j        dt           j                  }t          j        g dt           j                  }t	          j        |dd||          }|j        t           j        k    sJ d S )NrJ   r  rH   rH   rH   rH   rI   r  )rr   r   r   r   r   r  r   )rR   r  rg   r  rh   s        rV   test_output_float32z TestResample.test_output_float32  sj     Ib
+++HYYYbj111 AqGDDDw"*$$$$$$rX   c                     t          j        d|          }t          j        |dd|          }|j        |j        k    sJ d S )NrJ   r  rH   rI   r  )rr   r   r   r  r   )rR   r  r   rg   rh   s        rV   test_output_match_dtypez$TestResample.test_output_match_dtype   sL     Ib&&& Aq':::w!'!!!!!!rX   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   rX     r     )rM        $@g      D@rI   r   r   r  rM  rJ   rH   )r  rz  r  r  r  r        ?        )r  r  333333?r  r   r  gGz?)r0  r   r  r   r   rD   )r         ?        r   r  -q=)rM  r  r  r  )rr   r   r\  r   newaxisr  pir7   r   r  r   maxr  r  r  r  r   r   rz  corrcoefr   r   r  cumsumr   interp) rR   rq   extr  raterates_tor   freqsrg   rate_tot_toy_tos	y_resampsr  updownmax_ratef_chalf_lenr  polyargsy_toy_resampr  corrr  r   y1_testy1_truer   y2_testy2_trues                                    rV   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 ?rX   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  )rI   r  O   r   r   r   r   rM  r  r  constantr  rH   Hz>r   r   )rr   r   r  intr   r   r\  r  r   r   r   r   r  r%   r   r  r   )rR   random_state	try_typesr   down_factorsr   rg   r  r  yfhcrh   s               rV   test_poly_vs_filtfiltz"TestResample.test_poly_vs_filtfiltZ  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<<<<<	=	= 	=rX   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)rI   rD   rH   r!  )rM   ra  r   r  r\   )r  r  r  )rt   rr   r   r   r   r  r   )rR   r  r  nweightsrg   weightsy_gy_ss           rV   test_correlate1dzTestResample.test_correlate1dv  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 	6rX   N)r   r   r   rW   rf  rg  rh  r  r  r  padtype_optionsr  r  rr   r   r   r  r  r   r  r   r&  r   rX   rV   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 	6rX   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)	rH   rI   rC   rD   rC   rI   rH   rI   rM  rH   r   r  )dxx0rJ   rE   r  )r   r   lenr   	cspline1dcspline1d_evalr   )rR   rh   rg   r+  cjr   y2s          rV   rW   zTestCSpline1DEval.test_basic  s    ///003q66NNqTAaD[a  CFFTM""T)"2rbQqT::: 	""TTrT(Aq999999rX   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 )NrI   r  r  rM  rf   r  )rr   r   r~  rz  r   expr  r   r.  r   r/  r
   r   )rR   rg   rh   Tr   cyxnewynews           rV   rj   zTestCSpline1DEval.test_complex  s    IaLLHQWBL111!GF4"%<!#a'(( a   x$R..TZ)))))rX   N)r   r   r   rW   rj   r   rX   rV   r)  r)    s2        
: 
: 
:* * * * *rX   r)  c                       e Zd Zd ZdS )TestOrderFiltc                 Z    t          t          j        g dg dd          g d           d S )NrG   rH   r   rH   rH   )rI   rC   rI   )r   r   order_filterr  s    rV   rW   zTestOrderFilt.test_basic  s>    6.yyy)))QGG$99	& 	& 	& 	& 	&rX   Nr  r   rX   rV   r9  r9    s#        & & & & &rX   r9  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 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ej                            dddg ej         d          g          ej                            dddg ej         d          g          d                         Z!dS )_TestLinearFilterc                     t          j        dt          j        |          dz
  t          j        |                                        |          }|                     |          S )Nr   rH   )rr   r  prodrs   convert_dtype)rR   rz  rg   s      rV   generatez_TestLinearFilter.generate  sL    K275>>A-rwu~~>>FFuMM!!!$$$rX   c                 d   | 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                   S )	NOrefs_okzerosize_okreadonly	writeonlyr   .r  )r   rr   asarrayemptyrz  nditertype)rR   arrr   iterrg   rh   s         rV   rA  z_TestLinearFilter.convert_dtype  s    :#&&*S//C(39dj11C9c3Z)M)B${m46 6D * *11R5))#J:c4444rX   c                     |                      d          }|                     ddg          }|                     ddg          }|                     g d          }t          t          |||          |           d S NrF   rH   r   r        ࿩r   rI   rD   rF   r   r  rB  rA  r   r#   rR   rg   rT   rS   y_rs        rV   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8rX   c                     |                      d          }|                     ddg          }|                     dg          }|                     g d          }t          t          |||          |           d S )NrQ  rH   r   rH   rC   rE   r   r  rT  rU  s        rV   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8rX   c                    |                      d          }|                     g d          }|                     ddg          }|                     ddg          }|                     g d          }|                     dd	g          }t          ||||
          \  }}t          ||           t          ||           d S )NrQ  rH   r   r   r  rR  rH   rI   )rH   rE   r     r   rO  r]  zirB  rA  r#   r   	rR   rg   rT   rS   r`  rV  zf_rrh   zfs	            rV   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+++++rX   c                    |                      d          }|                     g d          }|                     dg          }|                     ddg          }|                     g d          }|                     ddg          }t          ||||          \  }}t          ||           t          ||           d S )NrQ  r  rH   )rH   rI   rC   rF   r  r  r  rE   r_  ra  rb  s	            rV   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+++++rX   c                    |                      d          }|                     ddg          }|                     ddg          }|                     g dg dg dg dg          }t          |||d          }t          ||           d S )	NrD   rC   rH   r   r  r   rI   rD   rF   rD   rI   r   r  ra  )rR   rg   rT   rS   y_r2_a0rh   s         rV   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-----rX   c                    |                      d          }|                     ddg          }|                     ddg          }|                     g dg dg dg dg          }t          |||d	          }t          ||           d S )
Nri  rH   r   r  r   rI   r   rF   r  rF   rO   r^  rO   rW  irW  r  ra  )rR   rg   rT   rS   y_r2_a1rh   s         rV   test_rank_2_IIR_axis_1z(_TestLinearFilter.test_rank_2_IIR_axis_1  s    MM&!!2w''Sz**$$iii]]])MM&+ , ,Aq!!$$$!'1-----rX   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 )Nri  rH   r   r  )rD   rH   r  )r   r   )r]  r]  )rZ  rZ  )rv  rx  iir  r`  )rB  rA  rr   rR  r  r#   r   )	rR   rg   rT   rS   r`  	y_r2_a0_1rc  rh   rd  s	            rV    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+++++rX   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 )Nri  rH   r   r  )rH   rC   )rH   rC   rE   )rE   rC   rH   )r}  r}  r   ry  )rB  rA  rr   rR  r#   r   )	rR   rg   rT   rS   r`  	y_r2_a0_0rc  rh   rd  s	            rV    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+++++rX   c                 6   |                      d          }|                     ddg          |                     ddg          t          |j                  D ]>}t	          ||          }t          j        fd||          }t          ||           ?d S )NrD   rC   rI   rH   r   r  c                 &    t          |           S r$  r#   wrS   rT   s    rV   <lambda>z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>      1a0@0@ rX   rB  rA  rt   ndimr#   rr   apply_along_axisr   rR   rg   r  rh   rV  rS   rT   s        @@rV   test_rank_3_IIRz!_TestLinearFilter.test_rank_3_IIR
  s    MM)$$2w''Sz**!&MM 	. 	.D1a&&A%&@&@&@&@&@$JJC%a----	. 	.rX   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  rH   r   r  c                 6    t          |           d         S Nr_  r   r  r  rS   rT   zi1s    rV   lf0z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0      q!Q3///22rX   c                 6    t          |           d         S Nr_  rH   r  r  s    rV   lf1z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1!  r  rX   rB  rA  rt   r  r  rz  rr   rR  r#   r  r   rR   rg   r  zi_shaper`  rh   rd  r  r  rV  rc  rS   rT   r  s              @@@rV   test_rank_3_IIR_init_condz+_TestLinearFilter.test_rank_3_IIR_init_cond  sW   MM)$$2w''Sz**!&MM 	0 	0DAG}}HHTN##BGH$5$566B$$aS))CAq!T2..EAr3 3 3 3 3 3 33 3 3 3 3 3 3%c433C&sD!44D%a---%b$////	0 	0rX   c                 4   |                      d          }|                     g d          |                     dg          t          |j                  D ]>}t	          ||          }t          j        fd||          }t          ||           ?d S )Nr  r\  rH   c                 &    t          |           S r$  r  r  s    rV   r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>/  r  rX   r  r  s        @@rV   test_rank_3_FIRz!_TestLinearFilter.test_rank_3_FIR(  s    MM)$$zzz**s##!&MM 	. 	.D1a&&A%&@&@&@&@&@$JJC%a----	. 	.rX   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  r\  rH   rI   c                 6    t          |           d         S r  r  r  s    rV   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0=  r  rX   c                 6    t          |           d         S r  r  r  s    rV   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1?  r  rX   r  r  s              @@@rV   test_rank_3_FIR_init_condz+_TestLinearFilter.test_rank_3_FIR_init_cond2  sW   MM)$$zzz**s##!&MM 	0 	0DAG}}HHTN##BGH$5$566B$$aV,,CAq!T2..EAr3 3 3 3 3 3 33 3 3 3 3 3 3%c433C&sD!44D%a---%b$////	0 	0rX   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)rD   rE   r   r   r  bar  r   rH   rD   rE   r_  r   )rB  r   r&   rA  rz  rr   rR  r#   r   r   r   )rR   rg   rT   rS   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings              rV   test_zi_pseudobroadcastz)_TestLinearFilter.test_zi_pseudobroadcastF  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IrX   c                    |                      d          }|                     g d          }|                     dg          }|                     g d          }t          ||d         |          }t          ||           d S )NrF   r\  rH   )r   rH   rI   rI   rI   rI   r   ra  )rR   rg   rT   rS   rV  rh   s         rV   test_scalar_az_TestLinearFilter.test_scalar_a[  s    MM!zzz**s##  !3!3!344AqtQ!!S)))))rX   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)rC   rI   rE   lrE   rH   r   r   )rC   rH   rD   rH   rI   rC   )rC   rI   rD   rD   r   r   )rA  rr   r~  rR  r   r#   r   )rR   rg   rT   rS   r`  zf_expected
y_expectedy_iirzf_iiry_firzf_firs              rV   test_zi_some_singleton_dimsz-_TestLinearFilter.test_zi_some_singleton_dimse  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6rX   c           	          |                      |          }|                      |          }|                      |          }|                      |          }t          t          t          |||||           d S r$  )rA  r   r   r#   )rR   rT   rS   rg   r  r`  s         rV   base_bad_size_ziz"_TestLinearFilter.base_bad_size_zi  sn    q!!q!!q!!##j'1aD"=====rX   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 )NrF   rH   r   r   r   rH   rI   r  r   rH   rI   rC   rO   ri  rI   )r   rH   rI   rC   rD   rE   rZ   rC   rD   rE   )rD   rE   rF   r   )r   rH   rI   rC   rD   rE   rF   r   r   r   r  )rr   r   r  rs   )rR   r   r   s      rV   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XrX   c                 \   |                      d          }|                     dg          }|                     dg          }|                     g           }t          ||||          \  }}t          ||           t	          |j        | j                   t	          |j        d           d S )N)rE   rH   r_  r   )rB  rA  r#   r   r
   r   r   )rR   rg   rS   rT   r`  rh   rd  s          rV   test_empty_ziz_TestLinearFilter.test_empty_zi  s    MM$s##s####1aB'''2!!Q'''RXtz***RWa     rX   c                    |                      dg          }|                      dg          }t          ||ddg          }t          ||ddg          }t          ||ddg          }t          ||           t          ||           d S )NrH   rM  r   TF)rA  r,   r   )rR   rS   rT   r`  zi_1zi_2s         rV   test_lfiltic_bad_ziz%_TestLinearFilter.test_lfiltic_bad_zi  s    s##s##QB7##q!aV$$q!dE]++2t$$$2t$$$$$rX   c                    |                      dg          }|                      g d          }|                      ddg          }|                      dg          }|                      dg          }|                      ddg          }t          ||||          \  }}t          ||           t          ||           d S )	NrH   r\  rI   r   rX  r8  r_  rA  r#   r   	rR   rS   rT   r`  rg   yezferh   rd  s	            rV   test_short_x_FIRz"_TestLinearFilter.test_short_x_FIR  s     s##zzz**A''t$$%%  !S**1aB'''2!!R(((!"c*****rX   c                    |                      ddg          }|                      g d          }|                      ddg          }|                      dg          }|                      dg          }|                      ddg          }t          ||||	          \  }}t          ||           t          ||           d S )
NrH   r\  rI   r   rX  r8  ir  r_  r  r  s	            rV   test_short_x_IIRz"_TestLinearFilter.test_short_x_IIR
  s     1v&&zzz**A''t$$%%  #s,,1aB'''2!!R(((!"c*****rX   c                    |                      d          }|                     ddg          }|                                }|                     ddg          }|                                }|                     g d          }t          |||          }t	          ||           t          ||           t          ||           d S rP  rB  rA  r  r#   r   r
   rR   rg   rT   b0rS   a0rV  y_fs           rV   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rX   c                    |                      d          }|                     g d          }|                                }|                     dg          }|                                }|                     g d          }t          |||          }t	          ||           t          ||           t          ||           d S )NrQ  r;  rI   )r   r  rH   rI   rC   rN  r  r  s           rV   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rX   rS   rM  rT   c                     t           j                            d          }t          t	          t          j        dg          t          j        dg          |          t	          |||                     d S )NrJ   rM  )rr   r   r   r   r#   r   )rR   rS   rT   r  s       rV   test_scalar_inputz#_TestLinearFilter.test_scalar_input/  se     yr""BHcUOORXse__d;;Aq$	! 	! 	! 	! 	!rX   N)"r   r   r   rB  rA  rW  rZ  re  rg  rm  rt  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rf  rg  rh  rr   r   r  r   rX   rV   r>  r>    s       % % %
5 
5 
59 9 99 9 9	, 	, 	,	, 	, 	,. . .. . ., , ,, , ,. . .0 0 0(. . .0 0 0(J J J** * *7 7 76> > >^Y ^Y ^Y@	! 	! 	!	% 	% 	%+ + ++ + +
 
 

 
 
 [S3xrx}}"=>>[S3xrx}}"=>>! ! ?> ?>! ! !rX   r>  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloat32r   Nr   r   r   rr   r   r   rX   rV   r  r  8          BHSMMEEErX   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloat64r   Nr  r   rX   rV   r  r  <  r  rX   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloatExtendedr  Nr  r   rX   rV   r  r  @  r  rX   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplex64FNr  r   rX   rV   r  r  D  r  rX   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplex128DNr  r   rX   rV   r  r  H  r  rX   r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplexExtendedGNr  r   rX   rV   r  r  L  r  rX   r  c                   4    e Zd Z ej        d          Zd ZdS )TestLinearFilterDecimalrD  c                 :    t          t          |                    S r$  )r   strrR   rg   s     rV   rL  zTestLinearFilterDecimal.typeR  s    s1vvrX   N)r   r   r   rr   r   rL  r   rX   rV   r  r  O  s2        BHSMME    rX   r  c                   2    e Zd Z ej        d          ZeZdS )TestLinearFilterObjectrD  N)r   r   r   rr   r   r\  rL  r   rX   rV   r  r  V  s"        BHSMMEDDDrX   r  c                  :   t          t          d          r"dt          j        v rt          j        d           t          t          t          dgdgg d           t          t          t          dgd gg d           t          t          t          d gdgg d           d S )Nabiflagsr   z'test is flaky when run with python3-dbgrM  )rM  NrK  rM  rK  rM  )hasattrsysr  rf  ru  r   	TypeErrorr#   r   rX   rV   test_lfilter_bad_objectr  [  s     sJ ?C3<$7$7=>>>)WsecU4D4D4DEEE)WsedV___EEE)Wtfse___EEEEErX   c                  L    t          t          t          ddgddgg d           d S )NrI   rC   rD   rE   )rH   rI   rC   rD   rE   )r   NotImplementedErrorr#   r   rX   rV   !test_lfilter_notimplemented_inputr  e  s+    %w1!ukkkJJJJJrX   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   rC   rD   rH   rI   )r   rI   rE   r   rC   )rr   r  r   r   rR   r  rS   rT   rV  s        rV   _setup_rank1zTestCorrelateReal._setup_rank1o  sq    K1a  ''++K1a  ''++h''..r22!SyrX   c                     d}	 t          j        |          }t          |d          r)t          dt          j        |j                  z            }n# t          $ r Y nw xY w|S )NrF   
resolutionrR  )rr   rt  r  r  log10r  	Exception)rR   res_dtr  dt_infos       rV   equal_tolerancez!TestCorrelateReal.equal_tolerancev  ss    	hv&&Gw-- Ad28G,>#?#??@@ 	 	 	D	s   AA 
AAc                     |t           j        k    r|                     t           j                  S |                     |          S r$  )rr   rS  r  r   )rR   r  s     rV   equal_tolerance_fftz%TestCorrelateReal.equal_tolerance_fft  s;     R]""''
333''///rX   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 )NrD   rC   ro   r   rp   r  )	r   r    r
   _setup_rank3r   r   r	  r   r  )rR   r  rq   rS   rT   rV  y_ffty_directs           rV   test_methodzTestCorrelateReal.test_method  s   =='wqzzlCCF*****))"--IAq#a5111E Ah777H%c&+.2.F.Fu{.S.SV V V V &c&..2.B.B8>.R.RU U U U b))),,,,,rX   c                 B   |                      |          \  }}}t          ||d          }t          ||dd                    t          |j        |           t          ||d          }t          ||dd         d d d                    t          |j        |           d S )Nr   rH   rD   r   r   r   r   r
   r   rR   r  rS   rT   rV  rh   s         rV   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!!!!!rX   c                     |                      |          \  }}}t          ||d          }t          ||d d                    t          |j        |           d S )Nr[   r   r  r  s         rV   test_rank1_samez!TestCorrelateReal.test_rank1_same  s\    %%b))	1caF##!!S"X...QWb!!!!!rX   c                     |                      |          \  }}}t          ||d          }t          ||           t          |j        |           d S )Nr   r  r  s         rV   test_rank1_fullz!TestCorrelateReal.test_rank1_full  sT    %%b))	1caF##!!S)))QWb!!!!!rX   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t           j                                      |          }|||fS )Nr   rf  r!  )rI   rD   rE   r  )orderrN   r  r}   )r  g      g@g     @g     @     @@g     @g     }@g      d@)g      G@g      {@g     @g     @g     @     @g      @g     p@)     `@g      @g     @g     @     @g     @g     @@g     s@)g     @p@g     @g     0@g     @g     p@g     (@g     `@g     t@)g     @i@g     @     (@g      @g      @g     ؘ@g     @@g     b@)g     \@g     u@g     @g      @g      @g     @g     r@g      C@)g      7@g      y@g     ,@     @g     @g     $@g     @@g     Pr@)r  g     @g     @g     @g     @g     ԩ@g     @g     }@)g     Pt@g      @g     R@g     @g     (@g     K@g      @g     @)g     ؁@g     @g     f@g     @g     (@g     }@g     (@g     @)g      {@r  g     4@r  g     @g     ܧ@g     @     l@)g      n@g     @g     @g     @g     @g     @g     @rI  )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  )rr   r  rs   r   r   r   r  s        rV   r  zTestCorrelateReal._setup_rank3  so   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( *)& & &( '-fRjj) 	, !SyrX   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   rH   rI   rD   rC   rE   r   r  r   r   r
   r   r  s         rV   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!!!!!rX   c                     |                      |          \  }}}t          ||d          }t          ||ddddddf                    t          |j        |           d S )Nr[   r   r   rH   r  r!  r  s         rV   test_rank3_samez!TestCorrelateReal.test_rank3_same  sl    %%b))	1caF##!!S2qtQrT)9%:;;;QWb!!!!!rX   c                     |                      |          \  }}}t          ||          }t          ||           t          |j        |           d S r$  r!  r  s         rV   test_rank3_allz TestCorrelateReal.test_rank3_all  sP    %%b))	1caOO!!S)))QWb!!!!!rX   N)r   r   r   r   r  r	  r  r  r  r  r  r"  r$  r&  r   rX   rV   r  r  j  s        
  	 	 	0 0 0- - -$	" 	" 	"" " "" " "  <	" 	" 	"" " "" " " " "rX   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   )rr   r   rs   r   r   r   r   s      rV   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JrX   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      rV   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OrX   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    rV   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4rX   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 )NrG   rD   rE   r[   r\   )rE      rN   r~   )r   rM   rN   r   )rF   r   rM   rN   rO   r   rM   )r   r   r   s      rV   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<<<<<rX   N)r   r   r   r   r   r  r/  r   rX   rV   r(  r(    sV        
K 
K 
KP P P5 5 5	= 	= 	= 	= 	=rX   r(  r]   r   r[   r   behindTF
input_size)r   rX  rx  ry  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   rJ   r\   )rr   r   r  r  r  concatenater   r   r   argmaxr
   rz  )r]   r1  r2  r  in1offsetin2r   correlationlags	lag_indexs              rV   test_correlation_lagsr<    s    
 )


"
"C


j
)
)CBF nc11&993?@@7 &''lC4000KCHchT:::D	+&&Ii(+++[./////rX   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 )NrI   rC   )rr   rT  cdoubler  rt  	precision)rR   r  s     rV   r  zTestCorrelateComplex.decimal:  s9    B1rx||--1222rX   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  rJ   r   r   r\   )rr   r   r   r   r   r   r  imag)rR   r  r]   rS   rT   rV  s         rV   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rX   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         rV   r  z%TestCorrelateComplex.test_rank1_validL  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!!!!!rX   c                     |                      |d          \  }}}t          ||d          }t          |||                     |                     t	          |j        |           d S )Nr[   r  r   r   r   r  r
   r   r  s         rV   r  z$TestCorrelateComplex.test_rank1_sameW  g    %%b&11	1caF##!!S$,,r2B2BCCCCQWb!!!!!rX   c                     |                      |d          \  }}}t          ||d          }t          |||                     |                     t	          |j        |           d S )Nr   r  rG  r  s         rV   r  z$TestCorrelateComplex.test_rank1_full]  rH  rX   c                     t          j        g d|          }t          j        g d|          }t          ||          }t          |g d           d S )Nr   rc   r  r  y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      )rr   r   r   r
   rR   r  r   krh   s        rV   test_swap_fullz#TestCorrelateComplex.test_swap_fullc  sb    H---R888H555R@@@aOOQLLLMMMMMrX   c                 ^    g d}g d}t          ||d          }t          |g d           d S )NrK  rL  r[   r\   )rM  rN  rO  )r   r
   rP  s        rV   test_swap_samez#TestCorrelateComplex.test_swap_samei  sI    $$$,,,a(((Q33344444rX   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 )	NrJ   r   rF   r   rD   r   rH   r  )rr   r   r   r   r   r  rC  r   r  r
   r   r  s         rV   
test_rank3zTestCorrelateComplex.test_rank3o  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!!!!!rX   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   rH   r  rf                 @rD   )rr   r   r   r   r   r   r  rC  r   r  r
   r   r  s         rV   
test_rank0zTestCorrelateComplex.test_rank0}  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+;+;<<<<<rX   N)r   r   r   r  r   r  r  r  rR  rT  rV  rY  r   rX   rV   r>  r>  1  s        3 3 3
  	" 	" 	"" " "" " "N N N5 5 5" " "= = = = =rX   r>  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 )NrE   rp  rq  r\   r   )rr   r   r   r   r   r   rr  r   rs  s       rV    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rX   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   )rr   r   rs   r   r   r   r   r   s      rV   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SrX   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 )NrH   rf                 rX  rF   rD   y              (@)r
   r   r   r  s    rV   test_complex_inputz"TestCorrelate2d.test_complex_input  sw    V'!v66<<<V'""77;;;V'"!66<<<<<rX   N)r   r   r   r]  r   ra  r   rX   rV   r[  r[    sG        G G G&
T 
T 
T= = = = =rX   r[  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)rM  rL  r  )rM  r  rK  rz  rL  )rr   r   r$   r   )rR   rS   rT   zi_expectedr`  s        rV   rW   zTestLFilterZI.test_basic  sc    H%%%&&H___%%hT{++1!"k22222rX   c                     t          j        g d          }t          j        g d          }t          ||          }t          d|z  d|z            }t          ||d           d S )N)rI   r   rE   )rH   rH   r   rI   r  r  )rr   r   r$   r   )rR   rT   rS   r  zi2s        rV   test_scale_invariancez#TestLFilterZI.test_scale_invariance  sk     HYYYHYYYA1ac""Su------rX   r   c                     t          j        d|          }t          j        dg|          }t          t          j        t          j        ||                    j        |           d S )Nr   r  rH   )rr   r~  r   r
   r  r   r$   r   )rR   r   rT   rS   s       rV   rp  zTestLFilterZI.test_types  s\    Ha&&&HaS&&&RWV.q!4455;UCCCCCrX   N)r   r   r   rW   rh  rf  rg  rh  rr   r   r   rp  r   rX   rV   rc  rc    so        3 3 3. . . [Wrz2:&>??D D @?D D DrX   rc  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   oddNrb  c           
          | j         dk    r"t          | \  }}	t          ||	||||||          S | j         dk    rt          | }
t	          |
||||          S d S )Nrl  sos)filtfilt_kindr'   r%   r(   r/   )rR   zpkrg   r  r  padlenrq   irlenrT   rS   ro  s              rV   r%   zTestFiltFilt.filtfilt  sn    %%3<DAqAq!T7FFEJJJ5((3-CsAtWf=== )(rX   c                     t          g dg d          }|                     |t          j        d                    }t	          |t          d          d           d S )NrG   rO   g6{=r  )r1   r%   rr   r   r   )rR   rq  r   s      rV   rW   zTestFiltFilt.test_basic  sU    YYY			**mmC2//VBZZh777777rX   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   rM  rH   rJ   i  r         ?rq  r  r   )rr  r   rr  r  )rr   r  r  r  r&   r
  r  r  ceillogr%   r   vstackr
   rz  r4  )rR   r   r   xlowxhighrg   rq  repsr   rh   errx2dy2dy2dts                  rV   	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$&!!!!!rX   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     @rJ   r  rO   rC   rv  rq  r  r   rw  rH   rI   )rr   r   rs   r&   r%   r  r   )rR   rg   rq  y0y1r1  s         rV   	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5rX   c                     | j         dk    rd S t          j        ddgdt          j        d                    }t          |t          j        d          dd           d S )Nrl  r  rH   rJ   +=r   )rp  r   r%   rr   r   r   )rR   r   s     rV   test_acoeffzTestFiltFilt.test_acoeff	  sY    %%For2h29R==99RYr]]UCCCCCCrX   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 )Nrl  $gust only implemented for TF systemsrM  rK  r  rR  r   r  r  rH         ?rv  )rp  rf  ru  rr   r   r8   r   )rR   rg   rT   rS   rh   z1z2s          rV   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rX   c                     | j         dk    rt          j        d           t          j        d          }d}d}t          |||d          }||z  dz  |z  }t          ||           d S )	Nrl  r  rO   rM  rK  gustrp   rI   )rp  rf  ru  rr   r   r%   r   )rR   rg   rT   rS   rh   r   s         rV   test_gust_scalarszTestFiltFilt.test_gust_scalars#	  sw    %%K>??? IbMMQ1V,,,aC!8a<8$$$$$rX   )r   rm  Nrb  N)r   r   r   rp  r%   rW   r  r  r  r  r  r   rX   rV   rk  rk    s        M>B%)> > > >8 8 8
 "  "  "D6 6 6D D DJ J J% % % % %rX   rk  c                       e Zd ZdZd ZdS )TestSOSFiltFiltro  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   rx  rH   rF   ffffff?rq  r  r  zorder=%s)r   err_msgN)rr   r   r  r   rt   r   r&   r'   r(   r%   r/   r   )	rR   rg   r  rq  rT   rS   ro  rh   y_soss	            rV   test_equivalencez TestSOSFiltFilt.test_equivalence4	  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rX   N)r   r   r   rp  r  r   rX   rV   r  r  1	  s-        M	N 	N 	N 	N 	NrX   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 )aQ  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significantly faster than this implementation.
    c                    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.rH   Nr_  r   r   rI   )r  r-  r#   rr   sum)icsrT   rS   rg   mz0fz0br  y_fby_by_bfvalues               rV   filtfilt_gust_opt_funcz1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcI	  s    AA!#"1"g!""gaA#&&&q)q!S2Y3///244R48aAdddG,,,Q/"5q!SS)))!,ta'((rX   rH   Nr  r  r  TF)r   xtolftolmaxfunmaxiterfull_outputdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr   r_  )	r  r-  r$   rr   r4  r  r   r  r#   )rT   rS   rg   r  r  r`  r  rU  optfoptniterfuncallswarnflagr  r  r  rh   s                    rV   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;rX   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  rq   rs  )r  rs  r   rH   c                 ,    g | ]}t          |          S r   )rt   )r   r   s     rV   r   z'check_filtfilt_gust.<locals>.<listcomp>	  s    666q%((666rX   r   r  r   )rr   r   r   r   r%   r8   r  rz  
empty_liker  r-  rJ  r   r  r   )rT   rS   rz  r  rs  rg   rh   ygzg1zg2xx	out_shaper  r  zo1zo2indxs                    rV   check_filtfilt_gustr  l	  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3rX   rE   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                               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 )Nr0  )rH   rI   )r   rF   ro   r\   T)r]   measure>   r   ro   r   ro   rJ   )
complex256
complex192r  l         @ rC   rI   rH   rD   )rr   r   r   r    r
   r   
isinstancedictkeysr  rR  r  r   r   r   )r]   r  r   rQ  true_methodrg   r  rq   
method_trytimesnot_fft_conv_supps              rV   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Jud++,,,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rX   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 )NrC   {Gz?x   gffffff?rq  r  r  r  rE   r   )rI   rI   rI   rI   r   )r   elliprr   r  r
  r  rx  ry  r   r   r'   r  rt   )ri   prQ  r~  r}  approx_impulse_lenrT   rS   rs  
signal_lenr  rz  lengths                rV   test_filtfilt_gustr  	  sH    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,>?????rX   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 )TestDecimatec                     t          j        d          }t          t          t          j        |dd           t          t          t          j        |dd           d S )NrO   r  rH   )qr   rI   )rr   r   r   r  r   decimater  s     rV   test_bad_argszTestDecimate.test_bad_args	  sK    IbMMi!sa@@@@i!qC@@@@@@rX   c                     t          j        d          }t          j        |dddd                                          }t          ||d d d                    d S )NrO   rI   rH   iirFr   ftype
zero_phaserr   r   r   r  roundr   rR   rg   rh   s      rV   test_basic_IIRzTestDecimate.test_basic_IIR	  U    IbMMOAqAUuEEEKKMM1a!f%%%%%rX   c                     t          j        d          }t          j        |dddd                                          }t          ||d d d                    d S )NrO   rI   rH   firFr  r  r  s      rV   test_basic_FIRzTestDecimate.test_basic_FIR	  r  rX   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   rI   r   F)r  r  )r[  r   rH   )r   r[  )rr   r~  r   r  r
   rz  )rR   ri   d0d1s       rV   
test_shapezTestDecimate.test_shape	  sk    HX_Qe<<<RXx(((_Qe<<<RXx(((((rX   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rq   r  r   r/  r2   _test_phaseshiftrR   r1  s     rV   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     rV   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    rV   test_phaseshift_IIRz TestDecimate.test_phaseshift_IIR	  s!    Uu=====rX   c                 4    |                      dd           d S )Nr  Tr  r  r  s    rV   test_zero_phase_IIRz TestDecimate.test_zero_phase_IIR	  s!    Ut<<<<<rX   c           	         d}g d}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     }t/          t          j        |                                |z            |         ddd           &d S )Nr  )r[  r   r   r!  r   rH   皙?rI   rf   皙?r  r   rM  r  r  r  r   g?Fr  r  r   r  r  r   r   r  )rr   r   r\  r   r3  r  r  r   windowstukeyr   dltir  cheby1freqzr  denr
  	ones_liker  r  r  rE  r   angle)rR   rq   r  r   r  t_totr   r  r   r  r  r  d_tosr   systemwc_h_respsr  	h_resampssubnyqs                        rV   r  zTestDecimate._test_phaseshift	  s   ###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 "	2rX   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@rx  rK  rI   g      >@rM  r   r  r   r  )r  r  )rr   r   sqrtr  r  r   linalgnormr   r  r   )rR   sfreqr   r   rg   x_outs         rV   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6rX   c                     t          j        t          j        dt          j                  d          }t          t          j        |                    rJ d S )Nr  r  rJ   )r   r  rr   rR  r   r   isnanr  s     rV   test_long_float32zTestDecimate.test_long_float320
  sH     OBGF"*===rBBrx{{#######rX   c                     t          j        t          j        dt          j                  d          }|j        j        t          j        k    sJ d S )Nr   r  rJ   )r   r  rr   rR  r   r   rL  r   r  s     rV   test_float16_upcastz TestDecimate.test_float16_upcast6
  sA    OBGCrz:::B??w|rz))))))rX   c                    d}d}d}t          j        ddt          j        z  |z  dz  d|          \  }}}|                    t
                    t          j        dt          j        z  |z  |z            z  }|                    t
                    t          j        dt          j        z  |z  |z            z  }t          j        |||          }t          j        d          |z  }t          j        dt          j        z  |z  |z            d	t          j        d
t          j        z  |z  |z            z  z   }	t          j	        |	d|d          }
t          j
        g t          j        |||          |	R  d d d         }t          |
|           t          j	        |	d|d          }t          j        g t          j        |||          |	R  d d d         }t          ||dd           d S )Nr   rE        @@rI   rq  )r  fsrf   r  r  r`  Fr  Tr  vIh%<=r   )r   r&   rr   r  r   r  r3  r   r   r  r#   r'   r
   r%   r   )rR   fcentrefwidthr  ri   r  rQ  r  r   r   ynzpynzprefyzpyzprefs                 rV   test_complex_iir_dltiz"TestDecimate.test_complex_iir_dlti;
  s    -1RU76>!#3EbIII1aHHWrBEzG';B'> ? ??HHWrBEzG';B'> ? ??Q1%%IcNNR VBJ(1,--RVC"%K'1A56667 q!6eDDD. $&-1a"8"8 $!"$ $ $$'CaC) 	T7###oa&TBBB $&-1a"8"8 $!"$ $ $$'CaC) 	V%e<<<<<<rX   c                    d}d}d}d}t          j        ||dz  |          }t          j        |          }|t          j        dt          j        z  |z  |z            z  }|d         t          j        |          z  }t          j        |d	          }	t          j        d
          |z  }
t          j        dt          j        z  |z  |
z            dt          j        dt          j        z  |z  |
z            z  z   }t          j	        |d|	d          }t          j
        ||d	d          d d         }t          ||           t          j	        |d|	d          }t          j        |d	d|          }t          ||           d S )Nr   rE   r  r   rI   )r  rf   r   rH   r  r  r`  Fr  )r  r  r   Tr  )r   r  rr   rootsr3  r  polyr   r   r  upfirdnr
   r  )rR   r  r  r  numtapsbbasezbasezrotbzr  r   r   r   r!  r"  r#  s                   rV   test_complex_fir_dltiz"TestDecimate.test_complex_fir_dlti[
  sx    gvaxB777 rvb25j72256661X%R##IcNNR VBJ(1,--RVC"%K'1A56667 q!6eDDD.Q11555dsd;T7###oa&TBBB%aAb999S&!!!!!rX   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r$  r.  r   rX   rV   r  r  	  s        A A A
& & &
& & &
) ) )B B B
A A A
> > >= = =.2 .2 .2`
7 
7 
7$ $ $* * *
= = =@"" "" "" "" ""rX   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  )rr   r   r   r   r!   r   r  s     rV   r  zTestHilbert.test_bad_args
  sO    Hj\""j'1---IcNNj'1222222rX   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   rI   r  rH   r  rC   )rr   r  r   r  r  rz  r!   r
  r  r  r   rR  rz  rC  )rR   r  r  r   r  a1a2a3rS   r  h_absh_angleh_reals                rV   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3rX   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 )NrW  rC   rF   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)	rr   r   rs   r!   r
   r4  r   rz  r   )rR   rS   aaaana0hilbs        rV   test_hilbert_axisNzTestHilbert.test_hilbert_axisN
  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?????rX   r   c                     t          j        d|          }t          t          j        t	          j        |                    j        |           d S )Nr   r  )rr   r~  r
   r  r   r!   r   rn  s      rV   test_hilbert_typeszTestHilbert.test_hilbert_types
  sC    8AU+++RWV^H5566<eDDDDDrX   N)r   r   r   r  r:  r?  rf  rg  rh  rr   r   r   rA  r   rX   rV   r0  r0  
  s        3 3 3'4 '4 '4R#@ #@ #@J [Wrz2:&>??E E @?E E ErX   r0  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  rI   rC   rD   r   r   r2  )rI   r   )rI   )rr   r   r   r   r"   r   rs   r  s     rV   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6rX   r   c                     t          j        d|          }t          t          j        t	          j        |                    j        |           d S )N)rI   rM   r  )rr   r~  r
   r  r   r"   r   rn  s      rV   test_hilbert2_typesz TestHilbert2.test_hilbert2_types
  sC    8G5111RWV_X6677=uEEEEErX   N)r   r   r   r  rf  rg  rh  rr   r   r   rF  r   rX   rV   rC  rC  
  s`        7 7 7 [Wrz2:&>??F F @?F F FrX   rC  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  )rr   rI  hypotr
  r   r   )r}  r  r_truep_truer  distancerowscolss           rV   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CrX   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 )NrG   r  rC   r   )rI   rI   rC   rH   )rH   rH   rH   rC   rI   )rH   rH   rH   rI   rI   )rH   rH   rH   rI   rI   rC   T)include_powersrF   )rH   rH   rI   rI   rC   )rH   rI   rI   rC   )rH   rH   rH   rI   rC   rD   rE   )r9   r
   r-  r   rr   r'  )rR   factorsr'  s      rV   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"'*<*<*<"="=>>>>>rX   c                 z    t          g ddd          \  }}t          |g d           t          |g d           d S )N)rM  gjt?g?5^I?rK  g/$ @rM  r  minr  r  )r:   r
   rR   uniquemultiplicitys      rV   test_group_polesz-TestPartialFractionExpansion.test_group_poles  sQ    +000#u >  >V___---\999-----rX   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rE   rC   r  r   r  r   r   rC   )gZd;O?g9#Jg&䃞ͪrD   r  )g-1ڿgeagvq-?g      r  r   rH   rF   r   ir  r   rH   )rH   r   r  rC   r   rI   )rI   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rH   rE   r   rD   )r   rH   rC   )r   r  r  )rC   gg)\(?g^I+g rh?)rH   gffffffgQg~jt?)rD   rH   )r  g333333ӿr  )rH   rI   r_  r        пr_  )rH   r   rv  )rH   r   r   r   r   )rH   y              ?y             r   )r                r   rH   )rC   r   rF   rH   rC   rC   rH   rG   r   r   r   )rH   r_  rI   rE   )rI   rC   r   r]  )r   rI   rC   r   rw  E   r   rN   )rH   r_  rD   r  )rD   y            @y            )rH         ?      rc   )r5   r   r
   r   rP  rR   r}  r  rQ  s       rV   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&&&&&rX   c                    t          g dg d          \  }}}t          g dg d          \  }}}t          g dg d          \  }}}	t          g dg d          \  }
}}t          ||           t          ||           t          ||
           t          ||           t          ||           t          ||           t          ||           t          ||	           t          ||           d S )Nr\  r]  )r   rE   rC   r  r   )r   r  r   r   rC   )r   r   rE   rC   r  r   )r   r   r   r  r   r   rC   )r5   r   rR   r0p0k0r1p1k1r2p2k2r3p3k3s                rV   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#####rX   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   r^  r  r  rH   Denominator `a` is zero.r*  )r5   r   r
   r   rf  r	   r   rf  s       rV   test_resiude_degeneratez4TestPartialFractionExpansion.test_resiude_degeneratem  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)rH   rF   rF   rI   )rH   y             r  ra  )y             @y      @      @y            ()r   rH   rH   rf   )rH   rI   rH   )rH   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrD   r  gŏ1w@rH   r   )rH   rv  rF   rI   rC   r   r}   rb  )rD   rv  rC   rc  )rH   r^  r  rD   )rI   r  r  r  g            ?rW  )rW  rC   r  r   )g
ףp=
?gQ?皙?)r  UUUUUUտr}  rR  r  g
gUUUUUU@r`  rH   r  rH   ra  r   )rH   r   r  )rH   g      rv  )rH   rF   rI   r^  r  rF   r  r   ir[  rJ   r;  )rH   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿr|  yjM?%uyjM?%u?)ySsA?ySsArM  y-?8gDio?y-?8gDio)r6   rP  r   r
   r   rr   polymulrf  s       rV   test_residuez_generalz2TestPartialFractionExpansion.test_residuez_general|  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rX   c                    t          g dg d          \  }}}t          g dg d          \  }}}t          g dg d          \  }}}	t          g dg d          \  }
}}t          ||           t          ||           t          ||
           t          ||           t          ||           t          ||           t          ||           t          ||	           t          ||           d S )Nr\  r]  )rE   rC   r  r   r   )r  r   r   rC   r   )rE   rC   r  r   r   r   )r  r   r   rC   r   r   r   )r6   r   ri  s                rV   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#####rX   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   r^  r  r  rH   rx  r*  z6First coefficient of determinant `a` must be non-zero.r  )r6   r   r
   r   rf  r	   r   rf  s       rV   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  rv  )r   rH   rC   )rH   r   rJ   r   avgr  rV  r  r  r  rtyper)   r   r*   )	rR   r}  r  rQ  
b_expected
a_expectedr  rT   rS   s	            rV   *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****	+ 	+rX   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  rv  )r   r   rH   rC   )r  gUUUUUUgUUUUUU?rC   )rH   r  r  r   r   r  r  r  r  r  )
rR   r}  r  rQ  r  b_expected_zr  r  rT   rS   s
             rV   ,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****	+ 	+rX   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 ofr*  r  r  )rf  r	   r   r)   r*   rf  s       rV   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 )NrH   rI   r   rM  g       )r*   r   )rR   r}  r  rQ  rT   rS   s         rV    test_invresz_one_coefficient_bugz=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  sX    CCCq!Q1C5!!!C;'''''rX   c                 `   t          dgdgg           \  }}t          |dg           t          |ddg           t          g dg dg           \  }}t          |g d           t          |g d           t          ddgdd	gg d
          \  }}t          |g d           t          |g d           t          g dg dg           \  }}t          |g d           t          |g d           t          ddgddgddg          \  }}t          |g d           t          |g d           d S )NrH   r   re  rI         ?      rH   r   rc   y      @      y      !      ?y      @      
@rH   y             y      ?       @y      ?      r  re  r  rG   )rH                     ?       r  rJ   rH               rD   r   rI   r   r  rD   r  r   r   r   rC   rC   rC   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prH   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rI   )rH   r   r  re   r~  )r)   r   rR   rT   rS   s      rV   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*****rX   c                 `   t          dgdgg           \  }}t          |dg           t          |ddg           t          g dg dg           \  }}t          |g d           t          |g d           t          ddgdd	gg d
          \  }}t          |g d           t          |g d           t          g dg dg           \  }}t          |g d           t          |g d           t          ddgddgddg          \  }}t          |g d           t          |g d           d S )NrH   r   r  r  r  r  r  re  r  rG   )g      @r  r  y            rO   r  r  r  )rF   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rI   )r   rH   r_  rI   r~  )r*   r   r  s      rV   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*****rX   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 )NrH   r   r   rI   )r)   r   r*   r  s      rV   test_inverse_scalar_argumentsz:TestPartialFractionExpansion.test_inverse_scalar_argumentsW  s    aA1A1v&&&A2w'''q!Q1A2w'''A2w'''''rX   N)r   )r   r   r   staticmethodrP  rT  rZ  rg  rv  ry  r  r  r  r  r  r  r  r  r  r  r   rX   rV   rH  rH  
  s       	D 	D 	D \	D? ? ?&. . .B' B' B'H$ $ $   O  O  O b$ $ $"& & &&+ + +&+ + +"- - -( ( (+ + +0+ + +0( ( ( ( (rX   rH  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  rz  rM  r  r   rI   rr   r   r+   r
   r  r   r  rR   eventsperiodtarg_strength
targ_phasestrengthphases          rV   test_single_1dperiodz'TestVectorstrength.test_single_1dperiodc  s    2$
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   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  )rH   rI   rz  rM  rC   )r  r  r  rH   rI   )rr   r   r+   r
   r  r   r   r  r  s          rV   test_single_2dperiodz'TestVectorstrength.test_single_2dperiodp  s    2$qXmmm,,
(88%X]A&&&UZ###!(M:::E1ru9z#9:::::rX   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  rI   rM  rv  r   r  r  s          rV   test_equal_1dperiodz&TestVectorstrength.test_equal_1dperiod}  s    88899
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   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  rH   rI   rM  r  rv  r  r  s          rV   test_equal_2dperiodz&TestVectorstrength.test_equal_2dperiod  s    88899QqXsDk**
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   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$@rH   rM  r  r   rI   r  r  s          rV   test_spaced_1dperiodz'TestVectorstrength.test_spaced_1dperiod  s    33344
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   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  rH   r  rM  rI   r  r  r  r  s          rV   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:::::rX   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        ?rH   UUUUUU?r  r   rI   r  r  s          rV   test_partial_1dperiodz(TestVectorstrength.test_partial_1dperiod  s    ...))
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   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  )rM  rM  rM  rM  r  rD   )r  r  r  r  rH   rI   r  r  s          rV   test_partial_2dperiodz(TestVectorstrength.test_partial_2dperiod  s    ...))!!! 	AX...//
(88%X]A&&&UZ###Hm444E1ru9z#9:::::rX   c                     t          j        g d          }d}d}t          ||          \  }}t          |j        d           t          |j        d           t          ||           d S )Nr   r  r  r  rM  r   rr   r   r+   r
   r  r   rR   r  r  r  r  r  s         rV   test_opposite_1dperiodz)TestVectorstrength.test_opposite_1dperiod  so    +++,,(88%X]A&&&UZ###Hm44444rX   c                     t          j        g d          }dgdz  }dgdz  }t          ||          \  }}t          |j        d           t          |j        d           t          ||           d S )Nr  rM  rJ   r  rH   r  r  s         rV   test_opposite_2dperiodz)TestVectorstrength.test_opposite_2dperiod  s{    +++,,r	(88%X]A&&&UZ###Hm44444rX   c                 p    t          j        ddgg          }d}t          t          t          ||           d S )NrH   rI   rM  rr   r   r   r   r+   rR   r  r  s      rV   test_2d_events_ValueErrorz,TestVectorstrength.test_2d_events_ValueError  s6    Aq6(##j.&&AAAAArX   c                 n    d}t          j        dgg          }t          t          t          ||           d S )NrM  rH   r  r  s      rV   test_2d_period_ValueErrorz,TestVectorstrength.test_2d_period_ValueError  s2    A3%j.&&AAAAArX   c                 F    d}d}t          t          t          ||           d S )NrM  r   r   r   r+   r  s      rV   test_zero_period_ValueErrorz.TestVectorstrength.test_zero_period_ValueError  s&    j.&&AAAAArX   c                 F    d}d}t          t          t          ||           d S )NrM  r   r  r  s      rV   test_negative_period_ValueErrorz2TestVectorstrength.test_negative_period_ValueError  s&    j.&&AAAAArX   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rX   rV   r  r  a  s        ; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;; ; ;	5 	5 	5	5 	5 	5B B B
B B B
B B B
B B B B BrX   r  r  c                     | j         j        dk    rNt          j        | j        d                   j         }|                     |          |                    |          }} t          | |||           dS )z1Wrap assert_allclose while casting object arrays.rD  r   N)r   r   rr   r   flatr   r   )actualdesiredr   r   r   s        rV   assert_allclose_castr    se    |CQ((. --..u0E0EFGT400000rX   rE  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 )
NrH   rI   rC   rD  c              3   @   K   | ]}t          |t                    V  d S r$  )r  r   )r   rg   s     rV   	<genexpr>z)test_nonnumeric_dtypes.<locals>.<genexpr>
  s,      66!z!W%%666666rX   rM  zmust be at least 1-Dr*  rg   )r   rr   r   r   r   r#   r\  r   r.   allr   r-   rf  r	   r   )rE  rg   rT   rS   r  r  r   s          rV   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"fdFDc                   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	          ||          }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   rE   rF   rH   r   r  rR  rS  rY  )rH   rH   r   r  r   )rH   rF   )rH   rI   rI   rI   rI   rI   rI   rI   )rr   r  r   r   r-   r   r.   rR  r4  rz  r   )rR   r  rg   rT   rS   rV  ro  rh   s           rV   
test_rank1zTestSOSFilt.test_rank1  s   K1a  ''++HaW$$R((Hc4[!!((,, h+++,,33B77Qll!'&A,,":":C@@@ HaV##B''HaV##B''h***++22266!'&A,,":":C@@@IIIIGAJJnaV$$	COO33344444rX   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 )Nri  r   rH   r   r  rj  rk  r  ro  rp  rq  rr  r  )	rr   r  r@  rs   r   r   r.   r-   r   )	rR   r  rz  rg   rT   rS   rl  rs  rh   s	            rV   
test_rank2zTestSOSFilt.test_rank23  s[   K275>>A-rwu~~>>FFuMMHHRLLHaW$$R((Hc3Z  ''++(IIIyyy)))YYYG!#% % % (IIIzzz===)MM+246 6 6 F1aLL!!,,,!'1---F1aLL!!,,,!'1-----rX   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   rH   r   r  )rr   r  r@  rs   r   r   r.   r-   rt   rz  r   r#   )	rR   r  rz  rg   rT   rS   rh   ru   js	            rV   rV  zTestSOSFilt.test_rank3G  s   K275>>A-rwu~~>>FFuMMHaW$$R((Hc3Z  ''++ F1aLL!$$qwqz"" 	K 	KA171:&& K K)!AqD'71a1a43I3IJJJJK	K 	KrX   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 )NrI   r  lowr  r   r   rF   r_  r   r   r   r  rH   r   )r   rH   rH   r  )r   r&   rr   r   r   r_r   r  r   r#   r~  r  r.   r0   rR  rz  r   r   r  )rR   r  b1r4  b2r5  b3r6  rT   rS   ro  rg   y_truer`  r  rh   rd  zi_nds                     rV   test_initial_conditionsz#TestSOSFilt.test_initial_conditionsT  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0rX   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   rE   )rI   r[  rC   r   rF   r  rq  r  rH   rI   ry  r  r  r  r   )rr   r   r  r  r   r   r&   r(   rz  r  r~  r.   r4  r  r0   r'   r$   r   r#   )rR   r  rg   rq  ro  	nsectionsr  shpz0r  rd  r  r  r1  r  rh   r`  rT   rS   y_tfs                       rV    test_initial_conditions_3d_axis1z,TestSOSFilt.test_initial_conditions_3d_axis1z  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======rX   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)rC   r[  rC   )rD   rF   )rD   rC   rC   rI   zshould be all onesr*  rH   )r`  r  rM  rC   zInvalid zi shape)rr   rJ  r~  rf  r	   r   r.   )rR   r  rg   ro  r`  s        rV   test_bad_zi_shapezTestSOSFilt.test_bad_zi_shape  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 )NrF   r  ro  r  r!  r_  r  r  rC   r   r  )
r   r&   r0   r.   rr   rR  r  r@  r  r  )rR   r  ro  r`  rh   rd  ssr
  s           rV   test_sosfilt_zizTestSOSFilt.test_sosfilt_zi  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0rX   N)
r   r   r   r  r  rV  r  r  r  r  r   rX   rV   r  r    s        5 5 52. . .(K K K$1 $1 $1L,> ,> ,>\
+ 
+ 
+1 1 1 1 1rX   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   rH   r   r   rH   rH   r   r   rI   rH   )	r   rI   rH   r   rI   rC   rH   r   r   )r   
deconvolver   )rR   originalimpulse_responserecorded	recovered	remainders         rV   rW   zTestDeconvolve.test_basic  sP    +++q6...%0;KLL	9	8,,,,,rX   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.r*  rf  r	   r   r   r  rR   r  r
  quotientr  s        rV   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.r*  r  r  s        rV   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   rW   r  r  r   rX   rV   r  r    sI        - - -P P PP P P P PrX   r  c                   "   e Zd Zd Zd Zej                            dddg          ej                            dg d          d                         Zd	 Z	ej                            d
 e
j        ddg          ddgg          d             ZdS )TestDetrendc                     t          t          g d                    }t          g d          }t          ||           d S )NrG   )r   r   r   )r3   r   r   )rR   	detrendeddetrended_exacts      rV   rW   zTestDetrend.test_basic  sB    E))),,--				**!)_=====rX   c                     t          g d          }t          |d          }t          |d          }t          ||           d S )N)rH   333333?r{  g?g333333@F)overwrite_dataT)r   r3   r   )rR   rg   
copy_arrayinplaces       rV   	test_copyzTestDetrend.test_copy  sP    )))**Qu555
!D111!*g66666rX   r   linearr  r  r  c                     t          j        d                              ddd          }t          |||          }|j        |j        k    sJ d S )N   rE   rF   r   )rL  r  )rr   r   rs   r3   rz  )rR   r  r   r  r  s        rV   r  zTestDetrend.test_axis  sT     y''1a00Dt$777	$*,,,,,,rX   c                 f   g dg dz   }t          |dd          }t          |dd           t          j        |          d d d d f         }t          |ddd	
          }t          |dd           t	          t
                    5  t          |dd           d d d            d S # 1 swxY w Y   d S )Nr  )rE   r   rv  r^  r!  rC   )rL  bpr   r  r  rH   )rL  r%  r  )r3   r   rr   rI  r   r   )rR   r  r  s      rV   test_bpzTestDetrend.test_bp  s   yy???*DxA666		151111 z$aaa.DxAA>>>		151111 :&& 	/ 	/DxA....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   B&&B*-B*r%  r   rI   c                     t           j                            d          }|                    d          }t	          ||          }t          j        g d          }t          ||d           d S )Ni90  rJ   )r%  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr  r  )rr   r   r  r  r3   r   r   )rR   r%  r  rg   rQ  res_scipy_191s         rV   test_detrend_array_bpz!TestDetrend.test_detrend_array_bp  s~     i##E**HHRLL aB "O "O "O P P 	]777777rX   N)r   r   r   rW   r   rf  rg  rh  r  r&  rr   r   r)  r   rX   rV   r  r    s        > > >
7 7 7 [Vh
%;<<[VYYY//- - 0/ =<-
/ / / [THBHaV$4$4q!f#=>>8 8 ?>8 8 8rX   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)rL  rR  r  r  r  r[  r  r4   r   r
   rr   rR  r-  rR   r  rX  rY  s       rV   test_real_no_repeatz#TestUniqueRoots.test_real_no_repeat  sV    (((+AFAr2222\273q66??33333rX   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)rL  ffffff{Gz皙r  rM  ?r  rV  tolr  )rL  r2  r  rM  r[  r  rI   rI   rH   rI   r  )r1  r3  r  r4  r  )g333333g
ףp=
r  gffffff?r4   r   r
   r.  s       rV   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0rX   c                     g d}t          |          \  }}t          ||d           t          |t          j        t          |                               d S )N)rL  r         ?      ?r  rn  r[  r  r-  r.  s       rV   test_complex_no_repeatz&TestUniqueRoots.test_complex_no_repeat#  sV    ===+AFAr2222\273q66??33333rX   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)rL        𿚙?ffffff333333?333333?r  r;  ??r  rV  r5  )rL  r?  r  rA  r[  r  r7  r  )r>  r@  r  r;  r  )y      𿚙?y333333?r  yffffff??r8  r.  s       rV   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0rX   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 )NrE   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r   r  )rI   rI   rI   rI   )rr   r&  r   rR  r4   sortr   r
   )rR   r  
true_rootsrX  rY  s        rV   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0rX   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)rM  r   rM  rM  r   r[  r  rI   rH   )rH   g_p   ?&.>      ?r  )r6  rH  r8  rW  s      rV   test_complex_roots_extraz(TestUniqueRoots.test_complex_roots_extraH  s    +,<,<,<==FS$K<<<<\Aq6***+,D,D,D#NNNFS+$6CCCC\Aq6*****rX   c                    t           j                            d          dt           j                            d          z  z   }t          |d          \  }}t	          |t          j        |          gd           t          |dg           d S )Nr   r   rI   r[  r  )rr   r   r  r4   r   rV  r
   r.  s       rV   test_single_unique_rootz'TestUniqueRoots.test_single_unique_rootQ  sx    INN3"ry~~c':':"::+Aq11FRVAYYK<<<<\C5)))))rX   N)
r   r   r   r/  r9  r<  rB  rF  rI  rK  r   rX   rV   r+  r+    s}        4 4 41 1 14 4 41 1 1*1 1 1+ + +* * * * *rX   r+  r$  )r  r   )r  concurrent.futuresr   r   r  r   	itertoolsr   mathr   rf  r	   r   numpy.testingr
   r   r   r   r   r   r   r   numpyr   r   rr   	scipy.fftr   rZ  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<   scipy._lib._utilr=   r>   r?   rA   r   r	  rj  r  r  r  r  r   r"  rC  rV  r  r'  r  r)  r9  r>  r  r  r  r  r  r  r  r  r  r  rg  rh  r  r  r  r  r  r   r   rS  r  r(  r<  csingler@  rT  r>  r[  rc  rk  r  r  r  	fail_slowr  r  r  r0  rC  rH  r  r  r  r  r  r  r+  r   rX   rV   <module>r\     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m4 m4 m4 m4 m4= m4 m4 m4`L L L L L L L LD?" ?" ?" ?" ?"_ ?" ?" ?"DiL iL iL iL iL iL iL iLV3 3 3  

C 
C 
C  
E! E! E! E! E! E! E! E!PM" M" M" M" M" M" M" M"`- - - - - - - -D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\* * * * * * * *>& & & & & & & &M! M! M! M! M! M! M! M!`    /       /       $5        1       !2       &7       /       .   
F F FK K K
 "'29bh ('2< "
BJ ' ) * *w" w" w" w" w" w" w"	* *w"t*= *= *= *= *= *= *= *=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@ qD D D> q@ @ @>q" q" q" q" q" q" q" q"h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. v&&j1 j1 j1 j1 j1 j1 j1 '&j1ZP P P P P P P P./8 /8 /8 /8 /8 /8 /8 /8dH* H* H* H* H* H* H* H* H* H*rX   