
    -ii"                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dl	Z	d dl	m
Z d dlZd dlm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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS e	jT        jU        ZUe	jT        jV        ZVegZW ePe           G d d                      ZX ePe           G d d                      ZY ePe           G d d                      ZZd Z[d Z\d Z]d Z^ ePe            G d d                      Z_ eUdd          e	jT        `                    d  eQe           eQe           g           G d! d"                                  Za eUdd          e	jT        b                    d#          e	jT        `                    d$ejc        ejd        g           ePee          d%                                                 Ze G d& d'          Zf ePejg                   G d( d)                      Zhg d*Zieie@z  Zi G d+ d,          Zj ePejk                   G d- d.                      Zl ePejm                   G d/ d0                      Zn ePe%           G d1 d2                      Zo G d3 d4eo          Zp G d5 d6eo          Zq eUd7           G d8 d9eo                      Zr G d: d;eo          Zs G d< d=eo          Zt eUd7           G d> d?eo                      Zu ePe%          d@             Zv ePe%          dA             Zwe	jT        `                    dBg dC           eVdDdEF           ePe           G dG dH                                              Zx ePe           G dI dJ                      Zy ePe          e	jT        `                    dKg dL          e	jT        `                    dMddNg          e	jT        `                    dOdPdQdRdS e	jz        dTe	jT        j{        gU           e	jz        dVe	jT        j{        gU          g          dW                                                 Z| ePe          dX             Z} ePe          e	jT        `                    dYdZd[g           G d\ d]                                  Z~ G d^ d_          Z ePe&           G d` da                      Z ePe'e1           G db dc                      Z ePe1e'           G dd dee                      Zdf ZddgZ ePe!          e	jT                            dh          di                         Z ePe!          dj             Z eUd7          e	jT                            dh          dk                         Z ePej                   G dl dm                      Z ePe#           G dn do                      Z ePe$           G dp dq                      Z ePe"           G dr ds                      Z G dt du          Z ePe-           G dv dw                      Z eUdx           ePe0          e	jT        `                    dBg dy           G dz d{                                              Z ePej                   G d| d}                      Z ePe5           G d~ d                      Z ePe6           G d d                      Zd ZdS )    N)ThreadPoolExecutoras_completedproduct)gcd)raises)ComplexWarning)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2dcorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodenvelopehilberthilbert2lfilter
lfilter_zifiltfiltbutterzpk2tfzpk2sosinvresinvreszvectorstrengthlfiltictf2sossosfiltsosfiltfilt
sosfilt_zitf2zpkBadCoefficientsdetrendunique_rootsresidueresiduez)hann)_filtfilt_gust_compute_factors_group_poles)_upfirdn_modes)
_testutils)xp_assert_closexp_assert_equalis_numpyis_torchis_jaxis_cupyassert_array_almost_equalassert_almost_equalxp_copyxp_sizexp_default_dtypearray_namespacemake_xp_test_casemake_xp_pytest_paramSCIPY_DEVICE_xp_copy_to_numpyc                      e Zd Z edd          d             Z edd          d             Z edd          d             Zd Z edd          d	             Z	 ed
d          d             Z
 edd          d             Z edd          d             Z ed           ed          d                         Z ed           ed          d                         Zd Z edd          d             Z edd          d             Z edd          d             Z ed
d          d"d            Z edd          d             Z ed
          d              Zd!S )#TestConvolve	jax.numpy2jax returns floats; scipy returns ints; cf gh-6076reasonc                     |                     g d          }|                     g d          }t          ||          }t          ||                     g d                     d S )N)            rM   rL         rK   )rK   
             rU         asarrayr   r5   selfxpabcs        i/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/signal/tests/test_signaltools.py
test_basiczTestConvolve.test_basic-   sg     JJ)))**JJyyy!!QNN2::&E&E&EFFGGGGG    c                     |                     g d          }|                     g d          }t          ||d          }t          ||                     g d                     d S )NrK   rL   rM   )rP   rQ   rK   rL   samemode)rR   rS   "   rX   rZ   s        r`   	test_samezTestConvolve.test_same5   sh     JJyyy!!JJ|||$$Q'''2::lll3344444rb   c                     |                     g d          }|                     g d          }t          ||d          }t          ||                     g d                     d S )Nrd   rO   re   rf   )rR   rS   rS   rX   rZ   s        r`   test_same_eqzTestConvolve.test_same_eq=   sh     JJyyy!!JJyyy!!Q'''2::lll3344444rb   c                     |                     g d          }|                     ddg          }t          ||          }t          ||                     g d                     d S )N)      ?      ?       @      ?      @      ?rm   rn   )               @y       @      @y      @       @y      @      @rX   )r[   r\   xyzs        r`   test_complexzTestConvolve.test_complexE   sf    JJ///00JJ'((QNN2::&B&B&BCCDDDDDrb   zwrong output dtypec                     |                     d          }|                     d          }t          ||          }t          |||z             d S Ni	  i  rX   rZ   s        r`   test_zero_rankzTestConvolve.test_zero_rankK   sK    JJtJJtQNN1q5!!!!!rb   Tzpure pythonnp_onlyrI   c                 D    d}d}t          ||          }|||z  k    sJ d S rv   r   rZ   s        r`   test_zero_rank_python_scalarsz*TestConvolve.test_zero_rank_python_scalarsR   s.    QNNAEzzzzzzrb   zdisagreement between methodsc           
         |                     |                    d          d          }|                    d          }t          d          D ]}dgdz  }d||<   t          ||                     |t	          |                    d          }t          ||                     |t	          |                    d          }t          ||d	           d S )
N   rK   rK   rK   rK   rP   directmethodr
   +=atol)reshapearangeranger   tupler4   )r[   r\   r]   r^   ib_shaperq   rr   s           r`   test_broadcastablezTestConvolve.test_broadcastableY   s    JJryy}}i00IIaLLq 	. 	.Ac!eGGAJBJJq%..99(KKKABJJq%..99%HHHAAqu-----	. 	.rb   c                     |                     dg          }|                     dg          }t          ||          }t          |||z             d S Ng  P  rX   rZ   s        r`   test_single_elementz TestConvolve.test_single_elemente   sO    JJvJJvQNN1q5!!!!!rb   cupyc                     |                     g dg dg          }|                     g dg dg          }t          ||          }|                     g dg dg dg          }t          ||           d S NrO   rd   rQ   rK   rL   rL   rM   rN   )rQ            rW   )rR      >   :   &   )rW      r   1   r   rX   r[   r\   r]   r^   r_   ds         r`   test_2d_arrayszTestConvolve.test_2d_arraysl   s     JJ			999-..JJ			999-..QNNJJ***'''''') * * 	1rb   torchc           
         |                     |                    d          d          }d|                     |                    d|j                  d          z  }||                     |                    d|j                  d d d         d          z  }|                    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   rQ   rQ   rQ                 ?r~   dtyper   )                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@fullre   rP   rK   r   valid)r   r   
complex128rY   r5   r   )r[   r\   smallbig	out_arrays        r`   test_input_swappingz TestConvolve.test_input_swappingw   sn    

299Q<<332::bii"-i@@)LLLrzz"))Bbm)<<TTrTBINNNJJ1116667776668
 :99;;;======?
 ;::>>>>>><<<>
 :99<<<:::888:;< <	* 	V44i@@@eV44i@@@V44$QqS!A#qs]3	5 	5 	5eV44$QqS!A#qs]3	5 	5 	5W55$QqS!A#qs]3	5 	5 	5eW55$QqS!A#qs]3	5 	5 	5 	5 	5rb   c                    |                     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 Nrd   rO   spamrf   eggsr
   rg   r   hamr   r   baconre   )rY   assert_raises
ValueErrorr   r[   r\   r]   r^   s       r`   test_invalid_paramsz TestConvolve.test_invalid_params   s    JJyyy!!JJyyy!!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Nrb   dtypes do not matchc                 "   |                     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)rP   rQ   rK   rN   rM   rK   )	rQ   rK   rL   rM   rK   rL   rQ   rQ   rP   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $rX   r[   r\   r]   r^   expectedouts         r`   test_valid_mode2zTestConvolve.test_valid_mode2   s    JJ)))**JJ22233::...//q!W%%X&&&q!W%%X&&&JJ///00JJ'((::vw/00q!W%%X&&&q!W%%X&&&&&rb   c                     |                     g d          }|                     g d          }t          ||d          }|                     g d          }t          ||           d S )N)rP   rQ   rK   rK   rP   rQ   )rP   rL   rK   rL   rM   rN   r   rL   rK   rQ   rP   rP   rK   re   )9   =   ?   r   -   $   rX   r   s         r`   test_same_modezTestConvolve.test_same_mode   sq    JJ)))**JJ>>>??Q6""JJ///001rb   zdifferent exceptionc                 *   |                     |                    dd          d          }|                     |                    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 	NrP   r   rQ   rK   r   rK   rQ   rg   r   )r   r   r   r   r   r   s       r`   test_invalid_shapesz TestConvolve.test_invalid_shapes   s     JJryyA//JJryyQ''00j(IaVIII7HIIIj(IaVIII7HIIIIIrb   zTODO: convert this testd   c                 ,  
 h dfdD             }t           j                            d          }|                    ddg|          |                    |          d}|d         x|d	<   |d
<   |d         d|d         z  z   |d<   |D ]\  }}
|t          j        |          j                                     |          |t          j        |          j                                     |          
fddD             }|d         j        |d         j        k    sJ d|v rd|v rt                    dk    sJ 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	complex64r   c                 .    g | ]}D ]}d D ]}|||fS ))r   r   re    ).0t1t2rg   typess       r`   
<listcomp>z5TestConvolve.test_convolve_method.<locals>.<listcomp>   sb     F F F2 F F2+DF F#' R F F F F Frb   *   r   rP   size)r   fr   r^   ur                 ?r_   c           	      8    i | ]}|t          |           S ))r   rg   r{   )r   keyrg   x1x2s     r`   
<dictcomp>z5TestConvolve.test_convolve_method.<locals>.<dictcomp>   s<     5 5 5 HRCdCCC 5 5 5rb   )r
   r   r
   r   r   c                     g | ]}|d v S )>   r   r   r   )r   ts     r`   r   z5TestConvolve.test_convolve_method.<locals>.<listcomp>   s    DDDaA11DDDrb   -C6?ư>rtolr   r   MbP?h㈵>:0yE>)nprandomRandomStatechoicerandnr   kindastyper   anyr4   )r[   r\   nargsrngarray_typesr   r   resultskwargsrg   r   r   r   s             @@@@r`   test_convolve_methodz!TestConvolve.test_convolve_method   s4   4 4 4F F F F F F F
 i##B''JJ1vAJ66IIaLL* *.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 5>'78+<+BBBBB||")"b11X==== 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rb   c                 D   dD ]}|                     d|z  g|j                  }t          ||d          }t          ||d          }|dk     rP|                     dd|z  z  g          }t          ||           t          ||d	           t          ||d	           d S )
N)	rR      2   3   4   5   6   <   r   rQ   r   r
   r   r   r  Fcheck_dtype)rY   r   r   r5   )r[   r\   r
  rs   r
   r   vals          r`    test_convolve_method_large_inputz-TestConvolve.test_convolve_method_large_input   s     6 	@ 	@A

AqD6
22A1a...Ca8444F
 2vvjj!ac(,,V,,,Se<<<<????	@ 	@rb   ry   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 NrP   rQ   r   r   r
   rK   )r   r   r   r[   r\   s     r`   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3rb   N)r   )__name__
__module____qualname__skip_xp_backendsra   ri   rk   rt   xfail_xp_backendsrw   r|   r   r   r   r   r   r   r   r   r  r  r!  r   rb   r`   rE   rE   *   s9        kCE E EH HE EH kCE E E5 5E E5 kCE E E5 5E E5E E E {+?@@@" " A@" d=999  :9 {+IJJJ	. 	. KJ	. {+?@@@" " A@" k##f   $# gf#5 #5  #5JO O O k*?@@@' ' A@', k*?@@@  A@ f%:;;;
J 
J <;
J d+DEEE*I *I *I FE*IX k*?@@@@ @ A@@" d###4 4 $#4 4 4rb   rE   c            	       f   e Zd Z edd          d             Z edd          d             Z edd          d             Z edd          d	             Zd
 Zd Z	 edd          d             Z
 edd          d             Z edd          ej                            deeg          ej                            ddg dgfdg dgfg          d                                     Z edd          d             Z edd          d             Zd Z edd          d             Z edd          d             Z edd          d             Zd Zej        j        ej                            d           ed d!"          d#                                     Zd$S )%TestConvolve2drF   r   rH   c                     |                     g dg dg          }|                     g dg dg          }|                     g dg dg dg          }t          ||          }t          ||           d S r   rY   r   r5   )r[   r\   r]   r^   r   es         r`   r   zTestConvolve2d.test_2d_arrays   s    JJ			999-..JJ			999-..JJ***'''''') * * q!1rb   c                 &   |                     g dg dg          }|                     g dg dg          }|                     g dg          }t          ||d          }t          ||           t          ||d          }t          ||           d S )NrQ   rK   rL   rM   rN   r   r   rL   rM   rN   r   r   	   rR   rO   rd   r   P   b   t      r   r*  r[   r\   r+  r   hgs         r`   test_valid_modezTestConvolve2d.test_valid_mode*  s    JJ---/E/E/EFGGJJ			999-..JJ.../00q!W%%1 q!W%%1rb   r   c                 :   |                     g dg dg          }|                     g dg dg|j                  dz   }|                     g dg          }t          ||d          }t          ||           t          ||d          }t	          ||           d S )	Nr-  r.  rO   rd   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rY   r   r   r4   r5   r5  s         r`   test_valid_mode_complxz%TestConvolve2d.test_valid_mode_complx7  s    JJ---/E/E/EFGGJJ			999-R]JCCbHJJLLLMNNq!W%%1 q!W%%1rb   zjax only allows fillvalue=0c                     |                     g dg dg          }|                     g dg dg          }d}t          ||dd|          }|                     g dg d	g d
g          }t          ||           d S )NrO   rd   r   r   rP   r   fill)      r   rh   rU   )rT   (   r   @   r  )rU   .   C   r   0   r*  )r[   r\   r]   r^   fillvalr_   r   s          r`   test_fillvaluezTestConvolve2d.test_fillvalueD  s    JJ			999-..JJ			999-..q!VVW55JJ,,,'''''') * * 	1rb   c                    d}t          j                    5  t          j        ddt                     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 ignorezCasting complex valuesmatchrP   rQ   r   	fillvaluez,`fillvalue` must be scalar or an array with )warningscatch_warningsfilterwarningsr	   r   r   r   )r[   r\   msgs      r`   test_fillvalue_errorsz$TestConvolve2d.test_fillvalue_errorsO  s   B$&& 	: 	:#H.FWWWz555 : :QC5Aq6(b9999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
 =:S111 	: 	:u1vh1a&9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sG   2BA, B,A0	0B3A0	4BB
B&CCCc                 L    t          t          t          dggddggg            d S )NrP   rQ   rJ  r   r   r   r   s     r`   test_fillvalue_emptyz#TestConvolve2d.test_fillvalue_emptyZ  s8    j*seq!fX "	$ 	$ 	$ 	$ 	$ 	$rb   z!jax only supports boundary='fill'c                     |                     g dg dg          }|                     g dg dg          }t          ||dd          }|                     g dg dg dg          }t          ||           d S )	NrO   rd   r   r   r   wrap)r1  r1  J   r1  r1  )D   rW  r   rW  rW  r*  r   s         r`   test_wrap_boundaryz!TestConvolve2d.test_wrap_boundary_  s    JJ			999-..JJ			999-..q!VV,,JJ,,,'''''') * * 	1rb   c                     |                     g dg dg          }|                     g dg dg          }t          ||dd          }|                     g dg dg d	g          }t          ||           d S )
NrO   rd   r   r   r   symm)rh   r   ,   r   B   )r  rC  r   r1  T   )R   r   \   n   r   r*  r   s         r`   test_sym_boundaryz TestConvolve2d.test_sym_boundaryi  s    JJ			999-..JJ			999-..q!VV,,JJ,,,''')))+ , , 	1rb   funczboundary, expectedrZ  )g     B@      E@      F@g     F@rU  )     E@re  rd       C@c                     |                     g dg          }|                    d          } |||d|          }t          ||                     |                     d S )N)       @            @      @)rP      re   rg   boundary)rY   onesr5   )r[   rc  ro  r   r\   imagekernelresults           r`   test_same_with_boundaryz&TestConvolve2d.test_same_with_boundarys  sl     

111233!!eV&8DDD 	

8 4 455555rb   c           	      J   dd l m} |                    |                    dd|j                  d          }|                    |                    dd|j                  d          }t          ||dd	
          }t          ||                    ||d	d                     d S )Nr   rP   r   r   )rR   rK   e   )rR   rR   re   rU  rn  )r   r   )rg   origin)scipy.ndimagendimager   r   r   r   r5   r   )r[   r\   ndir]   r^   r_   s         r`   test_boundary_extension_samez+TestConvolve2d.test_boundary_extension_same  s    
 	$#####JJryyF"*y==wGGJJryyG2:y>>IIq!&6:::3<<16(<KKLLLLLrb   c           
      <   dd l m} |                    |                    dd|j                  d          }|                    |                    dd|j                  d          }t          ||dd	
          }t          j        ddt                                        dd          }t          j        |dd	          }|	                    |          }t          ||	                    |                    ||d	          d dd df                              d S )Nr   rP   rR   r   rK   rK   %   )rN   rN   r   rU  rn  rK   )r}  r}  rf   r   )rx  ry  r   r   r   r   r  floatpadrY   r5   r   )	r[   r\   rz  r]   r^   r_   a_npapad_npapads	            r`   test_boundary_extension_fullz+TestConvolve2d.test_boundary_extension_full  s
   
 	$#####JJryyEy<<fEEJJryyEy<<fEEq!&6:::yF%00088A>>&/88zz'""2::cll4l&H&H"crc&RSSTTTTTrb   c                 *   |                     |                    dd          d          }|                     |                    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   )r   r   r   r   r   r   s       r`   r   z"TestConvolve2d.test_invalid_shapes  s     JJryyA//JJryyQ''00j*K1vKKK&'9JKKKj*K1vKKK&'9JKKKKKrb   rG   c                     |                     g dg dg          }|                     g dg dg          }t          ||d          }|                     g dg dg          }t          ||           d S )NrO   rd   r-  r.  re   )rS   rT   rh   )r1  r2  r3  r*  )r[   r\   r+  r   r7  r6  s         r`   r   zTestConvolve2d.test_same_mode  s     JJ			999-..JJ---/E/E/EFGGq!V$$JJ ==" # #1rb   c                 F   |                     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 )NrO   rd   r-  r.  r0  r   rm   r   ro         @        )r         @       @r  )r  y      @      ?y      @      y      ;@      y      G@       @r*  )r[   r\   r+  r   r   r   s         r`   r   zTestConvolve2d.test_valid_mode2  sJ    JJ			999-..JJ---/E/E/EFGG::555677Aw''X&&&Aw''X&&&JJ(66*:;<<JJ0002J2J2JKLL::2344Aw''X&&& Aw''X&&&&&rb   z9only integer tensors of a single element can be convertedc                    |                     d          }|                    g d          }t          |          }t          |          }dD ]}t          |                    t	          j        |||                    t          j        |||                     t          |                    t          j        |d d d f         |d d d f         |          d          t          j        |||                     d S )NrM   g	@gffffff?rK   r   r   re   rf   r   axis)	r   rY   rC   r4   r  r   r   squeezer   )r[   r\   r]   r^   r  b_nprg   s          r`   test_consistency_convolve_funcsz.TestConvolve2d.test_consistency_convolve_funcs  s   
 IIaLLJJ}}}%% ## ##- 	 	D

2;tT===>>14000   

%aaaaj!D!!!G*4HHH    14000   	 	rb   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 )NrK   rL   rR  r   s     r`   test_invalid_dimsz TestConvolve2d.test_invalid_dims  sT    j*a333j*qcA3777j*ug!w?????rb   z!Can't create large array for testTstride_tricksrx   c                    dd|                                 j        z  z  }t          j        d|z  dz  t	          j                     j        z  dz             |                    d|z  |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          rQ     g    .Ar   rP   )iH  r   )shapestridesr   )r   itemsizer3   check_free_memoryr  zeroslibr  
as_stridedr   r   wherer   )r[   r\   r
  r]   countfailss         r`   test_large_arrayzTestConvolve2d.test_large_array  s    
 dRXXZZ001$QUT\BHJJ4G%G#%MNNN HHTAXRXH..##A#F ++AaY	+RR!!q!fX..##Qx}!!!!!!rb   N)r"  r#  r$  r%  r   r8  r:  rE  rP  rS  rX  rb  pytestmarkparametrizer   r   rt  r{  r  r   r   r   r  r  slowxfail_on_32bitr  r   rb   r`   r(  r(    sn        k*?@@@  A@ k*?@@@
 
 A@
 g&;<<<
 
 =<
 k*GHHH  IH	: 	: 	:$ $ $
 k*MNNN  ON k*MNNN  ON k*MNNN[Vj+%>??[1%(@(@(@'AB%(@(@(@'ABDE E6 6E E @? ON
6 k*MNNNM M ONM k*MNNNU U ONU
L 
L 
L kCE E E E E kCE E E' 'E E'. gJ    (@ @ @
 [[ CDDd?;;;" " <; ED " " "rb   r(  c                   
   e Zd Z edd          ej                            dddddgddgg          d	                         Z edd          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dd          ej                            dddddgddgg          d                         Z edd          ej                            dd
dd
gdgg          d                         Z edd          ej                            dddddgddgg          d                         Z edd          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 edd           edd          d                         Z edd           edd          ej                            dg g fd d!gg fg d"gfg          d#                                     Z edd$          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d)d*+          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
d0                     e ed1d2                    z   e j!        "                    d3          #                    d4d5d           $                                z             d6                         Z% ed)7          d8             Z&dS )9TestFFTConvolver   r   rH   axes Nr   r   c                     |                     g d          }|                     g d          }|dk    rt          ||          }n6t          |t                    rt	          |          }t          |||          }t          ||d           d S )NrO   rP   rL   rR   rW         "@r  r  Tqs*>r   rY   r   
isinstancelistr   r4   r[   r  r\   r]   r   r   s         r`   	test_realzTestFFTConvolve.test_real  s     JJyyy!!::000112::a##CC$%% #T{{a...CXF333333rb   rP   c                    |                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          |t                    rt          |          }t          |||          }t          ||d           d S )NrO   r  rQ   rP   r  r  r   rY   r  tiler  r  r   r   r4   r  s         r`   test_real_axeszTestFFTConvolve.test_real_axes  s     JJyyy!!::00011JJrwq1a&))**::bghA7788dD!! 	;;D!QT***XF333333rb   c                     |                     g d          }|                     g d          }|dk    rt          ||          }n6t          |t                    rt	          |          }t          |||          }t          ||d           d S )Nrm          @       @y      @      @rp   y               @y              4@y              8@y              2@r  r  r  r   r  r  s         r`   rt   zTestFFTConvolve.test_complex  s    JJ///00::IIIJJ2::a##CC$%% #T{{a...CXF333333rb   c                    |                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          |t                    rt          |          }t          |||          }t          ||d           d S )Nr  r  rQ   rP   r  r  r   r  r  s         r`   test_complex_axesz!TestFFTConvolve.test_complex_axes*  s    JJ///00::IIIJJJJrwq1a&))**::bghA7788dD!! 	;;D!QT***XF333333rb   c                 2   |                     g dg dg          }|                     g dg dg dg          }|dk    rt          ||          }n6t          |t                    rt	          |          }t          |||          }t          ||           d S )N      ?rQ   rK   r   )r  rL   rR   rW   r/  r   r>  8   r  r   r   r?  r   r  r   r  r  r  r  s         r`   test_2d_real_samez!TestFFTConvolve.test_2d_real_same8  s     JJ!		# $ $::2222223335 6 6 2::a##CC$%% #T{{a...CX&&&&&rb   rQ   c                    |                     g dg dg          }|                     g dg dg dg          }|                     t          j        |g d                    }|                     t          j        |g d                    }t          |t                    rt          |          }t          |||          }t          ||dd	
           d S )NrO   r   )rP   rL   rR   rW   r/  r  r  rQ   rP   rP   r  r  Fr   r  r  r  s         r`   test_2d_real_same_axesz&TestFFTConvolve.test_2d_real_same_axesQ  s     JJ			99  ::000---...0 1 1 JJrwq))),,--::bgh			::;;dD!! 	;;D!QT***XFFFFFFFrb   c                 6   |                     g dg dg          }|                     g dg dg dg          }|dk    rt          ||          }n6t          |t                    rt	          |          }t          |||          }t          ||d	           d S )
N      ?       @      @      @y      @      @rn   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   r  r  s         r`   test_2d_complex_samez$TestFFTConvolve.test_2d_complex_samei  s     JJ000+++- . .::AAA(((<<<   2::a##CC$%% #T{{a...CXF333333rb   c                    |                     g dg dg          }|                     g dg dg dg          }|                     t          j        |g d                    }|                     t          j        |g d                    }t          |t                    rt          |          }t          |||          }t          ||d	           d S )
Nr  r  r  r  r  r  r  r  r   r  r  s         r`   test_2d_complex_same_axesz)TestFFTConvolve.test_2d_complex_same_axes  s     JJ000+++- . .::AAA(((<<<   JJrwq))),,--::bgh			::;;dD!! 	;;D!QT***XF333333rb   c                 >   |                     g d          }|                     g d          }|                     g d          }|                     g d          }|dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||           |dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||d	           d S )
NrO   	rK   rK   rM   rN   r   r   r/  r   rP        A@     D@     G@	r        4@      9@r  r  r  rg  g      <@ri  r  re   r  r  r   r  r[   r  r\   r]   r^   
expected_1
expected_2r   s           r`   test_real_same_modez#TestFFTConvolve.test_real_same_mode  s'    JJyyy!!JJ22233ZZ00
ZZ K K KLL
2::aF++CC$%% #T{{aF666CZ(((2::aF++CC$%% #T{{aF666CZf555555rb   c                    |                     g d          }|                     g d          }|                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          |t                    rt          |          }t          ||d|          }t          ||d	
           t          ||d|          }t          ||d	
           d S )NrO   r  r  r  rQ   rP   re   r  r  r   r  r  s           r`   test_real_same_mode_axesz(TestFFTConvolve.test_real_same_mode_axes  s[    JJyyy!!JJ22233ZZ00
ZZ K K KLL
JJrwq1a&))**JJrwq1a&))**ZZ
QF ; ;<<
ZZ
QF ; ;<<
dD!! 	;;D!QT222Zf5555!QT222Zf555555rb   c                    |                     g d          }|                     g d          }|                     g d          }|dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||d           |dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||d           d S )	NrK   rQ   rP   r        8@g      ?@r  rf  g     H@r        (@r  r   r  r  r   r  r[   r  r\   r]   r^   r   r   s          r`   test_valid_mode_realz$TestFFTConvolve.test_valid_mode_real  s    JJyyy!!JJ22233::AAABB2::aG,,CC$%% #T{{aG$777CXF33332::aG,,CC$%% #T{{aG$777CXF333333rb   c                    |                     g d          }|                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          |t                    rt          |          }t          ||d|          }t          ||d	           d S 
Nr  r  r  rQ   rP   r   r  r  r   r  r  s          r`   test_valid_mode_real_axesz)TestFFTConvolve.test_valid_mode_real_axes  s     JJyyy!!JJ22233::AAABBJJrwq1a&))**JJrwq1a&))**::bghA7788dD!! 	;;D!Qd333XF333333rb   c                    |                     g d          }|                     g d          }|                     g d          }|dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||d           |dk    rt          ||d          }n7t          |t                    rt	          |          }t          ||d|          }t          ||d           d S )	N      @      y       @      @r   r  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r  r   r  r  r   r  r  s          r`   test_valid_mode_complexz'TestFFTConvolve.test_valid_mode_complex  s   JJ///00JJ???@@::AAABB2::aG,,CC$%% #T{{aG$777CXF33332::aG,,CC$%% #T{{aG$777CXF333333rb   c                 h   |                     g d          }|                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          |t                    rt          |          }t          ||d|          }t          ||d	           t          ||d|          }t          ||d	           d S )
Nr  r  r  rQ   rP   r   r  r  r   r  r  s          r`   test_valid_mode_complex_axesz,TestFFTConvolve.test_valid_mode_complex_axes  s&   JJ///00JJ???@@::AAABBJJrwq1a&))**JJrwq1a&))**::bghA7788dD!! 	;;D!Qd333XF3333!Qd333XF333333rb   rF   z mapped axes must have same shapec                    |                     g d          }|                     g d          }|                     g d          }|                     t          j        |ddg                    }|                     t          j        |ddg                    }|                     t          j        |ddg                    }t          ||dd          }t	          ||d	           d S r  )rY   r  r  r   r4   r   s         r`   test_valid_mode_ignore_nonaxesz.TestFFTConvolve.test_valid_mode_ignore_nonaxes   s     JJyyy!!JJ22233::AAABBJJrwq1a&))**JJrwq1a&))**::bghA7788!Qa000XF333333rb   r   zassorted error messagesa,brM   rN   r   c                     t          t          |                    |          |                    |                    |                    g                      d S N)r5   r   rY   r[   r]   r^   r\   s       r`   
test_emptyzTestFFTConvolve.test_empty/  sN    
 	

1rzz!}}55JJrNN	
 	
 	
 	
 	
rb   zjnp.pad: pad_width with nd=0c                     |                     d          }|                     d          }t          ||          }t          |||z             d S r   )rY   r   r5   r[   r\   r]   r^   r   s        r`   rw   zTestFFTConvolve.test_zero_rank9  sM    JJtJJt!QQU#####rb   c                     |                     dg          }|                     dg          }t          ||          }t          ||                     ||z  |j                             d S )Nr   r   r   )rY   r   r5   r   r   s        r`   r   z#TestFFTConvolve.test_single_element@  sn    JJvJJv!Q

1q5	
::	< 	< 	< 	< 	<rb   c                    t           j                            d          }t           j                            d          d|                    d          z  z   }t           j                            d          d|                    d          z  z   }|                    t          j        ||d                    }|                    |          }|                    |          }|dk    rt          ||d          }	n7t          |t                    rt          |          }t          ||d|          }	t          |	|d	           d S )
N    r   )  r   r  r  绽|=r   )r  r  default_rngrandrY   r   r   r  r  r   r4   
r[   r  r\   r  r  r  r   r]   r^   r   s
             r`   test_random_dataz TestFFTConvolve.test_random_dataG  s   i##D))y~~d##b3::d+;+;&;;y~~d##b3::d+;+;&;;::bk$f==>>JJtJJt2::aF++CC$%% #T{{aF666CXE222222rb   c                    t           j                            d          }t           j                            d          d|                    d          z  z   }t           j                            d          d|                    d          z  z   }t          j        ||d          }t          j        |ddg          }t          j        |ddg          }|                    t          j        |ddg                    }|                    |          }|                    |          }t          |t                    rt          |          }t          ||d|          }	t          |	|d	
           d S )Nr  r  r   r  r   rQ   rP   r  r  r  )r  r  r  r	  r   r  rY   r  r  r   r   r4   r
  s
             r`   test_random_data_axesz%TestFFTConvolve.test_random_data_axesX  s7   i##D))y~~d##b3::d+;+;&;;y~~d##b3::d+;+;&;;;tT622wtaV$$wtaV$$::bghA7788JJtJJtdD!! 	;;D!QT222XE222222rb   TzTODO: swapaxesrx   rL   c                    d\  }}t           j                            d          }|                    t          j        j        | d|                    |          z  z             }|                    t          j        j        | d|                    |          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         }|                    |                    dd          dd          }|                    |                    dd          dd          }|                    |                    dd          dd          }|                    t          j        |g d	                    }|                    t          j        |g d
                    }|                    t          j        |g d                    }t          ||d|          }	t          |	|dd           d S )N)){   rS   )      r  r   r   r   rQ   rP   rL   )rQ   rP   rK   rP   rP   )rQ   rP   rP   rL   rP   )rQ   rP   rK   rL   rP   r  r  r   )r  r  r  rY   r	  r   moveaxisswapaxesr  r   r4   )
r[   r  r\   a_shaper   r  r]   r^   r   r   s
             r`   test_random_data_multidim_axesz.TestFFTConvolve.test_random_data_multidim_axesk  s    0i##D))JJry~w/"szz'7J7J2JJKKJJry~w/"szz'7J7J2JJKKaF++aaaD$$%aaaD$$%AAAqqq$d23KK

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

1a((!Q//;;x00A661== JJrwq///2233JJrwq///2233::bgh@@AA!QT222XE>>>>>>rb   r
  r   r  i  r  r  '  c                 D   t           j                            |          dt           j                            |          z  z   }t           j                            |          dt           j                            |          z  z   }|                    t          j        ||d                    }|                    |          }|                    |          }t          ||d          }t          ||d           t          ||dd          }t          ||d           d S )Nr   r   r  r   )r   r  )r  r  r	  rY   r   r   r4   )	r[   r
  r\   r  r  r   r]   r^   r   s	            r`   test_many_sizeszTestFFTConvolve.test_many_sizes  s     y~~a  2	q(9(9#99y~~a  2	q(9(9#99::bk$f==>>JJtJJt!Q''XE2222!QT222XE222222rb   r  c                    d}t           j                            d          }|                    |                    |                    }t           j        t           j        fD ]|}||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   }d S )Nr  l   [<zn( r      皙?z4Use of fft convolution.*|invalid value encountered.*rH  re   r
   r   )r  r  r  rY   standard_normalnaninfr   firwinr  warnsRuntimeWarningr   )r[   r\   r
  r  sig_nanr  coeffsrO  s           r`   test_fft_nanzTestFFTConvolve.test_fft_nan  s!   i##K00**S003344FBF# 	L 	LCGCLZZc3 7 788F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   .CC	C	)'r"  r#  r$  r%  r  r  r  r  r  rt   r  r  r  r  r  r  r  r  r  r  r  r  r&  r  rw   r   r  r  r  r  r  r   r  r  r  randinttolistr  r%  r   rb   r`   r  r    s        g&;<<<[Vb$A3RD%ABB4 4 CB =<4 g&;<<<[Va!b2$%7884 4 98 =<4 [Vb$A3RD%ABB
4 
4 CB
4 [Va!b2$%7884 4 984 [Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	1 	1' '	1 	1' [Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1 1G G1 1G  [Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	1 	14 4	1 	14$ [Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1 14 41 14$ g&;<<<[Vb$A3RD%ABB6 6 CB =<6, g&;<<<[VaaS2$%7886 6 98 =<6( g&;<<<[Vb$A3RD%ABB4 4 CB =<4, g&;<<<[Va!X..4 4 /. =<4  [Vb$A3RD%ABB4 4 CB4* [Va!b2$%7884 4 984$ k*LMMMg&;<<<4 4 =< NM4 v&;<<<{+DEEE[Ub"XA|b1#Y$GHH
 
 IH FE =<
 k*HIII$ $ JI$< < < [Vb$A3RD%ABB3 3 CB3  [Va!b2$%7883 3 983$ t,<===[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 d###L L $#L L Lrb   r  c                       t          d          )NzFell back to fftconvolve)RuntimeError)r  r  s     r`   fftconvolve_errr*    s    
1
2
22rb   c                 8    d t          | d          D             S )Nc                 H    g | ]\  }}t          ||z
            d k    ||f S )rK   )absr   r]   r^   s      r`   r   z!gen_oa_shapes.<locals>.<listcomp>  s:       tq!1q5zzA~~ F~~rb   rQ   repeatr   sizess    r`   gen_oa_shapesr3    s/     wuQ777    rb   c                     t          |           }t          |           }d t          ||          D             }g d}d t          ||          D             S )Nc                     g | ]
\  }}||z   S r   r   )r   ishapes0ishapes1s      r`   r   z$gen_oa_shapes_2d.<locals>.<listcomp>  s.     % % %$6Hhhx % % %rb   r  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   rP   rQ   rK   r   )r   ishapesimodes      r`   r   z$gen_oa_shapes_2d.<locals>.<listcomp>  s     C C C%QZ'!*$$gaj)@)@QZ'!*$$gaj)@)@ UH *A)@)@rb   )r3  zipr   )r2  shapes0shapes1shapesmodess        r`   gen_oa_shapes_2dr@    s    E""GE""G% %'7##% % %F &%%EC C7653I3I C C C Crb   c                 8    d t          | d          D             S )Nc                 (    g | ]\  }}||k    ||fS r   r   r.  s      r`   r   z$gen_oa_shapes_eq.<locals>.<listcomp>  s0       tq!Avv Fvvrb   rQ   r/  r   r1  s    r`   gen_oa_shapes_eqrC    s/     wuQ777    rb   c                   \   e Zd Zej                                        ej                            d e e e	dd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 edd          ej                            dg g fddgg fg dgfg          d                          Zd! Zd" Zd#S )$TestOAConvolvezshape_a_0, shape_b_0rP   r   r  rV   c                 \   t           j                            |          }t           j                            |          }|                    t	          ||                    }|                    |          }|                    |          }t          ||          }t          ||           d S r  )r  r  r	  rY   r   r   r:   )r[   	shape_a_0	shape_b_0r\   r]   r^   r   r   s           r`   test_real_manylensz!TestOAConvolve.test_real_manylens  s     INN9%%INN9%%::k!Q//00JJqMMJJqMMA!#x00000rb   )r  /   rN   rL   rP   
is_complexTFrg   r  c                 H   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   rf   r   r  r  r	  rY   r   setattrr   _signaltoolsr*  r   r:   )r[   rG  rH  rK  rg   monkeypatchr\   r]   r^   r   r   s              r`   test_1d_noaxeszTestOAConvolve.test_1d_noaxes  s     INN9%%INN9%% 	1Bry~~i0000ABry~~i0000A::k!QT:::;;JJqMMJJqMMF/+	- 	- 	-AD)))!#x00000rb   r  r   )r  rJ  rN   rL   shape_a_extrarK   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 )NrQ   r   rg   r  r   rN  )r[   r  rG  rH  rS  rT  rK  rg   rQ  r\   ax_aax_br]   r^   r   r   s                   r`   test_1d_axeszTestOAConvolve.test_1d_axes  s    q q T
T
IND!IND! 	-Bry~t,,,ABry~t,,,A::k!QTEEEFFJJqMMJJqMMF/+	- 	- 	-ADt444!#x00000rb   z0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec	                 P   t           j                            ||          }	t           j                            ||          }
|rL|	dt           j                            ||          z  z   }	|
dt           j                            ||          z  z   }
|                    t	          |	|
|                    }|                    |	          }	|                    |
          }
|                    t          j        dt                     t          |	|
|          }t          ||           d S rM  rN  )r[   rG  rH  	shape_a_1	shape_b_1rg   rK  rQ  r\   r]   r^   r   r   s                r`   test_2d_noaxeszTestOAConvolve.test_2d_noaxes  s     INN9i00INN9i00 	<Bry~~i;;;;ABry~~i;;;;A::k!QT:::;;JJqMMJJqMMF/+	- 	- 	-AD)))!#x00000rb   rQ   c                 z   |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          ||||                    }|                    |          }|                    |          }|
                    t          j        dt                     t          ||||          }t          ||           d S )NrK   r   rP   r   rV  r   )r  r  r	  r   rY   r   rO  r   rP  r*  r   r:   )r[   r  rG  rH  r[  r\  rg   rS  rT  rK  rQ  r\   rW  rX  r]   r^   r   r   s                     r`   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T{{::k!QTEEEFFJJqMMJJqMMF/+	- 	- 	-ADt444!#x00000rb   r   z*ValueError: Target length must be positiverH   r  rM   rN   r   c                     t          t          |                    |          |                    |                    |                    g           d           d S )NFr  )r5   r   rY   r  s       r`   r  zTestOAConvolve.test_emptyH  sU     	rzz!}}bjjmm44JJrNN	
 	
 	
 	
 	
 	
rb   c                     |                     d          }|                     d          }t          ||          }t          |||z             d S r   rY   r   r5   r   s        r`   rw   zTestOAConvolve.test_zero_rankQ  sM    JJtJJtAQU#####rb   c                     |                     dg          }|                     dg          }t          ||          }t          |||z             d S r   rb  r   s        r`   r   z"TestOAConvolve.test_single_elementW  sQ    JJvJJvAQU#####rb   N)r"  r#  r$  r  r  r  r  rC  r  r   rI  r3  rR  rY  r@  r]  r_  r&  r  rw   r   r   rb   r`   rE  rE    s       [[3--dd55C3C3C.D.D.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< < -,10 [ :--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? ? ?>18 w'STTT[Ub"XA|b1#Y$GHH
 
 IH UT
$ $ $$ $ $ $ $rb   rE  Tz!assertions may differ on backendsrx   convapproachc                       e Zd Zd Zd Zej                            ddgdfddgfdgdggfg          d             Zd Z	d	S )
TestAllFreqConvolvesc                     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 )NrP   r   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionrH  r   rf   )r  r   r   r   r   r[   rd  r\   r]   r^   s        r`   r   z(TestAllFreqConvolves.test_invalid_shapesd  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)rM   rN   rQ   rP   )rM   rN   rK   rP   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)rH  r   rP   r  )r  r  r   r   rh  s        r`   test_invalid_shapes_axesz-TestAllFreqConvolves.test_invalid_shapes_axesl  s    H\\\""H\\\"":"67 7 7 	, 	, LAQF++++		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A!!A%(A%r  rP   rQ   rK   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 dimensionalityrH  r   r   )r[   r]   r^   rd  r\   s        r`   r!  z)TestAllFreqConvolves.test_mismatched_dimsu  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'rH  rP   rQ   chipsrf   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrK   rL   )r  ri  rk  rl  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   rl  )r[   rd  r\   s      r`   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N)
r"  r#  r$  r   rj  r  r  r  r!  ro  r   rb   r`   rf  rf  ^  s        - - -, , , [U !sAh 1#h !saSEl,- - 	- -0 0 0 0 0rb   rf  zignore::DeprecationWarningr   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)r~   r~   rL   rL   y        ?r   r   )r  r  r  iscomplexobjr   r4   r   r   )r   r\   rq   rr   ress        r`   test_convolve_longdtype_inputrt    s    
 		""))%00A
	  ''..A	uuww 	S	S
a

CC!Qx8889999rb   c                      e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZ eej        ej	                  d             Z
ej                            dg d           eej        ej	                  d                         Z edd          ej                            dej        ej        ej        ej        ej        ddg           eej        ej	                  d                                      Z edd!           eej                  d"                         Z edd#           eej                  d$                         Z ed%d&'          ej                            dg d(           eej	                  d)                                     Zd*S )+TestMedFilt)
r  r  r  r  r  r_     r~   r   rA  )
r  r  r  r  r  r   H   M   rW  r\  )
r  r  r  r  r  rA  rJ     r@  ry  )
r  r  r  r  r  r         _   #   )
r  r  r  r  r  rA  rh   r/  rm  r\  )
r   a   rT   rW  r   ry  r   r   G   r   )
r@  r  r[  r|  rW  rU   rz  rW  r=  r]  )
rK   !   r  rB  rP   r   rV  7   rW   S   )
r   r  rA  r   r  rJ  r=  +   r   r>  )
rU   r   X   r   '   rL   r_  r@  r   r   )
r   r  r  r  r   r{  r{  rw  r~   r   )
r   r  r  r  r  r   rz  rm  r|  r   )
r  r  r  r  r  rJ  rh   rh   rA  r~  )
r  r  r  r  r  r  r   rJ  r@  r   )
r  r  r  r  r  r  rA  r  r@  r~  )
r  r  r  r  r  rJ  rA  r  r  r>  )
rU   r  r  r  r  rJ  rA  r   r  r>  )
r   rA  r  r  rJ  rA  rA  r  r   rm  )
r   rU   r  r  rU   rU   r  r  r  r   )
r   r   r  r   rL   rL   rz  rz  r=  r   r   rK   c                 n   |                     | j                  }|                     | j                  }|                     | j                  }t	          j        ||          }t	          j        |                     ||j                  |          }t          ||           t          ||d           d S )Nr   Fr  )	rY   INOUTKERNEL_SIZEr   medfilt	medfilt2dr   r5   )r[   r\   in_out_kernel_sizer   r+  s          r`   ra   zTestMedFilt.test_basic  s     jj!!zz$(##jj!122N3,,RZZ2:Z>>LL4   1%000000rb   r   
r   r   r   r   r   r   r   r   r   r   c                 (   t          |          r|dv rt          j        d           t          ||          }|                    | j        |          }t          j        |          j        |k    sJ t          j	        |          j        |k    sJ d S )Nr   r   r   z%torch does not support unisigned intsr   )
r7   r  skipgetattrrY   r  r   r  r   r  r[   r   r\   in_typeds       r`   
test_typeszTestMedFilt.test_types  s     B<< 	AE%CCCK?@@@E""::dgU:33~h''-6666))/5888888rb   Tzassertions may differrx   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)r  r  zPlatform does not support r   znot supportedrH  )r  finfo
longdoubler   r  r  arrayr  r   r   r   r  r  r  s       r`   test_invalid_dtypeszTestMedFilt.test_invalid_dtypes  s_    ,,,HR]++1U::K<U<<===8DG5111]:_=== 	% 	%N8$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ]:_=== 	' 	'X&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's$   9BB!B C""C&)C&zobject arraysc                     t          t          t          f          5  t          j        d            d d d            d S # 1 swxY w Y   d S r  )r   r   	TypeErrorr   r  r   s     r`   	test_nonezTestMedFilt.test_none  s     J	233 	! 	!N4   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   >AAz#strides are only writeable in NumPyc                    |                     d|j                  }|dd         }t          j        j                            |d          }t          t          j        |d          |	                    dg                     d S )	NrR   r   rM   rN   )r   )r  rP         @)
r   r   r  r  r  r  r4   r   r  rY   )r[   r\   dummyr]   s       r`   test_odd_strideszTestMedFilt.test_odd_strides  su     		"BJ	//!A#JF ++Au+==q!,,rzz2$/?/?@@@@@rb   rF   z6chunk assignment does not work on jax immutable arraysrH   )r   r   r   c                     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          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   rQ   rP   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   r  r  )chunkMNMinMselMoutNinNselNout
chunk_datamedM1N1r  offMoffNr[   s              r`   applyz2TestMedFilt.test_medfilt2d_parallel.<locals>.apply  s    DAqAvvArDy))QQ||BIt,,T4((RAvvArDy))QQ||BIt,,T4((R "#s(+J":t/?@@CtTz?D$..rb   rL   )max_workers>   rP   r   r   r   r   rP   rP   rP   c                 <    h | ]}                     |          S r   )submit)r   r  r  pools     r`   	<setcomp>z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp><  s'    EEEUt{{5%00EEErb   )r  rY   r  r  r  r  
zeros_liker   r   rs  r5   )r[   r   r\   r   outputchunksfuturesfuturedataMsliceNslicer  r  r  r  r  r  r  s   `          @@@@@@@r`   test_medfilt2d_parallelz#TestMedFilt.test_medfilt2d_parallel  s    E""::dgU:33::dhe:44 ~////
 ^A!#^A!#"a'!+"a'!+	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/8 x((A... 	.$555FEEEEEfEEEG 'w// . .'-}}$ff)-vv~&&.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	)))))s   AD**D.1D.N)r"  r#  r$  r  r  r  r@   r   r  r  ra   r  r  r  r  r%  r  bool_r   r   clongdoubler   r  r  r  r  r   rb   r`   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v~v'788	1 	1 98	1 [W '= '= '= > > v~v'7889 9 98> >9 d+BCCC[Wrxr}')~rz'0*'> ? ? v~v'788' ' 98? ? DC
' d?;;;v~&&! ! '& <;!
 d+PQQQv~&&A A '& RQA G   [W&E&E&EFFv'((6* 6* )( GF	 6* 6* 6*rb   rv  c                   :    e Zd Z edd          d             ZdS )
TestWienerr   zXXX: can_cast in cupy <= 13.2rH   c                 ,   |                     g dg dg dg dg|j                  }|                     g dg dg dg d	g          }t          t          j        |          |d
           t          t          j        |d          |d
           d S )N)rM   rN   rL   rK   )rK   rM   rN   rQ   )rQ   rK   rM   rN   )rP   rN   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@_)@rN   decimalrK   )mysize)rY   r   r:   r   wiener)r[   r\   r7  r6  s       r`   ra   zTestWiener.test_basicI  s    JJ$$$& .0Z  9 9 JJNNNQQQQQQRRRT U U 	"&-"2"2AqAAAA!&-!"<"<"<aKKKKKKrb   N)r"  r#  r$  r%  ra   r   rb   r`   r  r  F  sG         f%DEEE
L 
L FE
L 
L 
Lrb   r  )meanmedianminimummaximumlinec                   N	   e Zd Z eej        ej                   edd          d                         Ze	j
                            dd          e	j
                            dd          e	j
                            d	d
           eej                  d                                                 Z eej                  d             Ze	j
                            dd          e	j
                            dd          e	j
                            dd           eej                  d                                                 Z edd          e	j
                            de           eej                  d                                     Z edd           eej                  e	j
                            de          d                                     Ze	j
                            de          e	j
                            dddg           edd           eej                  d                                                 Z edd          e	j
                            ddg e edgddge                    z              eej        ej                  d                                     Ze	j
                            d d!          e	j
                            d"d#           eej                  d$                                     Ze	j
                            d d%          e	j
                            d"d#           eej                  d&                                     Ze	j
                            d'd(          e	j
                            d)d(           eej                  d*                                     Ze	j
                            d+g d,          e	j
                            deej        ej        eeg           eej                  d-                                     Z  eej                  d.             Z! eej                  e	j
                            dd/dg           edd          d0                                     Z"d1S )2TestResampler   z-does not raise with non-int upsampling factorrH   c           
         |                     d|j                  }d}t          j        dd|          }t	          t
          t          j        |||           t	          t
          t          j        ||d	           t	          t
          t          j        |d
d           t	          t
          t          j        |dd           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	          t
          t          j        |dd|                    d                     |	                    |                     d|j                  d          }t          j        ||d|           |j
        dk    sJ t          j        |dd          }t          j        |ddd          }t          j        |dddd          }t          ||           t          ||           d S )N   r      )kaiser       @   r\   windowINVALIDdomainyorP   r   g?rQ   r  padtyper  rR   )r  cval)rQ   rP   r   r  r  )r  constant)r   r   r   
get_windowr   r   resampleresample_polyeyer  r  r5   )	r[   r\   signumwinsig2x_refx0r   s	            r`   ra   zTestResample.test_basic]  s    ii2:i..<<<j&/3CHHHHj&/3INNNN 	j&"6T1EEEj&"6QBBBj&"6S!DDDj&"6QDDDj&"6Q2NNNNj&"6Q$2	/ 	/ 	/ 	/j&"6Q"&&QR))TTTT wwryyBJy77@@c37777yF"""" $S!Q//!#q!Z@@@!#q!ZaHHHE"""E"""""rb   r  )Nhammingr  )r  rz  r  )r   rv  rR   r  c                    t          |          }||j        k    r|j        n|j        }|                    dd|d          }|                    |dz   dz            }t          j        |                    ||          ||          }	t          t          j        |||          |
                    |	                     |                    |                    |dz   dz            |                    |dz   dz            g          }|                    ||          }
t          j        |
|d|	          }||j        k    rd
nd}t          t          j        ||d|	          |
                    |          |           d S )Nr   rR   F)endpointrQ         @r  rP   r  &.>v!>r   )r>   r   r   r   linspacecosr   r  r  r4   realstacksinr   )r[   r  r  r  r\   dt_rdt_crq   rr   desired	y_complex	resampledr   s                r`   	test_rfftzTestResample.test_rfft  s     ###rz11r||r}KK2q5K11FFAqD59/"))At"4"4c&III3v>>>((	* 	* 	* HHbffadU3Y''Ac	):):;<<IIa&&	OIs6JJJ	rz))tttOAs6:::GGI	 	 	 	 	 	rb   c                    |                     |                    d          |j                  }t          j        |          }d}t          t          j        ||d          t          j        ||d          d           d S )Nr  freqr  timer  r   )r  r   r   sp_fftr
   r4   r   r  )r[   r\   tsigfsigr  s        r`   test_input_domainzTestResample.test_input_domain  s     yy377z$OD#f555OD#f555	 	 	 	 	 	rb   nx)rP   rQ   rK   rM   r   nyr   )r   r   c                     t          ||          }|                    dg|z  |          }t          j        ||          }t	          ||                    dg|z  |j                             d S )NrP   r   )r  rY   r   r  r4   r   )r[   r  r  r   r\   rq   rr   s          r`   test_dczTestResample.test_dc  sm    
 E""JJsRxuJ--OAr""2::qcBhag:>>?????rb   z padtype not supported by upfirdnr  c                 :   |                     d          }|                    t          j                            d                              d                    }|                    |d          }t          j        |dd||           t          ||           d S )	NrK   r   rQ   TcopyrM   rP   r  r  )	r  rY   r  r  r  r  r   r  r5   )r[   r  r\   impulser  window_origs         r`   test_mutable_windowz TestResample.test_mutable_window  s    
 ((1++BI11!44::1==>>jjdj33Wa67KKKK,,,,,rb   c                     |                     d|j                  }|                    g d|j                  }t          j        |dd||          }|j        |j        k    sJ d S )NrR   r   rP   rP   rP   rP   rQ   r  )r   r   rY   r   r  r   )r[   r  r\   rq   r6  rr   s         r`   test_output_float32z TestResample.test_output_float32  sl    
 IIb
I++JJyyy
J33 AqGDDDw"*$$$$$$rb   r   r   c                     t          ||          }|                    d|          }t          j        |dd|          }|j        |j        k    sJ d S )NrR   r   rP   rQ   r  )r  r   r   r  r   )r[   r  r   r\   rq   rr   s         r`   test_output_match_dtypez$TestResample.test_output_match_dtype  s\     E""IIbI&& Aq':::w!'!!!!!!rb   zmethod, ext, padtype)r
   FN	polyphaseFTc                    d}g d}|                     ||j                  t          |          z  }|                    d          d d |j        f         }|                    d|j        z  |z  |z            t          ||          z  }	|D ]}
|                     |
|j                  t          |
          z  }|                    d|j        z  |z  |z            t          |
|          z  }|dk    rt          j	        |	|
d	          }n|rr|
|k    rlt          |
|          }|
|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          |j        d                   D ]}||d d f         }||d d f         }t          ||df                   }|d|
z  k    r?|                    |          }|dv rt#          ||d           ft#          ||d           y|j        |j        k    sJ t%          j        ||          d         }|dk    sJ |||
f            t$          j                            d          }t          |          t%          j        |                    |                    z  }	|                    |	          }	|D ]}
|                     |
|j                  t          |
          z  }t%          j        |||	          }|dk    rt          j	        |	|
          }nt          j        |	|
||          }|j        |j        k    sJ |                    t%          j        ||          d                   }|dk    s
J |            |dk    r|                    ddg          }t          j	        |d          }|                    g d          }t#          ||d           |                    g d           }t          j	        |d          } |                    d
d!g          }!t#          | |!d           d S d S )"Nr   )	r   r  r  c   r   rv     r     r   )r        $@g      D@rQ   r  r
   r   r  r  rR   rP   )r  r  r  r  r  r  r         ?)r  r  333333?r   r   r  gGz?r  r   r   rL   )r         ?        r   r(  -q=)r  r&          r&  r*  )r   r   r  rY   newaxisr  pir.   r   r  r   maxr   r  r   r  r  r4   r  corrcoefr  r  cumsumr  interp)"r[   r   extr  r\   raterates_tor   freqsrq   rate_tot_toy_tos	y_resampsr7  updownmax_ratef_chalf_lenr  polyargsr   y_toy_resampr
  corrr  r   y1_testy1_truer   y2_testy2_trues"                                     r`   test_resample_methodsz"TestResample.test_resample_methods  s    <<< IId"*I--d;

>**111bj=9FF1ru9u$q())D",=,=,== &	> &	>G99WBJ977%..HDFF1ru9u,t344tG7K7K7KKE"OAwR@@@		 47d??GT**A AB19D"2t}}Hx-C!H}H#]1x<!+;S2AC C CFZZ//F*0WEEHH )73H"0GT = = =3;= =	 5;q>** > >QT{$QT?U1a4[))3=((==..D"888'$TBBBBB'$TBBBBB:7777;tX66t<D$;;;tW(=;;;;>" i##A&&JJ399T??333JJqMM 	% 	%G99WBJ977%..HD9T1a((D!?1g66!/7D8?A A A:////::bk$99$?@@D$;;;;;;; U??VV,--Bob!,,Gjj!C!C!CDDGGW59999...//Bob!,,Gjj"b**GGW5999999 ?rb   n_in)r   r/  n_out)rK   rL   c                     t          j        |          }d }t          j        ||          }t          j        |||          }t	          d|z  |d           dS )zTest callable window function. c                 0    dt          j        |           z  S )zScale input by 1/2r&  )r  	ones_like)r4  s    r`   r  z0TestResample.test_resample_win_func.<locals>.win1  s    e,,,,rb   r  rQ   r)  r   N)r  rp  r   r  r4   )r[   rG  rH  x_inr  y0y1s          r`   test_resample_win_funcz#TestResample.test_resample_win_func*  sh    
 wt}}	- 	- 	- _T5))_T5555"bu------rb   )rN   rW   c                 >   d\  }}t          j        |          }t          j        ||          }t          j        |||||z   g          \  }}dt          j        t          |                    |z  |z  |z  z   }	t          ||           t          ||	d           dS )zcVerify behavior for parameter `t`.

        Note that only `t[0]` and `t[1]` are utilized.
        )rR   rQ   )r   rR   r)  r   N)r  rp  r   r  r   lenr5   r4   )
r[   rG  rH  t0dtrL  rM  rN  r   t_refs
             r`   test__resample_param_tz#TestResample.test__resample_param_t:  s     Bwt}}_T5))uRU<<<BRYs2ww''",t3e;;BE......rb   n1)rQ   rK   r   r   n0c                    t          ||          dz  d ||fD             }fd|D             \  }}t          j        ||          }t          j        |dz   |          }t          ||d           t          |j        |d           dS )zDTest behavior at Nyquist frequency to ensure issue #14569 is fixed. rQ   c              3   D   K   | ]}t          j        |          |z  V  d S r  )r  r   )r   n_s     r`   	<genexpr>z5TestResample.test_resample_nyquist.<locals>.<genexpr>R  s/      44Rbimmb 444444rb   c              3   f   K   | ]+}t          j        d t           j        z  z  |z            V  ,dS )rQ   N)r  r  r,  )r   t_f_nys     r`   r[  z5TestResample.test_resample_nyquist.<locals>.<genexpr>S  s=      ==B"&RUT)B.//======rb   r   r)  r   N)minr   r  r4   r   )	r[   rW  rV  ttr  r   y1_ry1_cr^  s	           @r`   test_resample_nyquistz"TestResample.test_resample_nyquistL  s    
 2r{{a44B8444===="===Br2&&rBw++bu----	2E222222rb   down_factor)rQ   r  O   c                 x   t           j                            d          }d}|                    |                              |          }|t           j        t           j        fv r|d|                    |          z  z  }d|d<   d|d<   t          j        dd|z  d	          }t          |d|d
          d d |         }t          |t          j        |                    }	t          |j        ||	|                                f          \  }}	}t          j        |d||		          }
t!          ||
dd           d S )Nr   r  r   r   r   r   r  r  r  r  r  rP   r  gv!>r   r   )r  r  r  r  r  r   r   r   r   r   r   flipmaprY   r  r  r4   )r[   rd  r   r\   random_stater   rq   r6  yfhcrr   s              r`   test_poly_vs_filtfiltz"TestResample.test_poly_vs_filtfilt[  s7   
 y,,R00t$$++E22R\2=111l((....A !"M"b;.yAAAaa444]]{]C
 a$$ 
QBGGII$677	2r A{2>>>ADt444444rb   c           	         dD ]}t          dd|          D ]}dD ]}t          j                            |f          }t          j                            |f          }t          |t          j        |          d          }t          |j        |||f          \  }}}t          j        |d||          }t          |d d |         |           d S )N)rQ   rL   rP   r?  )rU   r  r  rf   )r9  r:  r  )
r   r  r  r   rh  ri  rY   r   r  r4   )	r[   r\   r:  r  nweightsrq   weightsy_gy_ss	            r`   test_correlate1dzTestResample.test_correlate1dz  s     		6 		6DAr4(( 6 6 ( 6 6H	(("//A i..{;;G%a)9)9
KKKC&)"*q'36G&H&HOAw .ad7< < <C#C$K555566		6 		6rb   r   c                     t          ||          }|                    g d|          }t          j        |ddd          }t	          j        |          dk    sJ d S )N)r   rP   rQ   rK   rQ   rP   r   r   rQ   rP   smooth)r9  r:  r  r   )r  rY   r   r  r  count_nonzero)r[   r   r\   r  actuals        r`   test_gh_15620zTestResample.test_gh_15620  su     E""zz///uz==%d)*+,.68 8 8 ''!++++++rb   N)#r"  r#  r$  r@   r   r  r  r&  ra   r  r  r  r  r  r  r%  padtype_optionsr  r  r  r  r   rF  rO  rU  rc  intr  r   r   r  complexrm  rs  rx  r   rb   r`   r  r  [  s       v(<==v&UVVV# # WV >=#B [X'899[S(++[U$677v''  (' 87 ,+ :9. v''  (' [T?33[T?33[W&?@@v''@ @ (' A@ 43 43@ f%GHHH[Y88v+,,- - -, 98 IH- f%GHHHv+,,[Y88% % 98 -, IH% [Y88[Wy)&<==f%GHHHv+,," " -, IH >= 98" f%GHHH[	
$Gt}o 
 
	
  v(<==M: M: >=  IHM:^ [VV,,[Wf--v''. . (' .- -,. [VW--[Wf--v''/ / (' .- .-/ [T<00[T<00v''
3 
3 (' 10 10
3 []KKK88[WsBJeW&UVVv+,,5 5 -, WV 9858 v+,,
6 
6 -,
6 v+,,[Ww	&:;;f%GHHH, , IH <; -,, , ,rb   r  c                       e Zd Zd Zd ZdS )TestCSpline1DEvalc                    t          j        g d          }t          j        |j        d                   }|d         |d         z
  }|                    t	          j        |                    }|                    t          |          dz            dz  }t	          j        ||||d                   }t          |d d d         |                    |          d           d S )	N)	rP   rQ   rK   rL   rK   rQ   rP   rQ   rk  r   rP   r%  )dxr  rR   rM   r  )	r  rY   r   r  r   	cspline1drQ  cspline1d_evalr:   )r[   r\   rr   rq   r  cjr   y2s           r`   ra   zTestCSpline1DEval.test_basic  s    J44455Iagaj!!qTAaD[ZZ(++,,YYs1vv}%%,"2rbQqT::: 	""TTrT(BJJqMM1EEEEEErb   c                    t          j        d          }t          j        |j        t           j                  }d}d|z  }t          j        dt           j        z  |z  |z            }|                    t          j	        |                    }|                    dg          }t          j
        ||          }|j        |                    |          j        k    sJ d S )Nri  r   r%  r  rp   r&  )r  r   r  r  r   expr,  rY   r   r  r  r   )	r[   r\   rq   rr   Tr   cyxnewynews	            r`   rt   zTestCSpline1DEval.test_complex  s    IcNNHQWBL111!GF4"%<!#a'(( ZZ(++,, zz3%  $R..zRZZ]]0000000rb   N)r"  r#  r$  ra   rt   r   rb   r`   r}  r}    s5        	F 	F 	F1 1 1 1 1rb   r}  c                       e Zd Zd Zd Z edd           edd           eej                  d                                     Z	d	 Z
d
S )TestOrderFiltc                     t          j        |                    g d          |                    g d          d          }|                    g d          }t          ||           d S )NrO   rP   r   rP   rP   )rQ   rK   rQ   )r   order_filterrY   r5   )r[   r\   rw  expects       r`   ra   zTestOrderFilt.test_basic  sb    $RZZ			%:%:BJJyyy<Q<QSTUUIII&&'''''rb   c                    |                     |                    dt          |                    d          }|                    dt          |                    }|                    g dg dg dg dg dgt          |                    }t          t          j        ||d	          |           |                    g d
g dg dg dg dg          }t          t          j        ||d          |           |                    g dg dg dg dg dgt          |                    }t          t          j        ||d          |           d S )N   r   rM   rM   rK   )r*  r*  r*  r*  r*  )r*  r*  r  ri  r*  )r*  r  r        @r*  )r*  r%        &@r  r*  r   )r  r  r  r  rl  )r  r  g      *@      ,@r  )g      0@g      1@g      2@      3@r  )      5@      6@      7@r  r  )r  r  r  r  r  rQ   r   rP   rQ   rK   r   )rM   rN   r   r   rK   )rR   r  rW      r   )r{  r   r   rw  r  r   r{  r   r   rw  rP   )r   r   r>   r  rY   r4   r   r  r[   r\   rq   r  r   s        r`   test_doc_examplezTestOrderFilt.test_doc_example  s   JJryy+;B+?+?y@@&II!1"!5!566 ::!!!!!!!!!$$$!!!	#
 #2&&  
 
 	+Avq998DDD ::!!!%%%&&&&&&&&&	(
 
 	+Avq998DDD ::____   !!!   	"
 #2&&  
 
 	+Avq998DDDDDrb   z
dask.arrayzrepeat requires an axisrH   r   zarray-api-compat#292c                 T   |                     |                    d          d          }|                    g dg dg dg dg dg          }t          t	          j        |d          |           t          t	          j        ||                    d	          d
          |           d S )Nr  r  r  )rP   rN   r   r   rL   )rN   r  rW   r  r/  )r  r   r   rw     )r   r   r   rw  r   rK   r}  rL   )r   r   rY   r4   r   r  r  rp  )r[   r\   rq   r   s       r`   test_medfilt_order_filterz'TestOrderFilt.test_medfilt_order_filter  s     JJryy}}f-- ::____!!!	!
 
 	q!,,h7772776??A66	
 	
 	
 	
 	
rb   c                    |                     |                    d          d          }|                    g dg dg dg          }|                    g dg dg dg d	g d
g          }t          t	          j        ||d          |           |                    g dg dg dg dg dg          }t          t	          j        ||d          |           d S )Nr  r  )rP   rP   r   )r   rP   r   r   r   r   r   r   r   r   r   )r   r   rP   rQ   rK   )r   rM   rN   r   r   )r   rR   r  rW   r  r  r   )r   rP   rQ   rK   rL   )rM   rN   r   r   r/  )rR   r  rW   r  r  )r{  r   r   rw  rz  rP   )r   r   rY   r4   r   r  r  s        r`   test_order_filter_asymmetricz*TestOrderFilt.test_order_filter_asymmetric  s   JJryy}}f--YYYYYY
 
 ::______      	"
 
 	+Avq998DDD::______!!!!!!	#
 
 	+Avq998DDDDDrb   N)r"  r#  r$  ra   r  r&  r@   r   r  r  r  r   rb   r`   r  r    s        ( ( (
$E $E $EL |,EFFFw'=>>>v~&&
 
 '& ?> GF
&E E E E Erb   r  c                      e Zd Zd Zd Z edd          d             Zd Zd Z edd	          d
             Z	 edd	          d             Z
d Zd Z edd	          d             Z edd	          d             Zd Z edd          d             Zd Z edd          d             Z edd	          d             Z edd	          d             Z edd	          d             Zd Z edd          d             Zd Z edd          ej                            dddgg d d!d!gg d"fe#           ee          d$                                     Z  ee          d%             Z! ed&d'           edd(           ee          d)                                     Z" edd	          d*             Z# edd	          d+             Z$d, Z%d- Z& ed./          ej                            dd0d0g e'j(        d0          g          ej                            d1d0d0g e'j(        d0          g          d2                                     Z)d3S )4_TestLinearFilterc                    t          |t                    r|nt          j        |          }|                    d|dz
  |          }t          |t                    s|                    ||          }|                     ||          S )Nr   rP   )r  rz  mathprodr  r   convert_dtype)r[   r  r\   	prodshaperq   s        r`   generatez_TestLinearFilter.generate  sx    's33IEE59I9I	KK9q=)44%%% 	%

1e$$A!!!R(((rb   c                    | 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         t                    rt          || j                   n| j         }|                    ||          S )	NOrefs_okzerosize_okreadonly	writeonlyr   .r   )
r   r  rY   emptyr  nditertyper  strr  )r[   arrr\   r   iterrq   rr   r   s           r`   r  z_TestLinearFilter.convert_dtype  s    :#&&*S//C(39dj11C9c3Z)M)B${m46 6D * *11R5))#J #4:s33%WR,,,*  ::c:///rb   r   z/XXX https://github.com/scipy/scipy/issues/23539rH   c                                         dg                               dg                               d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	                               g           ||           ddd           n# 1 swxY w Y   t          j        t          d          5  t	          |                    d          |           ddd           n# 1 swxY w Y   t          j        t          d          5  t	          |                     g           |           ddd           n# 1 swxY w Y   t          j        t          d	          5  fd
|||fD             \  }}}t	          |||           ddd           dS # 1 swxY w Y   dS )z"Verify all exceptions are raised. rP   rQ   rK   rL   z^Parameter b is notrH  Nz^Parameter a is notz^Parameter's dtypes produced c              3   R   K   | ]!}                     |j        d           V  "dS )Fr  N)r  r   )r   v_r\   s     r`   r[  z8_TestLinearFilter.test_invalid_params.<locals>.<genexpr>8  s7      PPryyRYUy;;PPPPPPrb   )rY   r  r   r   r   r  NotImplementedError)r[   r\   r^   r]   rq   s    `   r`   r   z%_TestLinearFilter.test_invalid_params+  s    **aS//2::qc??BJJ1v4F4Fa1]:-BCCC 	% 	%BFF1IIq!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:-BCCC 	* 	*BJJrNNAq)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*]:-BCCC 	% 	%Arvvayy!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:-BCCC 	* 	*Arzz"~~q)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*].6UVVV 	 	PPPPq!QiPPPGAq!Aq!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ    %BBB7%C((C,/C,%D??EE%%FFF<'G00G47G4c                     |                      d|          }|                     ddg|          }|                     ddg|          }|                     g d|          }t          t          |||          |           d S )NrN   rP   r   r&        ࿩r   rQ   rL   rN   r   r%  r  r  r:   r   r[   r\   rq   r^   r]   y_rs         r`   test_rank_1_IIRz!_TestLinearFilter.test_rank_1_IIR;  s    MM$##2w++T{B//  !5!5!5r::!'!Q"2"2C88888rb   c                     |                      d|          }|                     ddg|          }|                     dg|          }|                     g d|          }t          t          |||          |           d S )Nr  rP   r   rP   rK   rM   r   r  r  r  s         r`   test_rank_1_FIRz!_TestLinearFilter.test_rank_1_FIRB  s    MM$##1vr**sB''  !4!4!4b99!'!Q"2"2C88888rb   z*XXX https://github.com/cupy/cupy/pull/8677c                    |                      d|          }|                     g d|          }|                     ddg|          }|                     ddg|          }|                     g d|          }|                     dd	g|          }t          ||||
          \  }}	t          ||           t          |	|           d S )Nr  rP   r   r   r&  r  rP   rQ   )rP   rM   r/  r  r   rm  r  zir  r  r   r:   
r[   r\   rq   r^   r]   r  r  zf_rrr   zfs
             r`   test_rank_1_IIR_init_condz+_TestLinearFilter.test_rank_1_IIR_init_condI  s    MM$##zzz2..T{B//A++  !6!6!6;;!!2s)R001aB'''2!!S)))!"d+++++rb   c                    |                      d|          }|                     g d|          }|                     dg|          }|                     ddg|          }|                     g d|          }|                     ddg|          }t          ||||          \  }}	t          ||           t          |	|           d S )Nr  r  rP   )rP   rQ   rK   rN   r/  r  r/  rM   r  r  r  s
             r`   test_rank_1_FIR_init_condz+_TestLinearFilter.test_rank_1_FIR_init_condU  s    MM$##yyy"--sB''A++  !5!5!5r::!!1a&"--1aB'''2!!S)))!"d+++++rb   c                    |                      d|          }|                     ddg|          }|                     ddg|          }|                     g dg dg dg dg|          }t          |||d          }t          ||           d S )	NrL   rK   rP   r   r&  r   rQ   rL   rN   rL   rQ   r   r  r  )r[   r\   rq   r^   r]   y_r2_a0rr   s          r`   test_rank_2_IIR_axis_0z(_TestLinearFilter.test_rank_2_IIR_axis_0a  s    MM&"%%2w++Sz2..$$iiiIII&/ii&1246 6Aq!!$$$!'1-----rb   c                    |                      d|          }|                     ddg|          }|                     ddg|          }|                     g dg dg dg dg|          }t          |||d	          }t          ||           d S )
Nr  rP   r   r&  r   rQ   r   rN   r  rN   rW   r  rW   rw  irw  r  r  )r[   r\   rq   r^   r]   y_r2_a1rr   s          r`   test_rank_2_IIR_axis_1z(_TestLinearFilter.test_rank_2_IIR_axis_1j  s    MM&"%%2w++Sz2..$$iii]]])MM&+,.0 0Aq!!$$$!'1-----rb   c                    |                      d|          }|                     ddg|          }|                     ddg|          }|                     t          j        d          |          }|                     g dg dg dg d	g|          }|                     g d
|          d d t          j        f         }t          |||d|          \  }}	t          ||           t          |	|           d S )Nr  rP   r   r&  )rL   rP   r  )r   r   )r  r  )rz  rz  )r  r  iir  r  )r  r  r  rp  r+  r   r:   )
r[   r\   rq   r^   r]   r  	y_r2_a0_1r  rr   r  s
             r`    test_rank_2_IIR_axis_0_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_0_init_conds  s   MM&"%%2w++Sz2..33&&			:::}}}+mm(-.02 2	!!"5"5"5r::111bj=I1aaB///2!)Q///!"d+++++rb   c                    |                      d|          }|                     ddg|          }|                     ddg|          }|                     t          j        d          |          }|                     g dg dg dg dg|          }|                     g dg|          }t	          |||d	|
          \  }}	t          ||           t          |	|           d S )Nr  rP   r   r&  rP   rK   )rP   rK   rM   )rM   rK   rP   )r  r  r   r  )r  r  r  rp  r   r:   )
r[   r\   rq   r^   r]   r  	y_r2_a0_0r  rr   r  s
             r`    test_rank_2_IIR_axis_1_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_1_init_cond  s    MM&"%%2w++Sz2..44&&			999(1		999(>?AC C	!!???"3R881aaB///2!)Q///!"d+++++rb   c                   	
 |                      d|          }|                     ddg|          }|                     ddg|          }t          t          |||f          \  	
}t	          |j                  D ]Q}t          ||||          }t          j        	
fd||          }t          ||
                    |                     Rd S )NrL   rK   rQ   rP   r   r&  c                 &    t          |           S r  r   wr  r  s    r`   <lambda>z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>      dA0F0F rb   r  r  ri  rC   r   ndimr   r  apply_along_axisr:   rY   r[   r\   rq   r^   r]   x_npr  rr   r  r  r  s            @@r`   test_rank_3_IIRz!_TestLinearFilter.test_rank_3_IIR  s    MM)R((2w++Sz2..01a)<<dD!&MM 	: 	:D1a&&A%&F&F&F&F&FdSSC%aC9999	: 	:rb   
inaccuratec                    |                      d|          }|                     ddg|          }|                     ddg|          }t          |j                  D ](}t	          |j                  }d||<   |                     |                    |          |          }|                     dg|          }t          |||||          \  }	}
t          t          |||f          \  fd}fd}t          j        ||t          |                    }t          j        ||t          |                    }t          |	|                    |                     t          |
|                    |                     *d S )Nr  rP   r   r&  c                 6    t          |           d         S Nr  r   r  r  r  r  zi1_nps    r`   lf0z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0      tT1888;;rb   c                 6    t          |           d         S Nr  rP   r  r   s    r`   lf1z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1  r  rb   )r  r  r   r  r  r  rp  r   ri  rC   r  r  r:   rY   )r[   r\   rq   r^   r]   r  zi_shaper  zi1rr   r  r  r  r  r  r  r  r  s                  @@@r`   test_rank_3_IIR_init_condz+_TestLinearFilter.test_rank_3_IIR_init_cond  s   MM)R((2w++Sz2..!&MM 	< 	<DAG}}HHTN##BGGH$5$5r::B$$aS"--CAq!T2..EAr!$%6As!D!DD$< < < < < < << < < < < < <%c41B11E1EFFC&sD2CA2F2FGGD%aC999%b"**T*:*:;;;;	< 	<rb   c                   	
 |                      d|          }|                     g d|          }|                     dg|          }t          t          |||f          \  	
}t	          |j                  D ]Q}t          ||||          }t          j        	
fd||          }t          ||
                    |                     Rd S )Nr  r  rP   c                 &    t          |           S r  r  r  s    r`   r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>  r  rb   r  r  s            @@r`   test_rank_3_FIRz!_TestLinearFilter.test_rank_3_FIR  s    MM)R((zzz2..sB''01a)<<dD!&MM 	: 	:D1a&&A%&F&F&F&F&FdSSC%aC9999	: 	:rb   c                 6   |                      d|          }|                     g d|          }|                     dg|          }t          t          |||f          \  }t	          |j                  D ]}t          |j                  }d||<   |                     |                    |          |          }|                     ddg|          }	t          |	          t          |||||          \  }
}t          t          |||	f          \  fd}fd}t          j        |||          }t          j        |||          }t          |
|                    |                     t          ||                    |                      d S )Nr  r  rP   rQ   c                 6    t          |           d         S r  r  r   s    r`   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0  r  rb   c                 6    t          |           d         S r  r  r   s    r`   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1  r  rb   )r  r  ri  rC   r   r  r  r  rp  r   r  r  r:   rY   )r[   r\   rq   r^   r]   r  r  r  r  r  rr   r  r  r  r  r  r  r  r  s                   @@@r`   test_rank_3_FIR_init_condz+_TestLinearFilter.test_rank_3_FIR_init_cond  s   MM)R((zzz2..sB''01a)<<dD!&MM 	< 	<DAG}}HHTN##BGGH$5$5r::B$$aVR00C&s++FAq!T2..EAr!$%6As!D!DD$< < < < < < << < < < < < <%c466C&sD$77D%aC999%b"**T*:*:;;;;	< 	<rb   c                    |                      d|          }t          j        ddd          \  }}|                     ||          }|                     ||          }|j        d         dz
  }|                     |                    dd	|f          |          }|                     |                    dd|f          |          }t          ||||
          \  }}	t          ||||
          \  }
}t          |
|           t          |	|           t          t          t          |||d|                    |                     d S )N)rL   rM   r  r   r  bar  r   rP   rL   rM   r  r   )
r  r   r   r  r  rp  r   r:   r   r   )r[   r\   rq   r^   r]   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings               r`   test_zi_pseudobroadcastz)_TestLinearFilter.test_zi_pseudobroadcast  s:   MM*b))}QD1111q"%%q"%%'!*q. $$RWWaG_%=%=rBB$$RWWaG_%=%=rBB!!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Irb   c                    |                      d|          }|                     g d|          }|                     dg|          }|                     g d|          }t          ||d         |          }t          ||           d S )NrN   r  rP   )r   rP   rQ   rQ   rQ   rQ   r   r  )r[   r\   rq   r^   r]   r  rr   s          r`   test_scalar_az_TestLinearFilter.test_scalar_a  s     MM!R  zzz2..sB''  !3!3!3R88AqtQ!!S)))))rb   c                    |                      |                    d|j                  |          }|                      |                    d|j                  |          }|                      |                    g d          |          }t          j        dt
          j                  }|dd d d d fxx         dz  cc<   |dd d d d fxx         dz  cc<   |                    |          }|                      ||          }|                      |                    d	|j                  |          }t          j        dt
          j                  }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)rK   rQ   rM   r   rM   )rP   r   r   )rK   rP   rL   rP   rQ   rK   )rK   rQ   rL   rL   r   r   )r  r  r   rp  rY   r  r   r:   )r[   r\   rq   r^   r]   r  zf_expected
y_expectedy_iirzf_iiry_firzf_firs               r`   test_zi_some_singleton_dimsz-_TestLinearFilter.test_zi_some_singleton_dims  s   
 rxx	xBBBGGrwwqw992>>rzz)))44b99WYbh///
1aaa7q
1aaa7qZZ^^B''(()28)L)LbQQXirx888
"#use4
111aaa!8ZZ
++
''
B77
  1aR00v!%444!&+666  1Q4B33v!%444!&+66666rb   c           	          |                      ||          }|                      ||          }|                      ||          }|                      ||          }t          t          t          |||||           d S r  )r  r   r   r   )r[   r^   r]   rq   r  r  r\   s          r`   base_bad_size_ziz"_TestLinearFilter.base_bad_size_zi  sv    q"%%q"%%q"%%B''j'1aD"=====rb   zcupy does not raisec                 4   |                     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 )NrN   rP   r   r   r   rP   rQ   r  r   rP   rQ   rK   rW   r  rQ   )r   rP   rQ   rK   rL   rM   rd   rK   rL   rM   )rL   rM   rN   r   )r   rP   rQ   rK   rL   rM   rN   r   r   r   r/  )r   r'  r  r   rY   )r[   r\   r   r   s       r`   test_bad_size_ziz"_TestLinearFilter.test_bad_size_zi  s    YYq\\qcA3BR888q!fqc2rAq62>>>q!fqc2rQC5"===q!fqc2r999bAAAiii!b"seR@@@iii!b"iiiDDDqcAq62rAq62>>>qcAq62rQC5"===qcAq62r999bAAAiii!QR!bAAAiii!QR1#sRHHHiii!QRBGGGiii!QRrJJJq!fiiiR!bAAAq!fiiiR1#sRHHHq!fiiiRBGGGq!fiiiRrJJJ Yr]]""5))ZZ^^qcA3AsB777 	q!fqc2q)))R@@@q!fqc2qIII;-DDDq!fqc2qA3aS/2FFFq!fqc2qAq6(B???q!fqc2q<<<."EEEiii!b!5G5G5GLLLiii!b!yyy)))6L5MrRRRiii!b!q!fq!fq!f5MrRRRiii!b!q!fq!f5ErJJJiii!b!lllLLL5QSUVVVqcAq62q)))R@@@qcAq62qIII;-DDDqcAq62qA3aS/2FFFqcAq62qAq6(B???qcAq62q<<<."EEEqc999b!5G5G5GLLLqc999b!yyy)))6L5MrRRRqc999b!q!fq!fq!f5MrRRRqc999b!q!fq!f5ErJJJqc999b!lllLLL5QSUVVViii!QQ8J8J8JBOOOiii!QQ)))YYY9O8PRTUUUiii!QQ!Q!Q!Q8PRTUUUiii!QQ!Q!Q8H"MMMiii!QQ+||\\\:B	@ 	@ 	@ 	qcA3AsB777q!fqc2q,,,CCCq!fqc2qQC!qcA33G2H"MMMq!fqc2q<<<."EEEq!fqc2qA3aS/2FFFq!fqc2qA3aS1#s2KRPPPiii!b!5M5M5MrRRRiii!b!!"AAAA?@"	F 	F 	Fiii!b!lllLLL5QSUVVViii!b!q!fq!fq!f5MrRRRiii!b! !1v1v1v1v1vF	L 	L 	L 	qcAq62q,,,CCCqcAq62qQC!qcA33G2H"MMMqcAq62q<<<."EEEqcAq62qA3aS/2FFFqcAq62qA3aS1#s2KRPPPqc999b!5M5M5MrRRRqc999b!!"AAAA?@"	F 	F 	Fqc999b!lllLLL5QSUVVVqc999b!q!fq!fq!f5MrRRRqc999b!q!f !fq!fq!fq!f6>?A	C 	C 	C 	iii!QQ8P8P8PRTUUUiii!QQ!"AAAA?@"	F 	F 	Fiii!QQ+||\\\:B	@ 	@ 	@iii!QQ!Q!Q!Q8PRTUUUiii!QQ !1v1v1v1v1vF	L 	L 	L 	L 	Lrb   c                    |                      d|          }|                     dg|          }|                     dg|          }|                     g |          }t          ||||          \  }}t          ||           |j        t          | j        t                    rt          || j                  n| j        k    sJ t          |          dk    sJ d S )N)rM   rP   r  r   )	r  r  r   r:   r   r  r  r  r=   )r[   r\   rq   r]   r^   r  rr   r  s           r`   test_empty_ziz_TestLinearFilter.test_empty_zi  s    MM$##sB''sB''B''1aB'''2!!Q'''x)$*c::,GB
333!%- - - - r{{arb   rF   z jax does not support inplace opsr]   rP   )rP   r&        ?rQ   )rQ   rP   rK   )idsc           	         t          |          r1t          |t          t          z            rt	          j        d           |                     d|          }|                     g d|          }|                     ||          }t          |          dz
  }t          |          dz
  }t          |          r||z   nt          ||          }t          ||||                     ||                    \  }}	t          |||                    |          |                    |                    }
t          |	|
           d S )Nz0cupy does not supoprt scalar filter coefficientsrN   )r&  r  r  rP   r  )r9   r  rz  r  r  r  r  r  r=   r-  r   r#   rh  r:   )r[   r]   r\   rq   r^   r  r  KrN  zi_1zi_2s              r`   test_lfilticz_TestLinearFilter.test_lfiltic  s    2;; 	L:au55 	LKJKKKMM!R  |||R00q"%%AJJNAJJNR[[/AEEc!Qii1at}}Q';';<<<Dq!RWWR[["''!**55!$-----rb   c           	      8   t          t          t          ddgg ddgddg           t          t          t          ddgddgddgddg           t          t          t          ddgdgdggddgddg           t          t          t          dgdggdgddgddg           d S )NrP   rQ   r   )r   r   r#   r  s    r`   test_lfiltic_bad_coeffsz)_TestLinearFilter.test_lfiltic_bad_coeffs  s     	j'Aq621v1vFFFj'Aq6Aq6Aq6Aq6JJJj'Aq6QC!:1v1vNNNj'QC!:sQFQFKKKKKrb   array_api_strictz-int64 and float64 cannot be promoted togetherzjax dtype defaults differc                    |                      dg|          }|                      dg|          }t          |||                    ddg                    }t          |||                    ddg                    }t          |||                    ddg                    }t          ||           | j        t
          k    ri nddi}t          ||fi | d S )NrP   r  r   TFr  )r  r#   rY   r5   r   object)r[   r\   r]   r^   r  r2  r3  check_dtype_args           r`   test_lfiltic_bad_ziz%_TestLinearFilter.test_lfiltic_bad_zi  s     sB''sB''Q2::r1g..//q!RZZa1122q!RZZu6677D!!! $
f 4 4""=%:PD44O44444rb   c                    |                      dg|          }|                      g d|          }|                      ddg|          }|                      dg|          }|                      dg|          }|                      ddg|          }t          ||||          \  }}	t          ||           t          |	|           d S )	NrP   r  rQ   r   rx  rV  r  r  r   r:   
r[   r\   r]   r^   r  rq   yezferr   r  s
             r`   test_short_x_FIRz"_TestLinearFilter.test_short_x_FIR  s     sB''zzz2..A++tR((b))  !S2..1aB'''2!!R(((!"c*****rb   c                    |                      ddg|          }|                      g d|          }|                      ddg|          }|                      dg|          }|                      dg|          }|                      ddg|          }t          ||||	          \  }}	t          ||           t          |	|           d S )
NrP   r  rQ   r   rx  rV  ir=  r  r>  r?  s
             r`   test_short_x_IIRz"_TestLinearFilter.test_short_x_IIR  s     1vr**zzz2..A++tR((b))  #sR001aB'''2!!R(((!"c*****rb   c                    |                      d|          }|                     ddg|          }t          ||          }|                     ddg|          }t          ||          }|                     g d|          }t          |||          }t	          ||           t          ||           t          ||           d S )Nr  rP   r   r  r&  r  r  r  r  r<   r   r:   r5   	r[   r\   rq   r^   b0r]   a0r  y_fs	            r`   test_do_not_modify_a_b_IIRz,_TestLinearFilter.test_do_not_modify_a_b_IIR  s    MM$##2w++Q2T{B//Q2  !5!5!5r::aA!#s+++22rb   c                    |                      d|          }|                     g d|          }t          ||          }|                     dg|          }t          ||          }|                     g d|          }t          |||          }t	          ||           t          ||           t          ||           d S )Nr  r  r  rQ   )r   r&  rP   rQ   rK   rl  rF  rG  s	            r`   test_do_not_modify_a_b_FIRz,_TestLinearFilter.test_do_not_modify_a_b_FIR  s    MM$##yyy"--Q2sB''Q2  !6!6!6;;aA!#s+++22rb   Tr  r  r^   c                    t           j                            d          }|                    |          }t	          t          |                    dg          |                    dg          |          t          |||                     d S )NrR   r  )r  r  r  rY   r4   r   )r[   r]   r^   r\   r  s        r`   test_scalar_inputz#_TestLinearFilter.test_scalar_input  s~     yr""zz$BJJu%%rzz3%'8'8$??Aq$	
 	
 	
 	
 	
rb   N)*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  r  r@   r#   r4  r6  r;  rB  rD  rK  rM  r  r  rO  r   rb   r`   r  r    s       ) ) )0 0 0 f%VWWW  XW9 9 99 9 9 f%QRRR	, 	, SR	, f%QRRR	, 	, SR	,. . .. . . f%QRRR, , SR, f%QRRR, , SR,: : : vl333< < 43<*	: 	: 	: vl333< < 43<. f%QRRRJ J SRJ* f%QRRR* * SR* f%QRRR7 7 SR7:> > > f%:;;;gL gL <;gLR      k*LMMM[S1qc<<<QC"K!$  & &w. .  & & NM.$ wL L  L #R   k*EFFFw5 5   GF 
5 f%QRRR+ + SR+ f%QRRR+ + SR+
 
 

 
 
 d###[S3xrx}}"=>>[S3xrx}}"=>>
 
 ?> ?> $#
 
 
rb   r  c                       e Zd ZdZdS )TestLinearFilterFloat32r   Nr"  r#  r$  r   r   rb   r`   rQ  rQ            EEErb   rQ  c                       e Zd ZdZdS )TestLinearFilterFloat64r   NrR  r   rb   r`   rU  rU  	  rS  rb   rU  r  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterFloatExtendedr7  Nr"  r#  r$  r  r   r   rb   r`   rW  rW  	          BHSMMEEErb   rW  c                       e Zd ZdZdS )TestLinearFilterComplex64r   NrR  r   rb   r`   r[  r[  	  s        EEErb   r[  c                       e Zd ZdZdS )TestLinearFilterComplex128r   NrR  r   rb   r`   r]  r]  	  s        EEErb   r]  c                   .    e Zd Z ej        d          ZdS )TestLinearFilterComplexExtendedGNrX  r   rb   r`   r_  r_  	  rY  rb   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-dbgr  )r  Nri  r  ri  rk  )hasattrsysrb  r  r  r   r  r   r  s    r`   test_lfilter_bad_objectrf  	  s     sJ ?C3<$7$7=>>>)WsecU4D4D4DEEE)WsedV___EEE)Wtfse___EEEEErb   c                 L    t          t          t          ddgddgg d           d S )NrQ   rK   rL   rM   )rP   rQ   rK   rL   rM   )r   r  r   r  s    r`   !test_lfilter_notimplemented_inputrh  $	  s-     %w1!ukkkJJJJJrb   rS  r  rF   zfails all aroundrH   c                       e Zd Zd Zd Zd Z edd          d             Zd Zd	 Z	d
 Z
d Z edd          d             Z edd          d             Z edd          d             ZdS )TestCorrelateRealc                     |                     ddd|          }|                     ddd|          }|                    g d|          }|||fS )Nr   rK   rL   r   rP   rQ   )r   rQ   rM   r   rK   )r  rY   r[   rS  r\   r]   r^   r  s         r`   _setup_rank1zTestCorrelateReal._setup_rank13	  sY    KK1arK**KK1arK**jjj33!Syrb   c                     d}	 t          j        |          }t          |d          r)t          dt          j        |j                  z            }n# t          $ r Y nw xY w|S )NrN   
resolutionr  )r  r  rd  rz  log10ro  	Exception)r[   res_dtr  dt_infos       r`   equal_tolerancez!TestCorrelateReal.equal_tolerance:	  ss    	hv&&Gw-- Ad28G,>#?#??@@ 	 	 	D	s   AA 
AAc                     |t           j        k    r|                     t           j                  S |                     |          S r  )r  r  rt  r   )r[   rr  s     r`   equal_tolerance_fftz%TestCorrelateReal.equal_tolerance_fftE	  s;     R]""''
333''///rb   Tz	order='F'rx   c                 ~   t          ||          }|                     ||          \  }}}t          ||d          }t          ||d          }t          |||                     |j                             t          |||                     |j                             |j        |k    sJ |j        |k    sJ d S )Nr
   r   r   r  )r  _setup_rank3r   r:   rv  r   rt  )r[   rS  r\   r]   r^   r  y_ffty_directs           r`   test_methodzTestCorrelateReal.test_methodM	  s    R__%%b"--	1c!Qu---Q(333!#u*.*B*B5;*O*O	R 	R 	R 	R!#x*.*>*>x~*N*N	Q 	Q 	Q 	Q{b    ~######rb   c                    t          |          r|dv rt          j        d           t          |t                    rt          ||          n|}|                     ||          \  }}}t          ||d          }t          ||dd                    |j	        |k    sJ t          ||d          }t          ||
                    |dd                              |j	        |k    sJ d S )Nr  $torch does not support unsigned intsr   rP   rL   )r7   r  r  r  r  r  rm  r   r:   r   rh  r[   rS  r\   r]   r^   r  rr   s          r`   test_rank1_validz"TestCorrelateReal.test_rank1_valid\	  s    B<< 	?B"@@@;=>>> *2s 3 3;WR___%%b"--	1caG$$!!S1X...w"}}}} aG$$!!RWWS1X%6%6777w"}}}}}}rb   c                 B   t          |          r|dv rt          j        d           t          |t                    rt          ||          n|}|                     ||          \  }}}t          ||d          }t          ||d d                    |j	        |k    sJ d S )Nr  r}  re   r   
r7   r  r  r  r  r  rm  r   r:   r   r~  s          r`   test_rank1_samez!TestCorrelateReal.test_rank1_samek	  s    B<< 	?B"@@@;=>>> *2s 3 3;WR___%%b"--	1caF##!!S"X...w"}}}}}}rb   c                 2   t          |          r|dv rt          j        d           t          |t                    rt          ||          n|}|                     ||          \  }}}t          ||d          }t          ||           |j	        |k    sJ d S )Nr  r}  r   r  r~  s          r`   test_rank1_fullz!TestCorrelateReal.test_rank1_fullv	  s    B<< 	?B"@@@;=>>> *2s 3 3;WR___%%b"--	1caF##!!S)))w"}}}}}}rb   c                    t          j        ddd                              dd                              |          }t          j        ddd                              d	d                              |          }t          j        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   r  r?  )rQ   rL   rM   F)orderrV   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@)r  g      y@g     ,@     @g     @g     $@g     @@g     Pr@)r  g     @g     @g     @g     @g     ԩ@g     @g     }@)g     Pt@g      @g     R@g     @g     (@g     K@g      @g     @)g     ؁@g     @g     f@g     @g     (@g     }@g     (@g     @)g      {@r  g     4@r  g     @g     ܧ@g     @     l@)g      n@g     @g     @g     @g     @g     @g     @rg  )r  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   )r  r  r   r  r  r   rl  s         r`   rx  zTestCorrelateReal._setup_rank3	  sq   K2r""**9C*@@GG K2r""**9C*@@GG  hHHH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rb   c           	         t          |t                    rt          ||          n|}|                     ||          \  }}}t	          ||d          }t          ||ddddddf                    |j        |k    sJ t	          ||d          }t          ||ddddddf         d d dd d dd d df                    |j        |k    sJ d S )Nr   rP   rQ   rL   rK   rM   r   )r  r  r  rx  r   r:   r   r~  s          r`   test_rank3_validz"TestCorrelateReal.test_rank3_valid	  s     *2s 3 3;WR___%%b"--	1caG$$!!S1ac1Q3%7888w"}}}} aG$$!!S1ac1Q3%7"dddDDbD8H%IJJJw"}}}}}}rb   c                    t          |t                    rt          ||          n|}|                     ||          \  }}}t	          ||d          }t          ||ddddddf                    |j        |k    sJ d S )Nre   r   r   rP   r  r  r  r  rx  r   r4   r   r~  s          r`   test_rank3_samez!TestCorrelateReal.test_rank3_same	  s     *2s 3 3;WR___%%b"--	1caF##3qtQrT1R4/0111w"}}}}}}rb   c                     t          |t                    rt          ||          n|}|                     ||          \  }}}t	          ||          }t          ||           |j        |k    sJ d S r  r  r~  s          r`   test_rank3_allz TestCorrelateReal.test_rank3_all	  sm     *2s 3 3;WR___%%b"--	1caOO3w"}}}}}}rb   N)r"  r#  r$  rm  rt  rv  r%  r{  r  r  r  rx  r  r  r  r   rb   r`   rj  rj  *	  s-         	 	 	0 0 0 d;777$ $ 87$  	 	 		 	 	  < d;777
 
 87
 d;777  87 d;777  87  rb   rj  c                       e Zd Z ed          d             Z ed          d             Z ed          d             Z eddg           edd	
          d                         ZdS )TestCorrelateTr  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   )r  r   r   r   r   r   r   s       r`   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Jrb   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       r`   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Orb   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     r`   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4rb   r   )cpu_only
exceptionsrF   zdtype differsrH   c                 d   |                     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 )NrO   rL   rM   re   rf   )rM   r  rV   r   )r   rU   rV   r   )rN   r   rU   rV   rW   r   rU   )rY   r4   r   r   s       r`   test_numpy_fastpathz!TestCorrelate.test_numpy_fastpath	  s    JJyyy!!JJ1v	!QV444bjj6M6MNNNJJyyy!!JJyyy!!	!QV444bjj6N6NOOO	!QV444bjjATATAT6U6UVVV	!QW555rzz2$7G7GHHHHHrb   N)r"  r#  r$  r%  r   r   r!  r  r   rb   r`   r  r  	  s         d###
K 
K $#
K d###P P $#P d###5 5 $#5 t999k/:::	I 	I ;: :9	I 	I 	Irb   r  rg   r   re   r   behindF
input_sizer   rv  r  r  r  )marksi'  c                    t           j                            d          }|                    |          }t	          |dz            }|r-t          j        |                    |          |g          }| }n||d          }|}t          |||           }	t          |j        |j        |           }
t          j	        |	          }t          |
|         |           |
j        |	j        k    sJ d S )Nr   rR   rf   )r  r  r  r  rz  concatenater   r   r   argmaxr5   r  )rg   r  r  r\   r  in1offsetin2r   correlationlags	lag_indexs               r`   test_correlation_lagsr  	  s     )


"
"C


j
)
)CBF nc11&993?@@7 &''lC4000KCHchT:::D	+&&IDOX...:*******rb   c                     t          j        t          d          5  t          ddd           d d d            d S # 1 swxY w Y   d S )NzMode asdfgh is invalidrH  r   asdfghrf   )r  r   r   r   r  s    r`   "test_correlation_lags_invalid_moder  
  s    	z)A	B	B	B 2 2c11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   <A A dt_namer   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
dd	
          d             Z e
d          d             ZdS )TestCorrelateComplexc                     t          |          r|t          j        k    rt          j        }ddd|                    |          j                 }t          d|z  dz            S )Nr{  rN   )r@  rU   rQ   rK   )r6   r  r  cdoubler  bitsrz  )r[   rS  r\   precs       r`   r  zTestCorrelateComplex.decimal 
  sX    B<< 	B".00B Arxx||011t8a<   rb   c                 `   t           j                            d          }t           j                            d                              |          }|d|                    d                              |          z  z  }t           j                            d                              |          }|d|                    d                              |          z  z  }t          |j        |j        |          t          |j        |j        |          z                       |          }|dt          |j        |j        |           t          |j        |j        |          z   z  z  }|	                    |          |	                    |          |	                    |          }}}|||fS )Nr/  rR   r   r   rf   )
r  r  r  r  r  r  r   r   imagrY   )r[   rS  rg   r\   r  r]   r^   r  s           r`   rm  z!TestCorrelateComplex._setup_rank1(
  sm   i##A&&IOOB&&r**	R#%%b))004444IOOA%%b))	R#%%a((//3333d333d33345;VBZZ 	riT::::qvqvD999: ; 	; JJqMM2::a=="**S//c1!Syrb   c                    |                      |d|          \  }}}t          ||          }t          ||d          }t          |||                     ||                     |j        |k    sJ t          ||d          }t          ||                    |                    |                    |                     ||                     |j        |k    sJ d S )Nr   r  )rm  r  r   r:   r  r   conjrh  r[   r  r\   r]   r^   r  rS  rr   s           r`   r  z%TestCorrelateComplex.test_rank1_valid7
  s    %%gw;;	1cR!!aG$$!!S$,,r22F2FGGGGw"}}}} aG$$!!RWWRWWS\\%:%:*.,,r2*>*>	@ 	@ 	@ 	@w"}}}}}}rb   c                     |                      |d|          \  }}}t          ||          }t          ||d          }t          |||                     ||                     |j        |k    sJ d S )Nre   r  rm  r  r   r:   r  r   r  s           r`   r  z$TestCorrelateComplex.test_rank1_sameD
  su    %%gvr::	1cR!!aF##!!S$,,r22F2FGGGGw"}}}}}}rb   c                     |                      |d|          \  }}}t          ||          }t          ||d          }t          |||                     ||                     |j        |k    sJ d S )Nr   r  r  r  s           r`   r  z$TestCorrelateComplex.test_rank1_fullL
  su    %%gvr::	1cR!!aF##!!S$,,r22F2FGGGGw"}}}}}}rb   c                     t          ||          }|                    g d|          }|                    g d|          }t          ||          }t          ||                    g d          dd           d S )Nr   rm   r  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      r   Fr  )r  rY   r   r4   )r[   r  r\   rS  r   krr   s          r`   test_swap_fullz#TestCorrelateComplex.test_swap_fullS
  s    R!!JJ///rJ::JJ777rJBBaOOrzzNNNOO5	
 	
 	
 	
 	
 	
rb   c                     |                     g d          }|                     g d          }t          ||d          }t          ||                     g d                     d S )Nr  r  re   rf   )r  r  r  )rY   r   r4   )r[   r  r\   r   r  rr   s         r`   test_swap_samez#TestCorrelateComplex.test_swap_same]
  so    JJ///00JJ77788a(((2::&A&A&ABBCCCCCrb   r   notimplementederrorrH   c                 P   t          |          r t          dk    rt          j        d           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          ||          }t          ||d	          }t          |||                     ||          d
z
             |j        |k    sJ d S )Ncpuz)error tolerances exceeded with JAX on gpurH   rR   r   rN   r   rL   r   rP   r  )r8   rB   r  xfailr  r  r  r  r   r   r  rY   r  r:   r  r   r  s           r`   
test_rank3zTestCorrelateComplex.test_rank3c
  s   ":: 	M,%//L KLLLLIOOB1%%,,W55	R")//"a++227;;;;IOOAq!$$++G44	R")//!Q**11'::::((1616**+,2F7OO 	ri///)AFAF2K2KKLLJJqMM2::a=="**S//c1R!!aF##!!S$,,r22F2F2JKKKKw"}}}}}}rb   Tr  c           	         t          j        t           j                                                                      |          }|dt          j        t           j                                                                      |          z  z  }t          j        t           j                                                                      |          }|dt          j        t           j                                                                      |          z  z  }t          ||          }t          |j        |j                  t          |j        |j                  z                       |          }|dt          j        t          |j        |j                   t          |j        |j                  z             z  z  }|	                    |          |	                    |          }}t          ||d          }t          |||                     ||          dz
             |j        |k    sJ t          t          dgdg          t          j	        t          dd                    d           t          t          dgdg          t          j	        t          dd                    d           t          t          dgd	g          t          j	        t          dd	                    d           d S )
Nr   r   rP   r  rp   F)check_shape              @rL   )r  r  r  r  r  r  r   r   r  rY   r:   r  r   r5   )r[   r  r\   r]   r^   rS  r  rr   s           r`   
test_rank0zTestCorrelateComplex.test_rank0w
  sy   HRY__&&''..w77	R"(29??,,--44W====HRY__&&''..w77	R"(29??,,--44W====R!!((1616**+,2F2JJ 	rBHi777&qvqv667 8 8 8 	8 zz!}}bjjmm1aF##!!S$,,r22F2F2JKKKKw"}}}}	1#t,,bj1b9I9I.J.J$)	+ 	+ 	+ 	+	2$--rz)B:K:K/L/L$)	+ 	+ 	+ 	+	2$,,bj2q9I9I.J.J$)	+ 	+ 	+ 	+ 	+ 	+rb   N)r"  r#  r$  r  rm  r  r  r  r  r  r%  r  r  r   rb   r`   r  r  
  s        ! ! !        
 
 
D D D f%:;;;  <;& d###+ + $#+ + +rb   r  c                      e Zd Z eej                  d             Z ed           eej                  d                         Z	 ed           eej                  d                         Z
 eej                  d             ZdS )TestCorrelate2dc                     t          j        d          }t          j        g d          }dD ]}|                    |          |                    |          }}t          j        |||          }t          t          j        |||          |                    |                     |dk    rOt          j        |||          }t          t          j        |||          |                    |                     d S NrM   r  r  rf   r   )r  r   r  rY   r   r;   r   )r[   r\   r]   r^   rg   a_xpb_xpnp_corr_results           r`    test_consistency_correlate_funcsz0TestCorrelate2d.test_consistency_correlate_funcs
  s    IaLLH]]]##- 
	@ 
	@DA

1$D\!QT:::N 0t$ G G G "

> : :< < < w!#a!>!>!>#F$4T4d$K$K$K$&JJ~$>$>@ @ @
	@ 
	@rb   Tr  c           
         t          j        d          }t          j        g d          }dD ]}t          t          j        t          j        |g|g|                    t          j        |||                     |dk    rNt          t          j        t          j        |g|g|                    t          j        |||                     d S r  )r  r   r  r;   r  r   r   r   )r[   r\   r]   r^   rg   s        r`   "test_consistency_correlate_funcs_2z2TestCorrelate2d.test_consistency_correlate_funcs_2
  s    IaLLH]]]##- 		G 		GD
6+=qcA3CG,I ,I ,I !J !J & 0AD A A AC C C
 w#BJv/A1#sGK0M 0M 0M %N %N$*$4Q$E$E$EG G G		G 		Grb   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   )r  r   r   r   r   r   r   r   s       r`   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Srb   c                 ^   t          t          j        |                    dgg          |                    dgg                    |                    dg          dd           t          t          j        |                    dgg          |                    dgg                    |                    dg          dd           t          t          j        |                    dgg          |                    dgg                    |                    d	g          dd           d S )
NrP   rp                 F)r  r  r  y      @        rL   y              (@)r5   r   r   rY   r   s     r`   test_complex_inputz"TestCorrelate2d.test_complex_input
  s+   *2::se+<+<bjj2$>P>PQQ

C5))u%	Q 	Q 	Q 	Q*2::tf+=+=rzzB4&?Q?QRR

D6**5	R 	R 	R 	R*2::tf+=+=rzzA3%?P?PQQ

C5))u%	Q 	Q 	Q 	Q 	Q 	Qrb   N)r"  r#  r$  r@   r   r   r  r%  r   r  r   r  r   rb   r`   r  r  
  s        v'((@ @ )(@  d###v)**G G +* $#G  d###v)**
T 
T +* $#
T v)**Q Q +*Q Q Qrb   r  c                       e Zd Z edd          d             Zd Zd Zej        	                    ddd	g          d
             Z
dS )TestLFilterZITzlist inputs are numpy specificrx   c                 |    |                     ddg          }t          g dg d          }t          ||           d S )Nr  rj  r  r*  ri  r  rj  r&  rY   r   r:   )r[   r\   zi_expectedr  s       r`   test_array_likezTestLFilterZI.test_array_like
  sG    jj#t--)9)9)9::!"k22222rb   c                     |                     g d          }|                     g d          }|                     ddg          }t          ||          }t          ||           d S )Nr  r  r  rj  r  )r[   r\   r]   r^   r  r  s         r`   ra   zTestLFilterZI.test_basic
  si    JJ'''((JJ''jj#t--1!"k22222rb   c                     |                     g d          }|                     g d          }t          ||          }t          d|z  d|z            }t          ||d           d S )N)ri  r   rM   )r  rP   r   rQ   r)  r  )rY   r   r4   )r[   r\   r^   r]   r  zi2s         r`   test_scale_invariancez#TestLFilterZI.test_scale_invariance
  so     JJ{{{##JJ{{{##A1ac""Su------rb   r   r   r   c                     t          ||          }|                    d|          }|                    dg|          }t          j        ||          j        |k    sJ d S )Nr   r   rP   )r  r  rY   r   r   r   )r[   r   r\   r^   r]   s        r`   r  zTestLFilterZI.test_types
  sd    E""HHaH&&JJs%J(( A&&,555555rb   N)r"  r#  r$  r%  r  ra   r  r  r  r  r  r   rb   r`   r  r  
  s         d+KLLL3 3 ML3
3 3 3. . . [Wy)&<==6 6 >=6 6 6rb   r  c                   &   e Zd ZdZ	 	 ddZ edd	          d
             Z edd	          d             Z edd	          d             Z edd          d             Z	 edd          d             Z
 edd          d             ZdS )TestFiltFilttfr   oddNr  c	           
      ,   | j         dk    rLt          | \  }	}
|                    |	          |                    |
          }
}	t          |	|
||||||          S | j         dk    r1t	          | }|                    |          }t          |||||          S d S )Nr  sos)filtfilt_kindr   rY   r   r   r&   )r[   zpkrq   r  r  padlenr   irlenr\   r^   r]   r  s               r`   r   zTestFiltFilt.filtfilt
  s    %%3<DAq::a=="**Q--qAAq!T7FFEJJJ5((3-C**S//CsAtWf=== )(rb   r   negative stridesrH   c                    t          |          r | j        dk    rt          j        d           t	          |                    g d          |                    g d                    }|                     ||                    d          |          }t          |          rdnd}t          ||                    d|j
        	          |
           d S )Nr  sosfilt works in-placerH   r  rW   r  g&.1>g6{=r   r   )r8   r  r  r  r(   rY   r   r   r9   r4   r   )r[   r\   r  r   r   s        r`   ra   zTestFiltFilt.test_basic   s    ":: 	9$,55K78888RZZ


++RZZ


-C-CDDmmC22m66bkk/ddxRYYrY<<4HHHHHHrb   c                 ~   t          |          r | j        dk    rt          j        d           d}|                    dd|dz             }|                    dt          j        z  |z            }|                    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
                                            }|dk     sJ |	                    t          j        |||z   g                    }|                     |||
d|          }|j        |j        k    sJ t          j
        ||z
                                            }|dk     sJ |                     ||j        |
d|          }t'          ||j                   d S )Nr  r  rH     r   r  rP   rR   i  r         ?r  r  r   )r  r\   r   r  r  r\   )r8   r  r  r  r  r  r  r,  r   rY   r-  r-  rz  ceillogr   vstackr  r  r5   )r[   r\   r2  r   xlowxhighrq   r  repsr
  rr   errx2dy2dy2dts                   r`   	test_sinezTestFiltFilt.test_sine
  s    ":: 	9$,55K78888KK3q))vvebema'((w*++5LQ

5))%888F3q6NN   sbfQii/0011 MM#qrM22fQX""$$Tzzzz jjD$,#78899mmCQQ2m>>yCI%%%%fS4Z  $$&&Tzzzz }}S#%b}AATV$$$$$rb   c           
      >   t          |          r | j        dk    rt          j        d           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 )Nr  r  rH   g     @rR   r  rW   rK   r  r  r  r   r  rP   rQ   )r8   r  r  r  r  r   r   rY   r   r   r  r5   )r[   r\   rq   r  rM  rN  r  s          r`   	test_axiszTestFiltFilt.test_axis0  sw   ":: 	9$,55K78888 I())11"b"==JJqMMQ

5))%888]]3!!];;]]BK1a0011!!  
 
 	BJJr{2q!'<'<==>>>]]BK1a0011!!  
 
 	BJJr{2q!'<'<==>>>>>rb   Tz-python scalars in array_namespace are np-onlyrx   c                    | j         dk    rd S t          j        |                    ddg          d|                    d|j                            }t          ||                    d|j                  dd           d S )Nr  r&  rP   rR   r   r   r   )r  r   r   rY   r   r   r4   )r[   r\   r   s      r`   test_acoeffzTestFiltFilt.test_acoeffC  s     %%FoJJBx  !RYYrY%D%D
 
 	RYYrY<<5uUUUUUUrb   z_filtfilt_gust is np-onlyc           
         | j         dk    rt          j        d           |                    ddg          }|                    dg          }|                    ddg          }t	          |||          \  }}}t          |d         d|d         z  d	|d
         z  z              t          |d         d	|d         z  d|d
         z  z              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 )Nr  $gust only implemented for TF systemsr  ri  r&  r  r   r'  r  rP         ?r  )r  r  r  rY   r/   r4   )r[   r\   rq   r^   r]   rr   z1z2s           r`   test_gust_simplezTestFiltFilt.test_gust_simpleN  s[   %%K>??? JJSz""JJuJJT{##"1a++	2r1s1Q4x#ad(23331s1Q4x#ad(2333

BqEDAJ$6ad$BU1Q4Z$O$(AJA$6qt$Cd1Q4i$O$Q R R	
 	
 	
 	
 	
rb   c                     | j         dk    rt          j        d           |                    d          }d}d}t	          |||d          }||z  dz  |z  }t          ||           d S )	Nr  r  rW   rk  ri  gustr   rQ   )r  r  r  r   r   r4   )r[   r\   rq   r^   r]   rr   r   s          r`   test_gust_scalarszTestFiltFilt.test_gust_scalars_  s{     %%K>??? IIbMMQ1V,,,aC!8a<8$$$$$rb   )r   r  Nr  NN)r"  r#  r$  r  r   r%  ra   r
  r  r  r  r  r   rb   r`   r  r  
  sc       M>B.2	> 	> 	> 	> g&8999I I :9I g&8999#% #% :9#%J g&8999? ? :9?$ dLN N NV VN NV d+FGGG
 
 HG
  dLN N N% %N N% % %rb   r  c                   d    e Zd ZdZ edd           edd          d                         ZdS )	TestSOSFiltFiltr  rF   r  rH   r   r  c                    t           j                            d                              d          }|                    |          }t          dd          D ]}t          j        |dd          }t          | \  }}t          | }t          |j        |||f          \  }}}t          |||          }t          ||          }	t          ||	dd	| 
           dS )z1Test equivalence between sosfiltfilt and filtfiltr   r  rP   rN   ffffff?r  r  r)  zorder=)r   err_msgN)r  r  r  r  rY   r   r   r   r   r   ri  r   r&   r4   )
r[   r\   rq   r  r  r^   r]   r  rr   y_soss
             r`   test_equivalencez TestSOSFiltFilt.test_equivalences  s     I!!!$$**400JJqMM1a[[ 	L 	LE-tE:::C3<DAq3-CBJAs44IAq#Aq!!AQ''EAu5:J5:J:JKKKKK	L 	Lrb   N)r"  r#  r$  r  r%  r  r   rb   r`   r  r  o  sf        Mk*BCCCg&8999L L :9 DCL L Lrb   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|           |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.rP   Nr  r   r   rQ   )r-  rQ  r   r  sum)icsr^   r]   rq   mz0fz0brJ  y_fby_by_bfvalues               r`   filtfilt_gust_opt_funcz1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_func  s    AA!#"1"g!""gaA#&&&q)q!S2Y3///244R48aAdddG,,,Q/"5q!SS)))!,ta'((rb   rP   Nr  r)  r  TF)r  xtolftolmaxfunmaxiterfull_outputdispr   z3minimization failed in filtfilt_gust_opt: warnflag=r   r  )	r-  rQ  r   r  r  r  r   r)  r   )r^   r]   rq   r*  r#  r  r"  rs  optfoptniterfuncallswarnflagr$  r%  r'  rr   s                    r`   filtfilt_gust_optr6    s^      	CFFCFFaA	Aq		B
.!BQB%**,,r/1aRSS6;;==+;<
=
=C(#Q1I5"0 0 0F ,2(Cuh!||L(LL
 
 	
 bqb'C
abb'C !Q$$B$C
(
(
(
+DDbD
1C1cc"""1%Ac3;rb   c                    t           j                            d          }|                    |          }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  r   r  )r  r  r   rP   c                 ,    g | ]}t          |          S r   )r   )r   r   s     r`   r   z'check_filtfilt_gust.<locals>.<listcomp>  s    666q%((666rb   r  r  r   )r  r  r  r  r   r/   r  r  
empty_liker-  rQ  r  r   r6  r4   )r^   r]   r  r  r  r  rq   rr   ygzg1zg2xx	out_shaper  r#  zo1zo2indxs                     r`   check_filtfilt_gustrB    s   
)


$
$CE""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3rb   rR   c                    dD ]b}dD ]}d\  }}}t          j        j        |f|z   }t          j        j        |f|z   }t          |||          }||k    sJ t          |||d          \  }	}
|	dv sJ t	          |
t
                    sJ d|
                                v rd	|
                                v sJ d
}dD ]Y}t          t           |          rBt          j        ||          }|	                                }t          |||          d	k    sJ Zt          j
        dgt           j                  }|	                                }t          |||          d	k    sJ dd S )Nr  )rP   rQ   )r   rN   r   rf   T)rg   measure>   r
   r   r
   r   rR   
complex256
complex192r   l         @ )r  r  r  r   r  dictkeysrd  rp  r  r  r   )r\   rg   r  r
  r  true_methodrq   r6  r   
method_trytimesnot_fft_conv_supps               r`   test_choose_conv_methodrN    s    * ? ? 	F 	FD .Aq+	1$+/A	1$+/A'14888F[(((( 21adD Q Q QJ!22222eT*****EJJLL((X-E-E-E-E-E!= 	G 	Gr,-- GGA%6777FFHH)!QT:::hFFFFHeWBH---FFHH!!QT222h>>>>>/? ?rb   c                     dD ]`}d}dD ]Y}t          t          |          rBt          j        ||          }|                                }t	          |||          dk    sJ Zad S )Nr  rR   rE  r   rf   r   )rd  r  rp  r  r   )r\   rg   r
  rM  rq   r6  s         r`   test_choose_conv_method_2rP    s    ) G G!= 	G 	Gr,-- GGA%6777FFHH)!QT:::hFFFF		GG Grb   c           	         t          j        ddddd          \  }}}d}t          j        t          j        |                    }t          t          j        t          j        |          t          j        |          z                      }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 )NrK   {Gz?x   gffffff?r  r  r  rM   r   r   rQ   r  )r   ellipr  r-  r-  rz  r  r   r   rB  r   )r\   rs   pr  r  r  approx_impulse_lenr^   r]   r  
signal_lenr  r  lengths                 r`   test_filtfilt_gustrY    s4    l1dC>>>GAq! C
rvayyARWRVC[[26!99%<==>>!Q??DAq*+ 
: 
:++
 	Aq:-E::: !HH 	: 	:DIIE$E$K1eT59999	: !!B&F1vi,>?????rb   c                   F   e Zd Zd Zd Zd Zd Z edd          d             Z edd          d	             Z	 edd          d
             Z
 edd          d             Zd Zd Zd Zd Z edd          d             Z edd          d             ZdS )TestDecimatec                     |                     d          }t          t          t          j        |dd           t          t          t          j        |dd           d S )NrW   r&  rP   )qr
  rQ   )r   r   r  r   decimater[   r\   rq   s      r`   test_bad_argszTestDecimate.test_bad_args  sM    IIbMMi!sa@@@@i!qC@@@@@@rb   c                     |                     d          }t          j        |dddd                                          }t	          ||d d d                             t                               d S )NrW   rQ   rP   iirFr
  ftype
zero_phaser   r   r^  roundr5   r  r  r[   r\   rq   rr   s       r`   test_basic_IIRzTestDecimate.test_basic_IIR  c    IIbMMOAqAUuEEEKKMM1SSqS6==//00000rb   c                     |                     d          }t          j        |dddd                                          }t	          ||d d d                             t                               d S )NrW   rQ   rP   firFrc  rf  rh  s       r`   test_basic_FIRzTestDecimate.test_basic_FIR$  rj  rb   c                     |                     d          }t          j        |ddd          }|j        dk    sJ t          j        |ddd          }|j        dk    sJ d S )	N)r   r   rQ   r   F)r  re  )r{  r   rP   )r   r{  )r  r   r^  r  )r[   r\   rs   d0d1s        r`   
test_shapezTestDecimate.test_shape)  so    HHX_Qe<<<x8####_Qe<<<x8######rb   Tztest code is NumPy specificrx   c                     t          j                    5  t          j        ddt                     |                     dd           d d d            d S # 1 swxY w Y   d S )NrG  Badly conditioned filterrl  Fr   re  rL  rM  rN  r)   _test_phaseshiftr   s     r`   test_phaseshift_FIRz TestDecimate.test_phaseshift_FIR1  s    $&& 	B 	B#4oG G G!!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          j                    5  t          j        ddt                     |                     dd           d d d            d S # 1 swxY w Y   d S )NrG  rs  rl  Trt  ru  r   s     r`   test_zero_phase_FIRz TestDecimate.test_zero_phase_FIR8  s    $&& 	A 	A#4oG G G!!4!@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Arx  c                 4    |                      dd           d S )Nrb  Frt  rv  r   s     r`   test_phaseshift_IIRz TestDecimate.test_phaseshift_IIR?  s!    Uu=====rb   c                 4    |                      dd           d S )Nrb  Trt  r|  r   s     r`   test_zero_phase_IIRz TestDecimate.test_zero_phase_IIRC  s!    Ut<<<<<rb   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 ]8}	||	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          j        |                                |z            |         }t1          |t          j        |          dd           :d S )NrS  )r{  r  r   r?  r   rP   皙?rQ   rp   皙?rl  r   r  r  r  rb  r   g?Frd  re  r   r  r&  r   rg  )r  r   r  r  r  r,  r+  r   windowstukeyr   dltir   cheby1freqzr  denr-  rK  r^  r   r!  r  angler4   r  )r[   r   re  r2  r3  t_totr   r4  r   r5  r]  r6  d_tosr
  systemwc_h_respsr8  	h_resampssubnyqrs  s                         r`   rv  zTestDecimate._test_phaseshiftG  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 XgllnnY677?FFBM&$9$9!%D2 2 2 2 2E#	2 #	2rb   c                    d}d}|                     |          |z  }|                    |                    d|z            |                    d|j        z  |dz  z  |z            z            }t          |                    |                    |                    |                    d          dd	           t          j        |d
d          }|                    |                    |                    dk     sJ d S )Ng      Y@r  ri  rQ   g      >@r  r   F)r   check_0dr   rl  )rd  rR  )	r   rY   sqrtr  r,  r4   dotr   r^  )r[   r\   sfreqr
  r   rq   x_outs          r`   test_auto_nzTestDecimate.test_auto_ny  s     IIaLL5 JJrwwrAvBE	US[0IA0M)N)NNOO 	a))2::b>>uUUUU2U333wwuyy''((4//////rb   c                     t          j        |                    d|j                  d          }t	          |                    |                    rJ d S )Nr  r   rR   )r   r^  rp  r   r	  isnanr_  s      r`   test_long_float32zTestDecimate.test_long_float32  sK     OBGGF"*G==rBBrxx{{#######rb   c                     t          j        t          j        dt          j                  d          }|j        j        t          j        k    sJ d S )Nr   r   rR   )r   r^  r  rp  r   r   r  r   )r[   rq   s     r`   test_float16_upcastz TestDecimate.test_float16_upcast  sA    OBGCrz:::B??w|rz))))))rb   r  c                 &   d}d}d}t          j        d|                    d|j        z  |z  dz            d|          \  }}}|                    t
                    |                    |                    d|j        z  |z  |z                      z  }|                    t
                    |                    |                    d|j        z  |z  |z                      z  }t          j        |||          }|                    d          |z  }	|                    d|j        z  |z  |	z            d	|                    d
|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  rM        @@rQ   r  )r  fsrp   r  r&  r  Fr  Tr  vIh%<=r   )r   r   rY   r,  r  r{  r  r  r   r^  r   r   r5   r   r4   )r[   r\   fcentrefwidthr  rs   rU  r  r  r   r   ynzpynzprefyzpyzprefs                  r`   test_complex_iir_dltiz"TestDecimate.test_complex_iir_dlti  s'    -2::agfnQ.>#?#?',5 5 51aHHWrzz"ru*w2Fr2I'J'J K KKHHWrzz"ru*w2Fr2I'J'J K KKQ1%%IIcNNR VVBJ(1,--RVVC"%K'1A56667 q!6eDDD. $&-1a"8"8 $!"$ $ $$'CaC) 	g&&&oa&TBBB $&-1a"8"8 $!"$ $ $$'CaC) 	V%e<<<<<<rb   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  rM   r  r  rQ   )r  rp   r   rP   r  r&  r  Fr  )r9  r:  r   Tr  )r   r   r  rootsr  r,  polyr  r   r^  upfirdnr5   r  )r[   r\   r  r  r  numtapsbbasezbasezrotbzr  r   r   r  r  r  r  s                    r`   test_complex_fir_dltiz"TestDecimate.test_complex_fir_dlti  sz     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;g&&&oa&TBBB%aAb999V$$$$$rb   N)r"  r#  r$  r`  ri  rm  rq  r%  rw  rz  r}  r  rv  r  r  r  r  r  r   rb   r`   r[  r[    s       A A A
1 1 1
1 1 1
$ $ $ d+HIIIB B JIB d+HIIIA A JIA d+HIII> > JI> d+HIII= = JI=02 02 02d0 0 0$ $ $* * *
 d6222= = 32=B d6222"% "% 32"% "% "%rb   r[  c                   r    e Zd Zd Zd Zd Zd Zej        	                    dddg          d             Z
d	S )
TestHilbertc                     |                     dg          }t          t          t          |           |                    d          }t          t          t          |d           d S )Nr   r  r   r  )rY   r   r   r   r   r_  s      r`   r`  zTestHilbert.test_bad_args  sS    JJ
|$$j'1---IIcNNj'1222222rb   c           	         d}|j         }|                    dd|z  |dz  |j                  }|                    |          }|                    |          }|                    d|z            }|                    d|z            }|                    ||||g          }	t          |	          }
|                    |
          }|                    |	                    |
          |
                    |
                    }|
                    |
          }t          ||	|           t          ||                    |	j                  |           t          |dd df         |                    | dz  |dz  |dz  |j                  |           t          |dd df         |                    d||dz  |j                  |           t          |dd df         |                    | dz  |dz  |dz  |j                  |           t          |dd df         |                    d||dz  |j                  |           t          |	                    |
dd d f                   ||           d S )	Nr  r   rQ   r  r   rP   r  rK   )r,  r   r   r  r  r  r   r-  atan2r  r   r;   rp  r  )r[   r\   r  r,  r   rI  a1a2a3r]   r6  h_absh_angleh_reals                 r`   test_hilbert_theoreticalz$TestHilbert.test_hilbert_theoretical  si   UIIaRcI<<VVAYYVVAYYVVAE]]VVAE]]HHb"b"%&&AJJq		((2771::rwwqzz22 	FAw///E27717#3#3W=== 	GAttG,IIrcAgrAvrCxrzIRR#	% 	% 	%
 	AttGbii2rCxrziJJG	U 	U 	U 	GAttG,IIrcAgrAvrCxrzIRR#	% 	% 	% 	AttGbii2rCxrziJJG	U 	U 	U 	BGGAadG,,b':::::rb   c                 P   |                     |                    d|j                  d          }t          |d          }t	          t          |j        d          |j                   t          t          |dd d f                   |dd d f         d           t          |dd	          }|j        d
k    sJ t          |j        dd	          j        dk    sJ t          j	        g d          }|
                    |          }t          |dd d f         |dd           d S )Nrw  r   )rK   rN   r   r  r   r  r  )r  r  )rK   r  )r  rK   )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)r  )r   r   r   r   r5   r  r;   r  r  r  rY   )r[   r\   r]   aaaana0hilbs         r`   test_hilbert_axisNzTestHilbert.test_hilbert_axisN  s=   JJryy2:y66??QR   !,,,bd333GAadG,,bAAAh;;; a2B'''yG####qsbq)))/7::::  F F F G G( F##C111Ivr>JJJJJJrb   c                 ,   |                     |                    d|j                  d          }t          |d          }dD ]O}t          |                    |d|          |          }|                    ||d          }t          ||           Pd S )Ni   r   )rK   rM   r   r   r  r  )r   r   r   r   r  r5   )r[   r\   r]   r  r  aaps         r`   test_hilbert_axis_3dz TestHilbert.test_hilbert_axis_3d2  s    JJryy"*y==yIIQR    	% 	%D"++aT22>>>C++c4,,CB$$$$	% 	%rb   r   r   r   c                     t          ||          }|                    d|          }|                    t          |                    j        |k    sJ d S )Nr   r   )r  r  r   r   r   r  s       r`   test_hilbert_typeszTestHilbert.test_hilbert_types;  sT    E""88AU8++wwwx(())/5888888rb   N)r"  r#  r$  r`  r  r  r  r  r  r  r  r   rb   r`   r  r    s        3 3 3(; (; (;T$K $K $KL% % % [Wy)&<==9 9 >=9 9 9rb   r  c                      e Zd ZdZ edd          d             Zd Z edd	          d
             Zej	        
                    dddg          d             Zd Zd Zej	        
                    dg d           edd	          d                         Zej	        
                    dg d          d             Zej	        
                    dddg          ej	        
                    dddg          ej	        
                    dddg          ej	        
                    dg d            edd!	          d"                                                             Z edd!	          d#             Zd$S )%TestHilbert2z!Test function `signal.hilbert2`. Tlist inputs are numpy-specificrx   c                 0    t          g dg dg           d S )NrO   r   r   r   s     r`   r  zTestHilbert2.test_array_likeF  s#    )))YYY'(((((rb   c                    |                     |                    d          d          }t          j        t          d          5  t          |                    dgg                     ddd           n# 1 swxY w Y   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           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 )z$Raise all exceptions in `hilbert2`. r   rq  z^x must be real.rH  r   Nz^N must be positive.r   r  z#^When given as a tuple, N must holdr  r  )r   r   r  r   r   r   rY   r_  s      r`   r`  zTestHilbert2.test_bad_argsJ  s1   JJryy}}f--]:-?@@@ 	1 	1RZZ*//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1]:-CDDD 	 	Q"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:-RSSS 	% 	%Q)$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:-RSSS 	" 	"Q&!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"sH   %A66A:=A:B::B>B> C>>DD$EE
Er   z,CuPy's hilbert2 does not have axes= argumentrH   c                 j   |                     |                    d          d          }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   rq  z!^axes must be a tuple of length 2rH  r)  r  z"^axes must contain 2 distinct axesr  )r   r   r  r   r   r   r_  s      r`   test_bad_args2zTestHilbert2.test_bad_args2V  s*   JJryy}}f--]:-PQQQ 	( 	(QY''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]:-QRRR 	% 	%QV$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s$   A##A'*A'	B((B,/B,r   r   r   c                     t          ||          }|                    d|          }|                    t          j        |                    }|j        |k    sJ d S )N)rQ   rU   r   )r  r  r   r   r   r   )r[   r   r\   r  r   s        r`   test_hilbert2_typesz TestHilbert2.test_hilbert2_types^  sZ    E""88G5811ggfoh//00yE!!!!!!rb   c                     |                     g d          }t          j        |                    |d                    }t          j        |                    |d                    }t	          ||j                   dS )zNeeded for 100% coverage )r*  r  r  r*  rj  rj  )rN   rP   rP   rN   N)rY   r   r   r   r4   r  )r[   r\   rq   x0ax1as        r`   test_1d_inputzTestHilbert2.test_1d_inpute  sl    JJ11122objjF3344objjF3344SU#####rb   c                     |                     d          }t          |d          }t          |d          }t          ||           dS )z%Compare passing tuple to single int. r  rL   r  rq  N)r  r   r5   )r[   r\   rq   x0_ax1_as        r`   test_parameter_NzTestHilbert2.test_parameter_Nl  sM    HHVQV$$$d#####rb   r  ))rL   rM   )rM   rL   rq  r  z)Bug in cupy implementation, see cupy#9396c                 N   |                     ||j                  }|dxx         dz  cc<   |                    t          j        |                    }t          |          }t          j        |          }t          d|d         dz   dz            t          |d         dz   dz  d          }}t          d|d         dz   dz            t          |d         dz   dz  d          }
}	d}t          |||	f         |||	f         d	z  |
           t          |d|	f         |d|	f         dz  |
           t          ||df         ||df         dz  |
           t          |d         |d         |
           |||
f         }t          ||	                    |          |
           dS )z8Compare desired and calculated values in Fourier space. r   r  r   rP   r   rQ   Nr)  rL   r   )
rp  r   r   r  ifft2r   fft2r  r4   r  )r[   r  r\   x_frq   x_asx_as_ff0_posf0_negf1_posf1_negr   zz_as_fs                r`   test_quadrant_valuesz!TestHilbert2.test_quadrant_valuess  s    gge2=g11E


a


GGFL%%&&{{T"" q58a<A"566uQx!|PQ>QSW8X8Xq58a<A"566uQx!|PQ>QSW8X8Xvv~.FFN0Ca0GdSSSSq&y)3q&y>A+=DIIIIvqy)3vqy>A+=DIIIItc$id;;;;(w!7!7dCCCCCCrb   c                    |d         dz  }|d         dz  }|                     |          }d||dz
  |dz   f<   d||dz   |dz
  f<   t          j        |          }|                    t          j        |                    }|                    t          |                    dk    sJ t          |          }t          ||	                    |          |
                    |j                  j        dz             dS )	zaTest that a real signal with Z[-p,-q] == np.conj(Z[p,q])
        produces a zero analytic signal.r   rQ   rP   r  r*  r   r   N)r  r  	ifftshiftr   r  r!  r-  r   r4   r  r  r   r  )r[   r  r\   c0c1r  rq   r  s           r`   test_zero_analytic_signalz&TestHilbert2.test_zero_analytic_signal  s     1X]1X]hhuoo!BFBFN!BFBFNs##GGFL%%&&vvc!ff~~####{{bmmD118L8L8PQS8STTTTTTrb   sh0rL   rM   sh1rN   r   sh2r   r/  not_axisr)  z,cupy implementation does not have axes kwargc                 `   |                     |                    ||z  |z  |j                  |||f          }g d}|                    |           t	          ||          }|                    ||          }	d |	D             }
|                    |
|          }
t          ||
           dS )z?2d transform on 3d array is equal to 2d transform on 2d slices.r   r)  r  r  c                 ,    g | ]}t          |          S r   r  )r   rU  s     r`   r   z1TestHilbert2.test_3d_vs_slice.<locals>.<listcomp>  s    ...18A;;...rb   N)r   r   r   popr   unstackr  r4   )r[   r  r  r  r  r\   rq   transform_axesx_as_3dpartsx_as_2ds              r`   test_3d_vs_slicezTestHilbert2.test_3d_vs_slice  s     JJryysS
yCCc3PS_UU"8$$$1>222

18
,,.....((7(22)))))rb   c                    |                     |                    d|j                  d          }t          |          }|                    |dd          }t          |d          }|                    |dd          }t          ||           |                    |dd          }t          |d	          }|                    |dd          }t          ||           d
S )z72d transform on equal arrays with moved axis are equal.i;  r   )rM   r   r/  r   rP   )r   rQ   r  rQ   r  N)r   r   r   r   r  r4   )r[   r\   r  x0_asr   x1_asr   x2_ass           r`   test_3d_axis_orderzTestHilbert2.test_3d_axis_order  s     ZZ		)2:	>>	JJ[[Q""&)))E1a((u%%%[[Q""&)))E1a((u%%%%%rb   N)r"  r#  r$  __doc__r%  r  r`  r  r  r  r  r  r  r  r  r  r  r  r   rb   r`   r  r  B  sC       ++d+KLLL) ) ML)
" 
" 
" f%STTT% % UT% [Wy)&<==" " >="$ $ $$ $ $ [W&F&F&FGGf%PQQQD D RQ HGD, [W&F&F&FGGU U HGU [UQF++[UQF++[UQF++[Z33f%STTT	* 	* UT 43 ,+ ,+ ,+
	* f%STTT& & UT& & &rb   r  c                      e Zd ZdZed             Zd Z edd          d             Z edd          e	j
                            dg d	d
g dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfg          d                         Z edd          e	j
                            dg ddg dg dfg d d!g dg d"fg d#d!g d$g d%fg          d&                         Z edd          d'             Z edd          d(             Z edd          e	j
                            d)g d*g d+g          d,                         Zd- Zd.S )/TestEnvelopez4Unit tests for function `._signaltools.envelope()`. c                 p    t          |          |j        k    rdddnddd}	 t          | |fi |d|i d S )Nr)  rg  r   r  )r>   r   r4   )rw  r  rO  r\   a_r_tols        r`   assert_closezTestEnvelope.assert_close  sh     'r**bj88 "5111!%t44 	
 	H@@7@@C@@@@@@rb   c                    t          j        t          d          5  t          t	          j        d          d           ddd           n# 1 swxY w Y   t          j        t          d          5  t          |                    d          d	           ddd           n# 1 swxY w Y   d
D ]}d                    t          t          |                    }t          j        t          d| 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           n# 1 swxY w Y   dD ]Y}t          j        t          d          5  t          |                    d          |           ddd           n# 1 swxY w Y   Zt          j        t          d          5  t          |                    d          d           ddd           dS # 1 swxY w Y   dS )z[For `envelope()` Raise all exceptions that are used to verify function
        parameters. z'Invalid parameter axis=2 for z.shape=.*rH  rK   rQ   r  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rK   r   rP   )r)  )r   ri  )Nri  z, zbp_in=\(z\) isn't a 2-tuple of.*rL   )bp_inz)n_out=10.0 is not a positive integer or.*r%  )rH  ))r   rK   r  )r   rR   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*	undefinedresidual)	r  r   r   r   r  rp  joinri  r  )r[   r\   r	  tss       r`    test_envelope_invalid_parametersz-TestEnvelope.test_envelope_invalid_parameters  s    ]:!KM M M 	) 	)RWQZZa((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) ]:!JL L L 	. 	.RWWV__1----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 6 	2 	2E3sE??++Bz%L%L%L%LN N N 2 2 511112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]:!LN N N 	, 	, RWWQZZs++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 0 	2 	2Ez%NP P P 2 2511112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]:-MNNN 	7 	7RWWQZZ+6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7sk   $AAA2%B##B'*B'9%D**D.	1D.	%FF	F,%GG!	$G!	%H66H:=H:rF   zXXX: immutable arraysrH   c           
      V   t          |          }||j        k    r|j        n|j        }|                    g d|          }|                    g d|          }t          j        |          }|j        d         }|                    t          |ddd                    \  }}	| 
                    t          j        |          |                    g d	|          d
|           | 
                    t          j        |	          |                    g d|          d|           |                    t          |ddd                    \  }
}| 
                    |
dz  |d|           | 
                    ||	d|           |                    t          |dddd|z                      \  }}| 
                    |ddd         |d|           | 
                    |ddd         |	d|           |                    t          |ddd                    \  }}| 
                    ||d|           | 
                    t          j        |          |                    g d|          d|           t          |ddd          }| 
                    ||d|           |                    |d          }|ddxx         dz  cc<   t          j        ||          }| 
                    |                    |          |d|           |                    t          |ddd                    \  }}| 
                    ||                    ||          d |           | 
                    t          j        |          |                    ||          d!|           dS )"zEEnsure that the various parametrizations produce compatible results. )rl  rQ   rQ   rK   r   r   )rl  r   r   rN   r   r   r   r   r   r  allTr  squaredrL   rQ   r   r   r   Envelope calculation errorrO  r\   )rL   r   r   rK   r   Residual calculation errorFrQ   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrK   )r  r  rH  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorlowpassz/`residual='lowpass'` envelope calculation error)rL   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorr  rP   )r
  zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)r>   r   r   r   rY   r  irfftr  r  r   r  rfftifftr   r  r
   )r[   r\   r  r  ZZr_ars   r
  ze2_0zr_0ze_1zr_1ze2_2zr_2ze2_3zr_3ze2_4Z_az_aze2_azr_as                        r`   test_envelope_verify_parametersz,TestEnvelope.test_envelope_verify_parameters  sK     ###rz11r||r}JJ(((J55zz444DzAALOOGAJ jj!VeT!R!R!RSSt&+e,,**___D*AA:r 	 	C 	C 	C 	&+d++**___D*AA:r 	 	C 	C 	C ZZFUE R R RSS
d$'5S 	 	! 	! 	! 	$S 	 	! 	! 	! jjQAaCHHH
 
t 	%!*eHR 	 	Q 	Q 	Q$sss)THR 	 	Q 	Q 	Q jj!ViQU!V!V!VWWt%OTV 	 	X 	X 	X&+d++**___D*AAOTV 	 	X 	X 	X FT4@@@%Jr 	 	S 	S 	S jjj&&ABB1k####"''#,,?B 	 	H 	H 	Hjj#vt!T!T!TUUt%5$!7!7Br 	 	K 	K 	K&*T**BJJt4J,H,HBr 	 	K 	K 	K 	K 	Krb   z@               Z,        bp_in,     Ze2_desired,      Zr_desired)rP   r   rQ   rQ   r   )rP   Nr  rP   r   r   r   r   )rL   r   rQ   r   r   )r   Nr  )rL   r   r   rQ   r   NN)r   r   rQ   rQ   r   r  )rQ   r   r   r   r   )r   r   r   rQ   r   )rL   r   rQ   rQ   r   )rK   )rL   r   rK   rL   r   )NrP   )r   r   rK   rL   r   r  c                    |                     ||j                  }|                     ||j                  }|                     ||j                  }t          j        |          }|                    t          ||dd                    \  }}|                    t          ||dd                    \  }	}
d |||	|
fD             \  }}}}|                     ||j                  }|                     ||j                  }|                     ||d|           |                     ||d	|           |d
         d||d
         d<   |                     ||d|           |                     ||d|           dS )a  Test envelope calculation with real-valued test signals.

        The comparisons are performed in the Fourier space, since it makes evaluating
        the bandpass filter behavior straightforward. Note that also the squared
        envelope can be easily calculated by hand, if one recalls that coefficients of
        a complex-valued Fourier series representing the signal can be directly
        determined by an FFT and that the absolute square of a Fourier series is again
        a Fourier series.
        r   r  Tr  r  c              3   >   K   | ]}t          j        |          V  d S r  r  r  r   z_s     r`   r[  z:TestEnvelope.test_envelope_real_signals.<locals>.<genexpr>:  s*      !U!Ub&+b//!U!U!U!U!U!Urb   z+Envelope calculation error (residual='all')r  z+Residual calculation error (residual='all')rP   Nr   z/Envelope calculation error (residual='lowpass')z/Residual calculation error (residual='lowpass'))rY   r   r  r  r  r   r   r  )r[   r  r	  Ze2_desired
Zr_desiredr\   rs   ze2zrze2_lpzr_lpZe2ZrZe2_lpZr_lps                  r`   test_envelope_real_signalsz'TestEnvelope.test_envelope_real_signals  s   ( JJq
J++jjBJj??ZZ
"*Z==
LOO**XaMMMNNR

8AuyRV#W#W#WXX!U!US"fe<T!U!U!URjjBMjBBZZ
"-Z@@
#{KPR 	 	T 	T 	T"jKPR 	 	T 	T 	T 8$%JuQxyy!&+OTV 	 	X 	X 	X%OTV 	 	X 	X 	X 	X 	Xrb   zG               Z,        bp_in,         Ze2_desired,         Zr_desired)r   rM   r   rM   r   rM   r   rR   r   rM   )rP   rM   r   rM   rQ   r   rQ   rP   r   r   r   rQ   )rP   rQ   rN   r   rN   rK   )r   rN   r   rW   r   rN   )rP   rQ   r   r   r   rK   c                    |                     ||j                  }|                     ||j                  }|                     ||j                  }t          j        t          j        |                    }|                    t          ||dd                    \  }}d ||fD             \  }	}
|                     |	|d|           |                     |
|d|           d	S )
zTest envelope calculation with complex-valued test signals.

        We only need to test for the complex envelope here, since the ``Nones``s in the
        bandpass filter were already tested in the previous test.
        r   r  Tr  c              3   b   K   | ]*}t          j        t          j        |                    V  +d S r  r  fftshiftr
   r2  s     r`   r[  z=TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>]  s4      GGr6?6:b>>22GGGGGGrb   r  r  r  N)	rY   r   r   r  r  r  r  r   r  )r[   r  r	  r4  r5  r\   rs   r6  r7  r:  r;  s              r`   test_envelope_complex_signalsz*TestEnvelope.test_envelope_complex_signalsJ  s    JJq
J++jjBMjBBZZ
"-Z@@
K(++,,**XaMMMNNRGGc2YGGGR#{:r 	 	C 	C 	C"j:r 	 	C 	C 	C 	C 	Crb   c                    t          |          }||j        k    r|j        n|j        }t	          j        |                    g dg dg|                    }|                    g dg dg|          }|                    g dg dg|          }|                    t          |dd	
                    \  }}|                    t          |j	        dd
                    \  }	}
d ||	j	        ||
j	        fD             \  }}}}| 
                    ||d|           | 
                    ||d|           | 
                    ||d|           | 
                    ||d|           dS )z.Test for multi-channel envelope calculations. )r  r   rQ   rQ   r   )r   r   rL   rL   r   r   r  )r   r   r   r   r   r,  )r   r   r   r   r   TrP   )r  r  r   c              3   >   K   | ]}t          j        |          V  d S r  r1  r2  s     r`   r[  zCTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>q  s*      OOFKOOOOOOOOrb   2d envelope calculation errorr  2d residual calculation error"Transposed 2d envelope calc. error"Transposed 2d residual calc. errorN)r>   r   r   r   r  r  rY   r  r   r  r  )r[   r\   r  r  rs   r4  r5  r6  r7  ye2TyrTr:  Ye2r;  Yrs                  r`   #test_envelope_verify_axis_parameterz0TestEnvelope.test_envelope_verify_axis_parameterd  s     ###rz11r||r}L%6%6%6$HPTUUVVjj///3C3C3C!D'+ ! - -ZZ/// B$ZOO
**XaA>>>??RJJxTBBBCC	cOOsDFB6NOOOS"b#{0OTVWWW"j/NSUVVV"F2 	 	
 	
 	
 	
 D 	 	
 	
 	
 	
 	
rb   c                    t          |          }||j        k    r|j        n|j        }|                    g dg dg|          }t          j        t          j        |d                    }|                    g dg dg|          }|                    g dg dg|          }t          d	d
d          }|	                    t          |fddi|          \  }	}
|	                    t          |j        fddi|          \  }}d |	|j        |
|j        fD             \  }}}}|                     ||d|           |                     ||d|           |                     ||d|           |                     ||d|           dS )zBTest for multi-channel envelope calculations with complex values. )r  rM   r   rM   rQ   )rP   rR   r   rR   rQ   r   rP   r  r?  )r  r   r?  r   r  rA  r@  r  T)r	  r  r  r  r   c              3   f   K   | ],}t          j        t          j        |          d           V  -dS )rP   r  NrD  r2  s     r`   r[  zKTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>  sU       @ @ " #OFJrNNCCC @ @ @ @ @ @rb   rI  r  rJ  rK  rL  N)r>   r   r   r   rY   r  r  r  rH  r  r   r  r  )r[   r\   r  r  inprs   Ze2_desZr_deskwr6  r7  rM  rN  r:  rO  r;  rP  s                    r`   +test_envelope_verify_axis_parameter_complexz8TestEnvelope.test_envelope_verify_axis_parameter_complex|  s     ###rz11r||r}jj+++->->->?tjLLK(155566**...0B0B0BDD*QQ___ooo>dKK%>>>**Xa66a626677RJJx::!:r::;;	c@ @'*DFB&>@ @ @S"b 	#w,KPRSSS"f*IbQQQC 	 	
 	
 	
 	"f+OTVWWWWWrb   X)rL   r   r   rP   rQ   )rL   r   r   rQ   rP   rQ   c                     |                     ||j                  }t          j        |          }|                    t          |                    }t          |dd          }|                     ||d|           dS )z0Compare output of `envelope()` and `hilbert()`. r   r-  Nr  z!Hilbert-Envelope comparison errorr  )rY   r   r  r  r-  r   r   r  )r[   rY  r\   rq   e_hile_envs         r`   test_compare_envelope_hilbertz*TestEnvelope.test_compare_envelope_hilbert  sx     JJq
J++LOOwqzz""L4888%,OTVWWWWWrb   c                    t          j        g d          }t          j        |d          }t	          |dd          \  }}t	          |dz   dd          \  }}t          |t          j        d          d           t          ||d           t          |t          j        d|j        	          d           t          ||	                    |j                  d           d
S )al  Test behavior when input is a cosine at the Nyquist frequency.

        Resampling even length signals, requires accounting for unpaired bins at the
        Nyquist frequency (consults the source code of `resample`).

        Since `envelope` excludes the Nyquist frequency from the envelope calculation,
        only the residues need to be investigated.
        )r   r   r   rN   )r  r  )rH  r  r   r)  r   r   N)
r  r  r   r  r   r4   r  r  r   r  )r[   x4x6y6y6_resz6z6_ress          r`   test_nyquistzTestEnvelope.test_nyquist  s     \)))$$_RQ'''bE:::
Fb2gQ???
FBHQKKe4444////BHQbh777eDDDD		"( 3 3%@@@@@@rb   N)r"  r#  r$  r  staticmethodr  r  r%  r+  r  r  r  r>  rF  rQ  rX  r]  re  r   rb   r`   r  r    s       >>A A \A7 7 76 k*ABBB8K 8K CB8Kt k*ABBB[J
//i///	J
//i///	J
//<///	J
/////	J
/////	J
//i///	J
//i///	J	LM MX XM M CBXB k*ABBB[Q
//<,<,<,<	Q
//,<,<,<	Q


)<)<)<>P>P>P	Q	 C C  CBC& k*ABBB
 
 CB
. k*ABBBX X CBX, k*ABBB[S???4F4F4F"GHHX X IH CBXA A A A Arb   r  c                      e Zd Zedd            Z ed          d             Z ed          d             Z ee	          d             Z
 ee	          d             Z ee	          d	             Z ee          d
             Z ee          d             Z ee          d             Z eee          d             Z eee          d             Z eee          d             Z ee          d             Z ee          d             Z ee          d             Z ed           eee          d                         ZdS )TestPartialFractionExpansionr   c                    t          | |          }|                    |          }|                    |          }|                    t          |d d d f         |z
            t          | d d d f         |z
                      }t	          t          |                    \  }}t          ||         ||         |           t          | |         ||         |           d S )Nr  )r?   rY   hypotr-  r   rC   r;   )	r  rU  r_truep_truer  r\   distancerowscolss	            r`   assert_rp_almost_equalz3TestPartialFractionExpansion.assert_rp_almost_equal  s    Q""F##F##88C!!!T'
V 344!!!T'
V 3446 6 ++<X+F+FGG
dAdGVD\7CCCCAdGVD\7CCCCCCrb   Tr  c                 >   t          g dg d          \  }}t          |          dk    sJ 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          |          dk    sJ 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 )NrO   r  rK   r   )rQ   rQ   rK   rP   )rP   rP   rP   rK   rQ   )rP   rP   rP   rQ   rQ   )rP   rP   rP   rQ   rQ   rK   T)include_powersrN   )rP   rP   rQ   rQ   rK   )rP   rQ   rQ   rK   )rP   rP   rP   rQ   rK   rL   rM   )r0   rQ  r;   r  r  )r[   r\   factorsr  s       r`   test_compute_factorsz1TestPartialFractionExpansion.test_compute_factors  s   (III>>7||q    GAJ			(:(:;;;GAJ(=(=>>>GAJ(@(@AAAD"'*<*<*<"="=>>>(III8<> > >7||q    GAJ(@(@AAAGAJ(=(=>>>GAJ			(:(:;;;GAJ(@(@AAAGAJ(=(=>>>GAJ(@(@AAAD"'*<*<*<"="=>>>>>rb   c                 z    t          g ddd          \  }}t          |g d           t          |g d           d S )N)r  gjt?g?5^I?ri  g/$ @rk  r  r_  rc  r  )r1   r4   r[   r\   uniquemultiplicitys       r`   test_group_polesz-TestPartialFractionExpansion.test_group_poles  sQ    +000#u >  >000iii00000rb   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                     |j        dk    sJ t          |                    ddg          |                    g d                    \  }}}t          ||                    ddg                     t          ||                    ddg                     |j        dk    sJ t          |                    ddg          |                    g d                    \  }}}|                     ||g dg d           |j        dk    sJ t          |                    ddg          |                    g d                    \  }}}|                     ||g dg d           |j        dk    sJ 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                     |j        dk    sJ t          |                    g d!          |                    g d"                    \  }}}|                     ||g d#g d$           |j        dk    sJ t          |                    g d%          |                    g d&                    \  }}}|                     ||g d'g d(           |j        dk    sJ t          |                    ddg          |                    g d)                    \  }}}t          ||                    dd*g                     t          ||                    ddg                     |j        dk    sJ 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           |j        dk    sJ d S )5NrM   rK   r  r   r  r   r   rK   )gZd;O?g9#Jg&䃞ͪrL   r  )g-1ڿgeagvq-?g      r  r   rP   rN   r   ir  r   rP   )rP   r   r  rK   r   rQ   )rQ   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rP   rM   r   rL   )r   rP   rK   )r   r  r  )rK   gg)\(?g^I+g rh?)rP   gffffffgQg~jt?)r.  rL   rP   )r  g333333ӿr  )rP   rQ   r.  r        пr.  )rP   r   r  )rP   r   r   r   r   )rP   y              ?y             r   )r                r   rP   )rK   r   rN   rP   rK   rK   rP   rO   r   r   r   )rP   r.  rQ   rM   )rQ   rK   r   r  )r   rQ   rK   r   r  E   r   rV   )rP   r.  rL   r  )rL   y            @y            )rP         ?      rm   )r,   rY   r;   r   rp  r[   r\   r  rU  r  s        r`   test_residue_generalz1TestPartialFractionExpansion.test_residue_general  s    "**]]]33RZZ5N5NOO1aArzz*D*D*DEEqQQQQArzz*D*D*DEEqQQQQArzz7)44a@@@@"**b!W--rzz)))/D/DEE1aArzz1c(33444Arzz2r(33444v{{{{"**aV,,bjj.E.EFF1aArzz1a&11222Arzz2q'22333v{{{{"**aV,,**%<%<%<==? ?1a##q???)))	+ 	+ 	+ v{{{{"**aV,,bjj.F.FGG1a##Aq***$0LL	2 	2 	2v{{{{"**%C%C%CDD**%<%<%<==? ?1aArzz***55666Arzz*:*:*:;;<<<Arzz1a&11222"**aS//2::jjj+A+ABB1aArzz4-88999Arzz1b'22333v{{{{"**ZZZ00"**=M=M=M2N2NOO1a##Aq$8$8$8$4$4$4	6 	6 	6 v{{{{"**YYY//LLL1I1IJJ1a##Aq)))$0LL	2 	2 	2v{{{{"**aW--rzz***/E/EFF1aArzz2q'22333Arzz1a&11222v{{{{"**ZZZ00"**ZZZ2H2HII1aArzz2r(33444Arzz1a&11222Arzz1#///"**]]]33RZZ


5K5KLL1aArzz3)44555Arzz1a&11222Arzz1b'22333"**ZZZ00"**^^^2L2LMM1a##Aq*C*C*C$7$7$7	9 	9 	9v{{{{{{rb   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   rM   rK   r  r   )r   r  r   r   rK   )r   r   rM   rK   r  r   )r   r   r   r  r   r   rK   )r,   rY   r;   r[   r\   r0p0k0r1p1k1r2p2k2r3p3k3s                 r`   test_residue_leading_zerosz7TestPartialFractionExpansion.test_residue_leading_zeros$  s    RZZ66

===8Q8QRR
BRZZ(8(8(8992::mmm;T;TUU
BRZZ66

CSCSCS8T8TUU
BRZZ(;(;(;<<ZZ(>(>(>??A A
BB###B###B###B###B###B###B###B###B#####rb   c                 z   t          |                    ddg          |                    g d                    \  }}}t          ||                    ddg                     t          ||                    ddg                     |j        dk    sJ t          |                    d          |                    d                    \  }}}|j        dk    sJ |j        dk    sJ |j        dk    sJ 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  rP   Denominator `a` is zero.rH  )r,   rY   r;   r   r  r   r   r  s        r`   test_residue_degeneratez4TestPartialFractionExpansion.test_residue_degenerate6  se    "**aV,,bjj.C.CDD1aArzz1a&11222Arzz2r(33444v{{{{"**Q--A771av{{{{v{{{{v{{{{]:-GHHH 	 	AqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D00D47D4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                     |j        dk    sJ t          |                    g d          |                    g d                    \  }}}|                     ||g dg d           |j        dk    sJ 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!           |j        dk    sJ t          |                    ddg          |                    t          j        dd"gdd#g                              \  }}}t          ||                    d$d%g                     t          ||                    d&dg                     |j        dk    sJ 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                     |j        dk    sJ t          |                    d          |                    g d*                    \  }}}t          ||                    ddg                     t          ||                    ddg                     |j        dk    sJ t          |                    d          |                    g d+                    \  }}}t          ||                    ddg                     t          ||                    d#dg                     |j        dk    sJ 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                     |j        dk    sJ t          |                    g d          |                    g d'                    \  }}}t          ||                    d2d3g                     t          ||                    ddg                     t          ||                    d4dg                     t          |                    g d5          |                    g d6                    \  }}}|                     ||g d7g d8d           |j        dk    sJ d S )9N)rP   rN   rN   rQ   )rP   y             r  r  )y             @y      @      @y            ()r   rP   rP   rp   )rP   rQ   rP   )rP   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrL   r  gŏ1w@rP   r   )rP   r  rN   rQ   rK   r   r   r  )rL   r  rK   r  )rP   r  r  rL   )rQ   r  r  r&  g      r.  rw  )rw  rK   r  r   )g
ףp=
?gQ?皙?)r&  UUUUUUտr  r  r  g
gUUUUUU@r~  rP   r  rP   r  r   )rP   r   r  )rP   g      r  )rP   rN   rQ   r  r/  rN   r  r   ir{  rR   r  )rP   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿr  yjM?%uyjM?%u?)ySsA?ySsAr  y-?8gDio?y-?8gDio)r-   rY   rp  r;   r   r  polymulr  s        r`   test_residuez_generalz2TestPartialFractionExpansion.test_residuez_generalF  s   2::lll33::&C&C&CDDF F1a##Aq*G*G*G$.JJ	0 	0 	0Arzz2$//0002::iii00"**___2M2MNN1a##Aq%68I$J%2M$B,- 	$ 	/ 	/ 	/ 	Arzz6(33Q????2::q"g..

:::0F0FGG1aArzz2q'22333Arzz1a&11222v{{{{2::iii00"**\\\2J2JKK1a##Aq***lllCCCv{{{{2::ooo66

;;;8O8OPP1aArzz3+66777Arzz2q'22333Arzz3)445552::rd++RZZ-H-HII1a##Aq$5$5$57H7H7H	J 	J 	Jv{{{{2::q!f--::bj!TQH&E&EFFH H1aArzz5$-88999Arzz5#,77888v{{{{2::jjj112::q"g3F3FGG1aArzz1#///Arzz1#///Arzz1b'223332::a=="**aX*>*>??1aArzz1#///Arzz2$//000v{{{{2::a=="**]]]*C*CDD1aArzz1a&11222Arzz3*55666v{{{{2::a=="**5E5E5E*F*FGG1aArzz2q'22333Arzz4+66777v{{{{2::iii00"**ZZZ2H2HII1aArzz3(33444Arzz1a&11222Arzz1#///2::q!f--rzz***/E/EFF1aArzz2q'22333Arzz1a&11222v{{{{2::lll33RZZ


5K5KLL1aArzz3)44555Arzz1a&11222Arzz2q'223332::iii00"**=P=P=P2Q2QRR1a##Aq%N %N %N%N %N %N,- 	$ 	/ 	/ 	/ v{{{{{{rb   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|  )rM   rK   r  r   r   )r  r   r   rK   r   )rM   rK   r  r   r   r   )r  r   r   rK   r   r   r   )r-   rY   r;   r  s                 r`   test_residuez_trailing_zerosz9TestPartialFractionExpansion.test_residuez_trailing_zeros  s    bjj77 jj779 9
Bbjj)9)9)9:: jj779 9
Bbjj77 jj)9)9)9::< <
Bbjj)<)<)<== jj)?)?)?@@B B
BB###B###B###B###B###B###B###B###B#####rb   c                    t          |                    ddg          |                    g d                    \  }}}t          ||                    ddg                     t          ||                    ddg                     |j        dk    sJ t          |                    d          |                    d                    \  }}}|j        dk    sJ |j        dk    sJ |j        dk    sJ 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  rP   r  rH  z6First coefficient of determinant `a` must be non-zero.r*  )r-   rY   r;   r   r  r   r   r  s        r`   test_residuez_degeneratez5TestPartialFractionExpansion.test_residuez_degenerate  s   2::q!f--rzz)))/D/DEE1aArzz1a&11222Arzz2r(33444v{{{{2::a=="**Q--881av{{{{v{{{{v{{{{]:-GHHH 	3 	3RZZ]]BJJqMM222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]:"01 1 1 	> 	> RZZ]]BJJ|||$<$<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s$   7EEE;9GGGc                    |                     g d          }|                     g d          }|                     g           }|                     g d          }|                     g d          }dD ]x}t          ||||          \  }}	t          ||d           t          |	|d	d
           t          ||||          \  }}	t          ||d           t          |	|d	d
           yd S )N)r'  UUUUUUſg)r   r  r  )r*  rP   rK   )rP   r   rR   r   avgr  r_  r  r-  r  rtypegV瞯<r   F)r  r   rY   r    r4   r!   )
r[   r\   r  rU  r  
b_expected
a_expectedr  r^   r]   s
             r`   *test_inverse_unique_roots_different_rtypeszGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypes  s    JJ00011JJ{{{##JJrNNZZ,,
ZZ..
 I 	J 	JE!Q///DAqAz6666Azu5IIII1a%000DAqAz6666Azu5IIIII	J 	Jrb   c                    |                     g d          }|                     g d          }|                     g           }|                     g d          }|                     g d          }|                     g d          }dD ]v}t          ||||          \  }	}
t          |	|d	           t          |
|d
           t          ||||          \  }	}
t          |	|d	           t          |
|d
           wd S )Ng333333?g98ȿr  gll?r   r  r  r  )r*  r   rP   rK   )r  gUUUUUUgUUUUUU?rK   )rP   r/  r=  r  r   r  r  r   r   Fr  r  )r[   r\   r  rU  r  r  b_expected_zr  r  r^   r]   s              r`   ,test_inverse_repeated_roots_different_rtypeszITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypes  s'   JJ88899JJ''JJrNNZZ//
zz"7"7"788ZZ 1 1 122
H 	> 	>E!Q///DAqAz6666Azu====1a%000DAqA|%8888Azu=====	> 	>rb   c                    |                     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 ofrH  r  r  )rY   r  r   r   r    r!   r  s        r`   test_inverse_bad_rtypez3TestPartialFractionExpansion.test_inverse_bad_rtype  sQ   JJ88899JJ''JJrNN]:-EFFF 	, 	,1a(++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]:-EFFF 	- 	-Aq!8,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$   A??BB%CC
C
c                 D   |                     dg          }|                     dg          }|                     dg          }t          |||          \  }}t          ||                     dg                     t          ||                     ddg                     d S )NrP   rQ   r   r  g       )rY   r!   r4   )r[   r\   r  rU  r  r^   r]   s          r`    test_invresz_one_coefficient_bugz=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  s     JJsOOJJsOOJJsOOq!Q12::qc??+++2::sDk2233333rb   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 )NrP   r   r  rQ         ?      rP   r   rm   y      @      y      !      ?y      @      
@rP   y             y      ?       @y      ?      r&  r  r  rO   )rP                     ?       r  rR   rP               rL   r   rQ   r   r  rL   r  r   r   r   rK   rK   rK   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prP   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rQ   )rP   r   r  ro   r  )r    rY   r;   r[   r\   r^   r]   s       r`   test_invresz(TestPartialFractionExpansion.test_invres  s   bjj!oorzz1#

2GG1Arzz1#///Arzz1b'22333bjj!6!6!677jj!2!2!233RZZ^^E E1Arzz*O*O*OPPQQQArzz*N*N*NOOPPPbjj#q**BJJ7G,H,Hjj++- -1Arzz*L*L*LMMNNNArzz///::;;;bjj!;!;!;<<jj!>!>!>??BQ Q1AJJ (A (A (A B B	C 	C 	C 	AJJ (? (? (? @ @	A 	A 	A bjj"b**BJJ1v,>,>

Aq6@R@RSS1Arzz*<*<*<==>>>Arzz***5566666rb   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 )NrP   r   r  r  r  r  r&  r  r  rO   )g      @r  r  y            rW   r  r  r  )rN   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rQ   )r   rP   r.  rQ   r  )r!   rY   r;   r  s       r`   test_invreszz)TestPartialFractionExpansion.test_invresz  s   rzz1#

A3BHH1Arzz1#///Arzz1b'22333rzz"7"7"788zz"3"3"344bjjnnF F1Arzz*O*O*OPPQQQArzz*N*N*NOOPPPrzz3(++zz66"233zz))),,. .1 	Arzz*M*M*MNNOOOArzz///::;;;rzz"<"<"<==zz"?"?"?@@zz"~~' '1 	AJJ (A (A (A B B	C 	C 	C 	AJJ (? (? (? @ @	A 	A 	A rzz2r(++zz1a&))zz1a&))+ +1 	Arzz...99:::Arzz***5566666rb   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 )NrP   r   r   rQ   )r    r;   r!   r  s       r`   test_inverse_scalar_argumentsz:TestPartialFractionExpansion.test_inverse_scalar_arguments<  s     aA1A1v&&&A2w'''q!Q1A2w'''A2w'''''rb   N)r   )r"  r#  r$  rf  rp  r%  rt  ry  r@   r,   r  r  r  r-   r  r  r  r    r!   r  r  r  r  r  r  r  r   rb   r`   rh  rh    s       
D 
D 
D \
D d###? ? $#?& d###1 1 $#1 wF F  FP w$ $  $" w    x  Q Q ! Qf x  $ $ ! $* x  > > ! >& vw''J J ('J& vw''> > ('>" vw''- - ('- w4 4  4 v7 7 78 w7 7  7@ d###vw''( ( (' $#( ( (rb   rh  c                       e Zd Zd Z edd          d             Zd Zd Zd Zd	 Z	d
 Z
 edd          d             Zd Zd Zd Zd Zd Zd ZdS )TestVectorstrengthc                    |                     dg          }d}d}d}t          ||          \  }}|j        dk    sJ |j        dk    sJ t          j        ||d          sJ t          j        |dt          j        z  |z  d          sJ d S )	Nr&  r  r  r  r   v!>abs_tolrQ   rY   r"   r  r  iscloser,  r[   r\   eventsperiodtarg_strength
targ_phasestrengthphases           r`   test_single_1dperiodz'TestVectorstrength.test_single_1dperiodK  s    RD!!
(88%}!!!!zQ|HmVDDDDDD|E1tw;#;VLLLLLLLLrb   r   zphase modulo 2*pirH   c                 p   |                     dg          }|                     g d          }|                     dgdz            }|                     g d          }t          ||          \  }}|j        dk    sJ |j        dk    sJ t          ||           t	          |d|j        z  |z             d S )Nr&  )rP   rQ   r  r  rK   )r&  r  r  rP   rQ   )rY   r"   r  r:   r;   r,  r  s           r`   test_single_2dperiodz'TestVectorstrength.test_single_2dperiodY  s    RD!!JJJ''

B4!8,,ZZ..
(88%}!!!!zQ!(M:::E1ru9z#9:::::rb   c                    |                     g d          }d}d}d}t          ||          \  }}|j        dk    sJ |j        dk    sJ t          j        ||d          sJ t          j        |dt          j        z  |z  d          sJ d S )Nr  r  r  r  r  r  rQ   r  r  r   r  r  r  r  s           r`   test_equal_1dperiodz&TestVectorstrength.test_equal_1dperiodg  s    :::;;
(88%}!!!!zQ|HmVDDDDDD|E1tw;#;VLLLLLLLLrb   c                 r   |                     g d          }|                     ddg          }|                     dgdz            }|                     ddg          }t          ||          \  }}|j        dk    sJ |j        dk    sJ t          ||           t          |d|j        z  |z             d S )Nr  rP   rQ   r  r  r  rY   r"   r  r;   r,  r  s           r`   test_equal_2dperiodz&TestVectorstrength.test_equal_2dperiodu  s    :::;;QH%%

B4!8,,ZZd,,
(88%}!!!!zQHm444E1ru9z#9:::::rb   c                    |                     g d          }d}d}d}t          ||          \  }}|j        dk    sJ |j        dk    sJ t          j        ||d          sJ t          j        |dt          j        z  |z  d	          sJ d S )
Nr  g?g @gffffff@g333333$@rP   r  r  r   r  r  rQ   r  r  r  s           r`   test_spaced_1dperiodz'TestVectorstrength.test_spaced_1dperiod  s    55566
(88%}!!!!zQ|HmVDDDDDD|E1tw;#;VLLLLLLLLrb   c                    |                     g d          }|                     ddg          }|                     dgdz            }|                     ddg          }t          ||          \  }}|j        dk    sJ |j        dk    sJ t          ||           t	          |          |j        k    rdd	ini }t          |d|j        z  |z  fi | d S )
Nr  rP   r&  r  rQ   r  r  r   g>)rY   r"   r  r;   r>   r   r4   r,  )	r[   r\   r  r  r  r  r  r  rtol_kws	            r`   test_spaced_2dperiodz'TestVectorstrength.test_spaced_2dperiod  s    55566QG$$

B4!8,,ZZR))
(88%}!!!!zQHm444$4R$8$8BJ$F$F64..Bq25y:5AAAAAAArb   c                    |                     g d          }d}d}d}t          ||          \  }}|j        dk    sJ |j        dk    sJ t          j        ||          sJ t          j        |dt          j        z  |z            sJ d S )Nr  r&        ?rP   UUUUUU?r&  r   rQ   r  r  s           r`   test_partial_1dperiodz(TestVectorstrength.test_partial_1dperiod  s    NNN++
(88%}!!!!zQ|Hm44444|E1tw;#;<<<<<<<rb   c                 r   |                     g d          }|                     g d          }|                     dgdz            }|                     g d          }t          ||          \  }}|j        dk    sJ |j        dk    sJ t          ||           t          |d|j        z  |z             d S )Nr  )r  r  r  r  r  rL   )r&  r&  r&  r&  rP   rQ   r  r  s           r`   test_partial_2dperiodz(TestVectorstrength.test_partial_2dperiod  s    NNN++,,,--

G9q=11ZZ 0 0 011
(88%}!!!!zQHm444E1ru9z#9:::::rb   c                     |                     g d          }d}d}t          ||          \  }}|j        dk    sJ |j        dk    sJ t          j        ||d          sJ d S )Nr   r  r&  r  r  r   r  r  )rY   r"   r  r  r  r[   r\   r  r  r  r  r  s          r`   test_opposite_1dperiodz)TestVectorstrength.test_opposite_1dperiod  s|    ---..(88%}!!!!zQ|HmVDDDDDDDDrb   c                    |                     g d          }|                     dgdz            }|                     dgdz            }t          ||          \  }}|j        dk    sJ |j        dk    sJ t          ||           d S )Nr  r  rR   r*  rP   )rY   r"   r  r;   r  s          r`   test_opposite_2dperiodz)TestVectorstrength.test_opposite_2dperiod  s    ---..RD2I&&

B4"9--(88%}!!!!zQHm44444rb   c                 r    |                     ddgg          }d}t          t          t          ||           d S )NrP   rQ   r  rY   r   r   r"   r[   r\   r  r  s       r`   test_2d_events_ValueErrorz,TestVectorstrength.test_2d_events_ValueError  s8    aVH%%j.&&AAAAArb   c                 p    d}|                     dgg          }t          t          t          ||           d S )Nr  rP   r  r  s       r`   test_2d_period_ValueErrorz,TestVectorstrength.test_2d_period_ValueError  s6    aSE""j.&&AAAAArb   c                 F    d}d}t          t          t          ||           d S )Nr  r   r   r   r"   r  s       r`   test_zero_period_ValueErrorz.TestVectorstrength.test_zero_period_ValueError  s&    j.&&AAAAArb   c                 F    d}d}t          t          t          ||           d S )Nr  r   r  r  s       r`   test_negative_period_ValueErrorz2TestVectorstrength.test_negative_period_ValueError  s&    j.&&AAAAArb   N)r"  r#  r$  r  r&  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rb   r`   r  r  H  s?       M M M w':;;;; ; <;;M M M; ; ;M M MB B B= = = w':;;;; ; <;;	E 	E 	E	5 	5 	5B B B
B B B
B B B
B B B B Brb   r  )r  )r   r   r   r   c                      e Zd Z edd          d             Z edd          d             Z edd          d             Zd Z edd          d	             Z edd           ed
d          d                         Z	 edd          d             Z
 edd           edd          d                         Z edd          d             Z ed          d             ZdS )TestSOSFiltrF   zbuffer array is read-onlyrH   c                 V   t          ||          }|                    ddd|          }|                    ddg|          }|                    ddg|          }|                    g d	|          }t          t          j        ||f          \  }}t          ||          }	|                    |	          }	t          t          |	|          |           |                    ddg|          }|                    ddg|          }|                    g d
|          }t          t          j        ||f          \  }}t          ||          }	|                    |	          }	t          t          |	|          |           |                    g d          }|                    g d          }|                    d          }|	                    ||f          }	|
                    |	d          }	t          |	|          }
t          |
|                    g d                     d S )Nr   rM   rN   r   rP   r   r&  r  r  r  )r  rP   r   )r  r   r   r   r  )r  rQ   rQ   rQ   rQ   rQ   rQ   rQ   )r  r  rY   ri  r  r$   r:   r%   rp  concatr   r4   )r[   rS  r\   rq   r^   r]   r  bbr  r  rr   s              r`   
test_rank1zTestSOSFilt.test_rank1  s   R__KK1arK**JJ2wbJ))JJT{"J-- jj---Rj88RZ!Q((BRnnjjoo!'#q//3777 JJ1vRJ((JJ1vRJ((jj,,,Bj77RZ!Q((BRnnjjoo!'#q//3777JJ{{{##JJ{{{##GGAJJiiAjjf%%COO2::&@&@&@AABBBBBrb   c                     t          ||          }d}t          j        |          }|                    d|dz
  ||          }|                    ||          }|                    ddg|          }|                    ddg|          }|                    g dg dg dg dg|          }|                    g d	g d
g dg dg|          }	t          t          j        ||f          \  }
}t          |
|          }|                    |          }t          ||d          }t          ||           t          |
|          }|                    |          }t          ||d          }t          |	|           d S )Nr  r   rP   r   r   r&  r  r  r  r  r  r  r  )r  r  r  r  r   rY   ri  r  r$   r%   r:   )r[   rS  r\   r  r  rq   r^   r]   r  r  r  r  r  rr   s                 r`   
test_rank2zTestSOSFilt.test_rank2  s   R__Ie$$	KK9q=)2K>>JJq%  JJ2wbJ))JJSzJ,,**iiiIIIyyyI!#  % % **iii]]])MM+24  6 6 RZ!Q((BRnnjjooC###!'1---RnnjjooC###!'1-----rb   c                    t          ||          }d}t          j        |          }|                    d|dz
  |          }|                    ||          }|                    ddg|          }|                    ddg|          }t          t          j        ||f          \  }}	t          ||	          }
|                    |
          }
t          |
|          }t          |j        d                   D ]P}t          |j        d                   D ]3}t          |||df         t          |||||df                              4Qd S )Nr  r   rP   r   r   r&  .)r  r  r  r  r   rY   ri  r  r$   r%   r   r  r:   r   )r[   rS  r\   r  r  rq   r^   r]   r  r  r  rr   r   js                 r`   r  zTestSOSFilt.test_rank3/  sH   R__Ie$$	KK9q=)44JJq%  JJ2wbJ))JJSzJ,, RZ!Q((BRnnjjooCOOqwqz"" 	U 	UA171:&& U U)!Aq#I,1a1c	l8S8STTTTU	U 	Urb   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        |	||
f          \  }	}}
|	||
fS )NrQ   r  lowr  )r   r   r  r   r  r_ri  rY   )r[   r\   b1r  b2r  b3r  r^   r]   r  s              r`   _get_ab_soszTestSOSFilt._get_ab_sosC  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
Q3K00	1c!Syrb   zitem assignmentc           
         |                      |          \  }}}t          j                            d                              |          }|                    |          }t          ||          }t          |||d d         |                    d                    \  }}|	                    |t          |||dd          |          d         f          }t          |t          |||                     t          ||d d         |                    d                    \  }	}|	                    |	t          ||dd          |          d         f          }	t          ||	           t          |          }|                    d|          }t          |||          \  }
}t          |
|                    d          d	
           t          ||d	
           d S )Nr  r  rN   r  r   r   r   r   Fr  )r  r  r  r	  r  rY   r  r   r  r  r4   r%   r'   rp  )r[   rS  r\   r]   r^   r  rq   y_truer  r  rr   r  s               r`   test_initial_conditionsz#TestSOSFilt.test_initial_conditionsN  s   $$R((	1cINN2%%b))JJqMMR__ Q1SbS6bhhqkk:::
FGAq!BCC&R$@$@$@$CDEE1a 0 0111C3B3BHHV,<,<===	r		5'#qv""="="=a"@ABB&&& __GGARG  Q2&&&22771::59999BE222222rb   r7  zfancy indexing not supportedc                 R   t          ||          }|                    d|          }|                     |          \  }}}t          |          }|                    |d|j        z             }t          j        t                    5  t          |||           d d d            n# 1 swxY w Y   t          ||          }|                    ||j        d         dd|j        d         f          }t          j        t                    5  t          |||d d d d d d g d	f                    d d d            n# 1 swxY w Y   t          |||          \  }}	t          |d
         |                    d          d           t          |	d d ddd d f         |d           d S )Nr   r   r  r  r  r   rP   r   )r   rP   rP   r  Fr  )r  rp  r  r'   r   r  r  r   r   r%   r<   r4   )
r[   rS  r\   rq   r  r  r  zi_ndrr   r  s
             r`   test_initial_conditions_2z%TestSOSFilt.test_initial_conditions_2h  s     R__GGARG  $$R((	1c__ JJq&17*++]:&& 	# 	#Cr""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# r"""

528A;1bhrl"CDD]:&& 	: 	:CuQQQ111iii%789999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: Q5)))2$????111aAAA:>>>>>>s$   B&&B*-B*%D<<E E c                    t           j                            d                              ddd          }|                    |          }|                    |          }t          j        ddd	          }t          | }|                    |          }|j	        d         }d
}t          |j	                  }d||<   t          |g|z             }|                    |          }	t          ||||	          \  }
}t          ||d d d dd d f         ||	          \  }}t          ||d d dd d d f         ||          \  }}|                    ||f|          }t          ||
dd           t          ||dd           t!          |          }|                    ||d
dd
f          }||d d dd
d d f         z  }t          ||||          d         }t%          | \  }}|                    |          |                    |          }}t'          ||          }|                    |d
t)          |          d
f          }||d d dd
d d f         z  }t+          |||||          d         }t          ||dd           d S )N   r   rM   )rQ   r{  rK   r   rN   r  r  r  rP   rQ   r  r  r  r  r   )r  r  r  r&  r  rY   r   r   r   r  r  r   r  r%   r  r4   r'   r   r   r   r=   r   )r[   rS  r\   rq   r  r  	nsectionsr  shpz0rk  r  rN  r  r  r  rr   r  r^   r]   y_tfs                        r`    test_initial_conditions_3d_axis1z,TestSOSFilt.test_initial_conditions_3d_axis1  s   
 I!!#&&..q!*.EEHHRLLJJqMM mAtE222smjjooIaL	  17mmD	YK#%&&XXc]] adr222B a2A2qqqk<<<Ba122qqqk<<<B IIr2hTI**2E6666BU7777 __ZZY1a011!AAAqsAAAI,C"---a0s|1zz!}}bjjmm11ZZQQ/00!AAAqsAAAI,q!QTb111!44e%888888rb   r   zissues a RuntimeWarningc                    t          ||          }|                    d|          }|                    d          }|                    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)rK   r{  rK   r   )rL   rN   )rL   rK   rK   rQ   zshould be all onesrH  rP   )r  r  r  rK   zInvalid zi shape)r  r  r  r  r   r   r%   )r[   rS  r\   rq   r  r  s         r`   test_bad_zi_shapezTestSOSFilt.test_bad_zi_shape  sn    R__ HHZrH**hhvXXl##]:-ABBB 	+ 	+Cr****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+AAAqD	]:-?@@@ 	+ 	+Cr****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s$   -BBB<CC!$C!c           	         t          ||          }t          j        ddd          }|                    |          }t	          |          }t          ||                    d|          |          \  }}t          ||dd	
           |                    |	                    |d d d df         d          |	                    |d d dd f         d          z            }t          |||
                    |          z  d           d S )NrN   r  r  r  r?  r   r  r  Fr   r  rK   r   r  r  )r  r   r   rY   r'   r%   rp  r4   r  r!  rK  )r[   rS  r\   r  r  rr   r  sss           r`   test_sosfilt_zizTestSOSFilt.test_sosfilt_zi  s    R__mAs5111jjoo__RWWRrW22r:::2BU>>>> WWRVVC2A2JRV00266#aaae*263N3NNOO2Q/e<<<<<<rb   Tr  c                 :   t          ||          }t          j        ddd          }|                    |          }t	          |          }t          ||                    d|          |                                          \  }}t          ||dd	
           d S )NrN   r  r  r  r?  r   r  r  Fr  )	r  r   r   rY   r'   r%   rp  r'  r4   )r[   rS  r\   r  r  r  r  s          r`   test_sosfilt_zi_2zTestSOSFilt.test_sosfilt_zi_2  s     R__mAs5111jjoo__RWWRrW22ryy{{CCC2BU>>>>>>rb   N)r"  r#  r$  r%  r  r  r  r  r  r  r  r  r!  r#  r   rb   r`   r  r    s        k*EFFFC C GFC@ k*EFFF. . GF.6 k*EFFFU U GFU&	 	 	 k*;<<<3 3 =<32 k*;<<<(1OPPP? ? QP =<?, k*;<<<19 19 =<19f g&?@@@k*;<<<+ + =< A@+ k*;<<<= = =<= d###? ? $#? ? ?rb   r  c                       e Zd Z edd          d             Zd Z edd          d	             Z edd          d
             Zd Z	dS )TestDeconvolveTr  rx   c                     g d}ddg}|                     g d          }t          j        ||          \  }}t          ||           d S )Nr*  rP   r   r   rP   rP   r   r   rQ   rP   	r*  rQ   rP   r   rQ   rK   rP   r   r   )rY   r   
deconvolver4   r[   r\   originalimpulse_responserecorded	recovered	remainders          r`   r  zTestDeconvolve.test_array_like  s_     .--q6::;;;<<%0;KLL	9	8,,,,,rb   c                     |                     g d|j                  }|                     ddg          }|                     g d          }t          j        ||          \  }}t	          ||           d S )Nr'  r   rQ   rP   r(  )rY   r   r   r)  r4   r*  s          r`   ra   zTestDeconvolve.test_basic  s|    ::888
:KK::q!f--::;;;<<%0;KLL	9	8,,,,,rb   r   zdifferent error messagerH   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#^Parameter signal must be non-emptyrH  rY   r  r   r   r   r)  r[   r\   r-  r,  quotientr/  s         r`   test_n_dimensional_signalz(TestDeconvolve.test_n_dimensional_signal  s    ::1v1v.//::q!f--]:-RSSS 	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   A44A8;A8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$^Parameter divisor must be non-emptyrH  r2  r3  s         r`   test_n_dimensional_divisorz)TestDeconvolve.test_n_dimensional_divisor  s    ::q!f%%::1v1v&677]:-STTT 	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r6  c                    |                     g d          |                     g d          }}t          j        ||          \  }}t          ||           t	          |                     |                    dk    sJ dS )zCReturn signal as `remainder` when ``len(divisior) > len(signal)``. r)  )r   rP   rQ   rL   rM   r   N)rY   r   r)  r5   r=   )r[   r\   r  divr4  r/  s         r`   test_divisor_greater_signalz*TestDeconvolve.test_divisor_greater_signal  s}    ::iii(("**___*E*ES$/S99)	3'''rzz(++,,111111rb   N)
r"  r#  r$  r%  r  ra   r&  r5  r8  r;  r   rb   r`   r%  r%    s         d+KLLL- - ML-- - - v&?@@@P P A@P v&?@@@P P A@P2 2 2 2 2rb   r%  c                   H   e Zd Zd Z edd          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          |                    g d                    }|                    g d          }t          ||           d S )NrO   r  )r*   rY   r:   )r[   r\   	detrendeddetrended_exacts       r`   ra   zTestDetrend.test_basic
  sJ    BJJyyy1122	**YYY//!)_=====rb   rF   zoverwrite_data not implementedrH   c                     |                     g d          }t          |d          }t          |d          }t          ||           d S )N)rP   333333?r.  g?g333333@F)overwrite_dataT)rY   r*   r:   )r[   r\   rq   
copy_arrayinplaces        r`   	test_copyzTestDetrend.test_copy  sT    JJ...//Qu555
!D111!*g66666rb   r  linearr  r  r)  c                     |                     |                    d          d          }t          |||          }|j        |j        k    sJ d S )N   )rM   rN   r   )r  r  )r   r   r*   r  )r[   r  r  r\   r  r?  s         r`   r  zTestDetrend.test_axis  sR     zz"))E**I66Dt$777	$*,,,,,,rb   c                    g dg dz   }|                     |          }t          |dd          }t          ||                    |          d           |                     |          d d d d f         }t          |ddd	          }t          ||                    |          d           t	          t
                    5  t          |dd           d d d            d S # 1 swxY w Y   d S )
Nr)  )rM   r   r  r  rG  rK   )r  bpr   r   rP   )r  rK  r  )rY   r*   r4   r  r   r   )r[   r\   r  r?  s       r`   test_bpzTestDetrend.test_bp  s<   yy???*zz$DxA666		2==#;#;%HHHH zz$aaa.DxAA>>>		2==#;#;%HHHH :&& 	/ 	/DxA....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   C""C&)C&rK  r   rQ   c                 D   t           j                            d          }|                    d          }|                    |t          |                    }t          |t           j                  r%t          |          s|                    |          }n2t          |          s#t          |          st          j        d           t          ||          }|                    g d          }t          |          |j        k    rdnd}t          |||	           d S )
Ni90  rR   r   z'list bp is currently numpy and jax only)rK  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr  r   r   )r  r  r  r	  rY   r>   r  ndarrayr8   r6   r  r  r*   r   r4   )r[   rK  r\   r  rq   rs  res_scipy_191r   s           r`   test_detrend_array_bpz!TestDetrend.test_detrend_array_bp-  s    i##E**HHRLLJJq 0 4 4J55b"*%% 	GfRjj 	G BBBRLL GF2JJ GEFFFaB

 $O $O $O P P (++rz99ttu]666666rb   N)r"  r#  r$  ra   r%  rF  r  r  r  r  rL  r  r  rP  r   rb   r`   r=  r=    s        > > >
 k*JKKK7 7 LK7 [Vh
%;<<[VYYY//- - 0/ =<-
/ / /  [THBHaV$4$4q!f#=>>7 7 ?>7 7 7rb   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          |          t                               d S )N)rj  r  r'  rB  r%  r{  r  r   rY   r+   r;   r5   rp  rQ  rz  r[   r\   rU  rw  rx  s        r`   test_real_no_repeatz#TestUniqueRoots.test_real_no_repeatF  sk    JJ33344+AFAr2222bggc!ffCg&@&@AAAAArb   c                 z   |                     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)rj  ffffff{Gz皙r&  r  ?r  r_  tolr  )rj  rY  r&  r  r{  r  rQ   rQ   rP   rQ   r-  )rX  rZ  r&  r[  r  )g333333g
ףp=
r&  gffffff?rY   r+   r;   r5   rU  s        r`   test_real_repeatz TestUniqueRoots.test_real_repeatL  sN   JJAAABB+A4uEEEFBJJ/F/F/F$G$GQSTTTTbjj&>&>???+A4uEEEFBJJ/G/G/G$H$HRTUUUUbjj&>&>???+A4uEEEFBJJ/K/K/K$L$L$&	( 	( 	( 	(bjj&>&>?????rb   c                     |                     g d          }t          |          \  }}t          ||d           t          ||                    t          |          t                               d S )N)rj  r         ?      ?r  r  r{  r  r   rT  rU  s        r`   test_complex_no_repeatz&TestUniqueRoots.test_complex_no_repeat\  sk    JJHHHII+AFAr2222bggc!ffCg&@&@AAAAArb   c                 z   |                     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)rj        𿚙?ffffff333333?333333?r*  rb  ??r  r_  r\  )rj  rf  r*  rh  r{  r  r^  r-  )re  rg  r*  rb  r  )y      𿚙?y333333?r*  yffffff??r_  rU  s        r`   test_complex_repeatz#TestUniqueRoots.test_complex_repeatb  s{   JJ ' ' ' ( (  ,A4uEEEFJJ'O'O'OPP$&	( 	( 	( 	( 	bjj&>&>???+A4uEEEJJ>>>  	
 	
 	
 	
 	bjj&>&>???+A4uEEEJJKKKLL	
 	
 	
 	

 	bjj&>&>?????rb   c           
         |                     t          j        t          j        t          j        d          t          j        d                                        }|                     g d          }t          |          \  }}|                    |          }t          |                    |          |d           t          ||                     g d                     d S )NrM   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r   r  )rQ   rQ   rQ   rQ   )	rY   r  r  r   rp  r+   sortr;   r5   )r[   r\   rU  
true_rootsrw  rx  s         r`   test_gh_4915zTestUniqueRoots.test_gh_4915~  s    JJrxBGAJJ

 C CDDEEZZBBB
 

  ,ABGGFOOZCCCCbjj&>&>?????rb   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)r  r   r  r  r   r{  r  rQ   rP   )rP   g_p   ?&.>      ?r  )r]  ro  )r+   rY   r;   r5   rv  s       r`   test_complex_roots_extraz(TestUniqueRoots.test_complex_roots_extra  s    +BJJ7G7G7G,H,HIIFBJJT{$;$;RHHHHbjj!Q&8&8999+JJ///00c 
  
  
 	FBJJ[/A$B$BBOOOObjj!Q&8&899999rb   c                    |                     t          j                            d          dt          j                            d          z  z             }t	          |d          \  }}t          ||                     t          j        |          g          d           t          ||                     dg                     d S )Nr   r   rQ   r{  r  )rY   r  r  r	  r+   r;   r_  r5   rU  s        r`   test_single_unique_rootz'TestUniqueRoots.test_single_unique_root  s    JJry~~c**R")..2E2E-EEFF+Aq11FBJJq		{$;$;RHHHHbjj#&7&788888rb   N)
r"  r#  r$  rV  r`  rc  ri  rm  rp  rr  r   rb   r`   rR  rR  D  s        B B B@ @ @ B B B@ @ @8
@ 
@ 
@	: 	: 	:9 9 9 9 9rb   rR  c                      t          j        t          j        dt          j                  dd          } | j        t          j        k    sJ d S )Nr  r   rN   rL   )r   r  r  r   r   r   )rw  s    r`   test_gh_22684rt    sB    !")D"E"E"Eq!LLF<2<''''''rb   r  )re  r  rL  concurrent.futuresr   r   	itertoolsr   r   r  r   r   numpyr  numpy.exceptionsr	   scipyr
   r  rx  r   scipy.optimizer   r   r   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   scipy.signal.windowsr.   scipy.signal._signaltoolsr/   r0   r1   scipy.signal._upfirdnr2   
scipy._libr3   scipy._lib._array_apir4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r  r%  r&  lazy_xp_modulesrE   r(  r  r*  r3  r@  rC  rE  r  rf  rN  r  r  rt  rv  r  r  ry  r  r  r}  r  r  r  rQ  rU  rW  r[  r]  r_  rf  rh  rj  r  paramr  r  r  r  r  r  r  r  r6  rB  	fail_slowrN  rP  rY  r^  r[  r  r  r  rh  r  r  r)  r%  r=  rR  rt  r   rb   r`   <module>r     sN   



   ? ? ? ? ? ? ? ?              * * * * * *     + + + + + +       % % % % % % 6 6 6 6 6 6 6 6                                                                        & % % % % % T T T T T T T T T T 0 0 0 0 0 0 ! ! ! ! ! !                                    ;/ K1 ( 8o4 o4 o4 o4 o4 o4 o4 o4d :[" [" [" [" [" [" [" ["| ;mL mL mL mL mL mL mL  mL`3 3 3  

C 
C 
C  
 :R$ R$ R$ R$ R$ R$ R$ R$j $'JKKK..{;;..z::<= =90 90 90 90 90 90 90= = LK90x $'JKKK8992="."ABB8[))	 	 *) CB :9 LK	U* U* U* U* U* U* U* U*p 6=!!L L L L L L L "!L  CBB > !v, v, v, v, v, v, v, v,r	 6())1 1 1 1 1 1 1 *)1> 6&''[E [E [E [E [E [E [E ('[E| 7h
 h
 h
 h
 h
 h
 h
 h
V    /       /    $    $5         1       !2    $    &7     7F F F 7K K K
   !  !  ! " " ;'9:::9H H H H H H H  ;:" "HV 9/I /I /I /I /I /I /I /Id #$$!:!:!:;;D%=11S$(4U6;CSBT(U(U(U(4U6;CSBT(U(U(U(W  + +	  21 <; %$+2 #$$2 2 %$2
 9[,$?@@w+ w+ w+ w+ w+ w+ w+ A@ w+v:Q :Q :Q :Q :Q :Q :Q :Qz :6 6 6 6 6 6 6 6@ 8[))z% z% z% z% z% z% z% *)z%z ;))L L L L Ll L L *)L(* * *Z4 4 4 4@ %&&r? ?  '&?6 %&&G G '&G $r@ @   @: 6?##~% ~% ~% ~% ~% ~% ~% $#~%@ 7e9 e9 e9 e9 e9 e9 e9 e9P 8u& u& u& u& u& u& u& u&p 8sA sA sA sA sA sA sA sAlS( S( S( S( S( S( S( S(l >""ZB ZB ZB ZB ZB ZB ZB #"ZBF 4   7PPPQQk? k? k? k? k? k? k? RQ  ! k?\ 6$%%&2 &2 &2 &2 &2 &2 &2 &%&2R 797 97 97 97 97 97 97 97x <  T9 T9 T9 T9 T9 T9 T9 ! T9n( ( ( ( (rb   