
    Џkh`                    r   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m	Z	 d dl
Z
d dl
mZ d dlmZmZ d dlZd dlmZ d d	lmZ d d
lmZ 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS e
j                  j                  ZUe
j                  j                  ZV eUddg       G d d             ZW eUddg       G d d             ZX eUddg       G d d             ZYd ZZd Z[d Z\d Z] eUd d!"       eVd#d$"       G d% d&                    Z^ eUdd'(       G d) d*             Z_ eUddg       G d+ d,             Z` eUddg       G d- d.             Zag d/ZbebeDz  Zb eUd#d0"       G d1 d2             Zc eUd3       G d4 d5             Zd eUddg       G d6 d7             Ze eUddg       G d8 d9             Zf G d: d;ef      Zg G d< d=ef      Zhe
j                  j                  d>       eUd3       G d? d@ef                    Zj G dA dBef      Zk G dC dDef      Zle
j                  j                  d>       eUd3       G dE dFef                    Zme
j                  j                  d>       eUddG(       G dH dIef                    Zne
j                  j                  d>       eUddG(       G dJ dKef                    Zoe
j                  j                  d>       eUd3      dL               Zp eUd3      dM        Zq G dN dO      Zre
j                  j                  dPg dQ       eUddg       eUd d!"       G dR dSer                           Zte
j                  j                  d>       eUddG(      e
j                  j                  dPeg       G dT dUer                           Zu G dV dW      Zv eUddX(      e
j                  j                  dYg dZ      e
j                  j                  d[dd\g      e
j                  j                  d]d^d_d`da e
j                  dbe
j                  j                  gc       e
j                  dde
j                  j                  gc      g      de                             Zy eUd3      df        Zz eUddg      e
j                  j                  dgdhdig       G dj dk                    Z{ eUddg       G dl dm             Z| eUdn       eUddo"       G dp dq                    Z} eUddg       G dr ds             Z~ eUd#dt"       eUddg       G du dve~                    Zdw ZddxZe
j                  j                  d>       eUd3      e
j                  j                  dy      dz                      Ze
j                  j                   eUd3      d{               Z eUd3      e
j                  j                  d>      d|               Z eUd3      e
j                  j                  dy      d}               Z eUd3       G d~ d             Z eUd d"       G d d             Z eUd d"       G d d             Z G d d      Z eUd3       G d d             Z G d d      Ze
j                  j                  d>       eUd3      e
j                  j                  de4e)f      d                      Z eUdn      e
j                  j                  dPg d       G d d                    Z eUdd       eUd d"       G d d                    Z eUddg       G d d             Z eUd3       G d d             Zd Zy)    N)ThreadPoolExecutoras_completed)Decimalproduct)gcd)raises)assert_allclosesuppress_warnings)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_namespaceTcupycpu_only
exceptionsc                   R   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
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ej.                  j0                   ed
      d               Zy )"TestConvolve	jax.numpy2jax returns floats; scipy returns ints; cf gh-6076reasonc                     |j                  g d      }|j                  g d      }t        ||      }t        ||j                  g d             y )N)            rP   rO         rN   )rN   
             rX         asarrayr   r8   selfxpabcs        _/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/signal/tests/test_signaltools.py
test_basiczTestConvolve.test_basic.   s@     JJ)*JJy!QN2::&EFG    c                     |j                  g d      }|j                  g d      }t        ||d      }t        ||j                  g d             y )NrN   rO   rP   rS   rT   rN   rO   samemode)rU   rV   "   r[   r]   s        rc   	test_samezTestConvolve.test_same6   sA     JJy!JJ|$Q'2::l34re   c                     |j                  g d      }|j                  g d      }t        ||d      }t        ||j                  g d             y )Nrg   rR   ri   rj   )rU   rV   rV   r[   r]   s        rc   test_same_eqzTestConvolve.test_same_eq>   sA     JJy!JJy!Q'2::l34re   c                     |j                  g d      }|j                  ddg      }t        ||      }t        ||j                  g d             y )N)      ?      ?       @      ?      @      ?rq   rr   )               @y       @      @y      @       @y      @      @r[   )r^   r_   xyzs        rc   test_complexzTestConvolve.test_complexF   sC    JJ/0JJ'(QN2::&BCDre   zwrong output dtypec                 ~    |j                  d      }|j                  d      }t        ||      }t        |||z         y Ni	  i  r[   r]   s        rc   test_zero_rankzTestConvolve.test_zero_rankL   s7    JJtJJtQN1q5!re   Tzpure pythonnp_onlyrL   c                 8    d}d}t        ||      }|||z  k(  sJ y rz   )r   r]   s        rc   test_zero_rank_python_scalarsz*TestConvolve.test_zero_rank_python_scalarsS   s'    QNAEzzre   c                 2   |j                  |j                  d      d      }|j                  d      }t        d      D ]W  }dgdz  }d||<   t        ||j                  ||      d      }t        ||j                  ||      d      }t	        ||d	       Y y )
N   rN   rN   rN   rN   rS   directmethodr   +=atol)reshapearangeranger   r7   )r^   r_   r`   ra   ib_shaperu   rv   s           rc   test_broadcastablezTestConvolve.test_broadcastableZ   s    JJryy}i0IIaLq 	.Ac!eGGAJBJJq'28DABJJq'25AAAqu-	.re   c                     |j                  dg      }|j                  dg      }t        ||      }t        |||z         y Ng  P  r[   r]   s        rc   test_single_elementz TestConvolve.test_single_elemente   s;    JJvJJvQN1q5!re   rC   c                     |j                  g dg dg      }|j                  g dg dg      }t        ||      }|j                  g dg dg dg      }t        ||       y NrR   rg   rT   rN   rO   rO   rP   rQ   )rT            rZ   )rU      >   :   &   )rZ      r   1   r   r[   r^   r_   r`   ra   rb   ds         rc   test_2d_arrayszTestConvolve.test_2d_arraysl   s]     JJ	9-.JJ	9-.QNJJ*'') * 	1re   torchc           
         |j                  |j                  d      d      }d|j                  |j                  d|j                        d      z  }||j                  |j                  d|j                        d d d   d      z  }|j                  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          y )N   rT   rT   rT                 ?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@fullri   rS   rN   r   valid)r   r   
complex128r\   r8   r   )r^   r_   smallbig	out_arrays        rc   test_input_swappingz TestConvolve.test_input_swappingw   s    

299Q<32::bii"--i@)LLrzz"))Bbmm)<TrTBINNJJ16768
 :;==?
 ;>><>
 :<:8:;<	* 	V4i@eV4i@V4$QqS!A#qs]3	5eV4$QqS!A#qs]3	5W5$QqS!A#qs]3	5eW5$QqS!A#qs]3	5re   c                 H   |j                  g d      }|j                  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       y Nrg   rR   spamrj   eggsr   rk   r   hamr   r   baconri   )r\   assert_raises
ValueErrorr   r^   r_   r`   ra   s       rc   test_invalid_paramsz TestConvolve.test_invalid_params   sv    JJy!JJy!j(Aqv>j(AqveLj(AquXNj(AqvgNj(AqvgNre   dtypes do not matchc                    |j                  g d      }|j                  g d      }|j                  g d      }t        ||d      }t        ||       t        ||d      }t        ||       |j                  g d      }|j                  ddg      }|j                  ddg      }t        ||d      }t        ||       t        ||d      }t        ||       y )	NrS   rT   rN   rQ   rP   rN   	rT   rN   rO   rP   rN   rO   rT   rT   rS   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $r[   r^   r_   r`   ra   expectedouts         rc   test_valid_mode2zTestConvolve.test_valid_mode2   s     JJ)*JJ23::./q!W%X&q!W%X&JJ/0JJ'(::vw/0q!W%X&q!W%X&re   c                     |j                  g d      }|j                  g d      }t        ||d      }|j                  g d      }t        ||       y )N)rS   rT   rN   rN   rS   rT   )rS   rO   rN   rO   rP   rQ   r   rO   rN   rT   rS   rS   rN   ri   )9   =   ?   r   -   $   r[   r   s         rc   test_same_modezTestConvolve.test_same_mode   sG    JJ)*JJ>?Q6"JJ/01re   zdifferent exceptionc                     |j                  |j                  dd      d      }|j                  |j                  dd      d      }t        t        t        g||fi ddi t        t        t        g||fi ddi y 	NrS   r   rT   rN   r   rN   rT   rk   r   )r   r   r   r   r   r   s       rc   test_invalid_shapesz TestConvolve.test_invalid_shapes   ss     JJryyA/JJryyQ'0j(IaVI7HIj(IaVI7HIre   zTODO: convert this testc                 Z   h d}|D cg c]  }|D ]  }dD ]  }|||f	   }}}}t         j                  j                  d      }|j                  ddg|      |j	                  |      d}	|	d   x|	d	<   |	d
<   |	d   d|	d   z  z   |	d<   |D ]  \  }}}|	t        j
                  |      j                     j                  |      }
|	t        j
                  |      j                     j                  |      }dD ci c]  }|t        |
|||       }}|d   j
                  |d   j
                  k(  sJ d|v rd|v rt        |
|      dk(  sJ t        ||fD cg c]  }|dv  c}      rddd}nd||fv rddd}nddd}t        |d   |d   fi |  y c c}}}w c c}w c c}w )N>   boolint8int16int32int64uint8uint16uint32uint64float16float32float64	complex64r   )r   r   ri   *   r   rS   size)r   fr   ra   ur                 ?rb   )r   r   )r   rk   r   r   r   >   r   r   -C6?ư>rtolr   r   MbP?h㈵>:0yE>)nprandomRandomStatechoicerandnr   kindastyper   r   anyr7   )r^   r_   ntypest1t2rk   argsrngarray_typesx1x2keyresultstkwargss                   rc   test_convolve_methodz!TestConvolve.test_convolve_method   s   4 */ F F2 F2+DF#' R F F F F
 ii##B'JJ1vAJ6IIaL*.9#.>>C;s+&s+d;s3C.CCC  	ILBDRXXb\../66r:BRXXb\../66r:B #45 HRCdCC 5G 5 5>''78+<+B+BBBB|")"b1X=== B8DaA11DE"($7r2h&"&5 #'5GENGH,=HH1	IF5 Es   F=F#F(
c                    dD ]  }|j                  d|z  g|j                        }t        ||d      }t        ||d      }|dk  sF|j                  dd|z  z  g      }t        ||       t        ||d	       t        ||d	        y )
N)	rU      2   3   4   5   6   <   r   rT   r   r   r   r   r  Fcheck_dtype)r\   r   r   r8   )r^   r_   r   rw   r   r   vals          rc    test_convolve_method_large_inputz-TestConvolve.test_convolve_method_large_input   s     6 	@A

AqD6
2A1a.Ca84F
 2vjj!ac(,V,Se<?	@re   r}   c                 ,   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       y NrS   rT   r   r   r   rN   )r   r   r   r^   r_   s     rc   test_mismatched_dimsz!TestConvolve.test_mismatched_dims  sp     	j(QC8Dj(As8Dj(QC5Aj(As5Aj(QC1#7j(QC3re   c                     t        j                  g dt              }t        j                  g dt              }t        j                  d      5  t        ||       d d d        y # 1 sw Y   y xY wNr   r   r   dtype=object is not supportedmatch)r   r\   objectpytestdeprecated_callr   r   s       rc   test_dtype_deprecationz#TestConvolve.test_dtype_deprecation  sS     JJ)8JJ2&A##*IJ 	QN	 	 	   A''A0N)d   )__name__
__module____qualname__skip_xp_backendsrd   rm   ro   rx   xfail_xp_backendsr{   r   r   r   r   r   r   r   r   r   r  r  r  r#  markthread_unsafer%   re   rc   rH   rH   +   s    kCEHEH kCE5E5 kCE5E5E {+?@" A" d=9 :	. {+?@" A" k#f  $ gf#5  #5JO k*?@' A', k*?@ A f%:;
J <
J d+DE*I F*IX k*?@@ A@" d#4 $4 [[d# $ re   rH   c            	          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                  j                  deeg      ej                  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                  j2                  ej                  j5                  d       ed d!"      d#                      Zy$)%TestConvolve2drI   r   rK   c                     |j                  g dg dg      }|j                  g dg dg      }|j                  g dg dg dg      }t        ||      }t        ||       y r   r\   r   r8   )r^   r_   r`   ra   r   es         rc   r   zTestConvolve2d.test_2d_arrays)  s\    JJ	9-.JJ	9-.JJ*'') * q!1re   c                     |j                  g dg dg      }|j                  g dg dg      }|j                  g dg      }t        ||d      }t        ||       t        ||d      }t        ||       y )NrT   rN   rO   rP   rQ   r   r   rO   rP   rQ   r   r   	   rU   rR   rg   r   P   b   t      r   r3  r^   r_   r4  r   hgs         rc   test_valid_modezTestConvolve2d.test_valid_mode3  sn    JJ-/EFGJJ	9-.JJ./0q!W%1 q!W%1re   r   c                 
   |j                  g dg dg      }|j                  g dg dg|j                        dz   }|j                  g dg      }t        ||d      }t        ||       t        ||d      }t	        ||       y )	Nr6  r7  rR   rg   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )r\   r   r   r7   r8   r>  s         rc   test_valid_mode_complxz%TestConvolve2d.test_valid_mode_complx@  s{    JJ-/EFGJJ	9-R]]JCbHJJLMNq!W%1 q!W%1re   zjax only allows fillvalue=0c                     |j                  g dg dg      }|j                  g dg dg      }d}t        ||dd|      }|j                  g dg d	g d
g      }t        ||       y )NrR   rg   r   r   rS   r   fill)      r   rl   rX   )rW   (   r   @   r  )rX   .   C   r   0   r3  )r^   r_   r`   ra   fillvalrb   r   s          rc   test_fillvaluezTestConvolve2d.test_fillvalueM  sg    JJ	9-.JJ	9-.q!VVW5JJ,'') * 	1re   c                    d}t         j                  j                         5 }|j                  t        d       t        t        |      5  t        dggddggd       d d d        d d d        d}t        t        |      5  t        dggddggddg       d d d        y # 1 sw Y   CxY w# 1 sw Y   GxY w# 1 sw Y   y xY w)	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesr   rS   rT   r   	fillvaluez,`fillvalue` must be scalar or an array with )r   testingr   filterr   r   r   r   )r^   r_   msgsups       rc   test_fillvalue_errorsz$TestConvolve2d.test_fillvalue_errorsX  s    BZZ))+ 	:sJJ~'?@z5 :QC5Aq6(b9:	:
 =:S1 	:u1vh1a&9	: 	:	: :	: 	:	: 	:s/   (B+	BB+ B7B(	$B++B47C c                 >    t        t        t        dggddggg        y )NrS   rT   rP  r   r   r   r  s     rc   test_fillvalue_emptyz#TestConvolve2d.test_fillvalue_emptyc  s    j*seq!fX "	$re   z!jax only supports boundary='fill'c                     |j                  g dg dg      }|j                  g dg dg      }t        ||dd      }|j                  g dg dg dg      }t        ||       y )	NrR   rg   r   r   r   wrap)r:  r:  J   r:  r:  )D   r]  r   r]  r]  r3  r   s         rc   test_wrap_boundaryz!TestConvolve2d.test_wrap_boundaryh  s`    JJ	9-.JJ	9-.q!VV,JJ,'') * 	1re   c                     |j                  g dg dg      }|j                  g dg dg      }t        ||dd      }|j                  g dg dg d	g      }t        ||       y )
NrR   rg   r   r   r   symm)rl   r   ,   r   B   )r  rL  r   r:  T   )R   r   \   n   r   r3  r   s         rc   test_sym_boundaryz TestConvolve2d.test_sym_boundaryr  s`    JJ	9-.JJ	9-.q!VV,JJ,')+ , 	1re   funczboundary, expectedr`  )g     B@      E@      F@g     F@r[  )     E@rk  rj       C@c                     |j                  g dg      }|j                  d      } |||d|      }t        ||j                  |             y )N)       @            @      @)rS      ri   rk   boundary)r\   onesr8   )r^   ri  ru  r   r_   imagekernelresults           rc   test_same_with_boundaryz&TestConvolve2d.test_same_with_boundary|  sI     

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

8 45re   c           	      $   dd l m} |j                  |j                  dd|j                        d      }|j                  |j                  dd|j                        d      }t        ||dd	
      }t        ||j                  ||d	d             y )Nr   rS   r   r   )rU   rN   e   )rU   rU   ri   r[  rt  )r   r   )rk   origin)scipy.ndimagendimager   r   r   r   r8   r   )r^   r_   ndir`   ra   rb   s         rc   test_boundary_extension_samez+TestConvolve2d.test_boundary_extension_same  sx    
 	$JJryyF"**y=wGJJryyG2::y>Iq!&6:3<<16(<KLre   c           
         dd l m} |j                  |j                  dd|j                        d      }|j                  |j                  dd|j                        d      }t        ||dd	
      }t        j                  ddt              j                  dd      }t        j                  |dd	      }|j                  |      }t        ||j                  |j                  ||d	      d dd df                y )Nr   rS   rU   r   rN   rN   %   )rQ   rQ   r   r[  rt  rN   )r  r  rj   r   )r~  r  r   r   r   r   r   floatpadr\   r8   r   )	r^   r_   r  r`   ra   rb   a_npapad_npapads	            rc   test_boundary_extension_fullz+TestConvolve2d.test_boundary_extension_full  s    
 	$JJryyEy<fEJJryyEy<fEq!&6:yyF%088A>&&/8zz'"2::cll4l&H"crc&RSTre   c                     |j                  |j                  dd      d      }|j                  |j                  dd      d      }t        t        t        g||fi ddi t        t        t        g||fi ddi y r   )r   r   r   r   r   r   s       rc   r   z"TestConvolve2d.test_invalid_shapes  ss     JJryyA/JJryyQ'0j*K1vK&'9JKj*K1vK&'9JKre   rJ   c                     |j                  g dg dg      }|j                  g dg dg      }t        ||d      }|j                  g dg dg      }t        ||       y )NrR   rg   r6  r7  ri   )rV   rW   rl   )r:  r;  r<  r3  )r^   r_   r4  r   r@  r?  s         rc   r   zTestConvolve2d.test_same_mode  s\     JJ	9-.JJ-/EFGq!V$JJ " #1re   c                    |j                  g dg dg      }|j                  g dg dg      }|j                  g dg      }t        ||d      }t        ||       t        ||d      }t        ||       |j                  ddgd	d
gg      }|j                  g dg dg      }|j                  ddgg      }t        ||d      }t        ||       t        ||d      }t        ||       y )NrR   rg   r6  r7  r9  r   rq   r   rs         @        )r         @       @r  )r  y      @      ?y      @      y      ;@      y      G@       @r3  )r^   r_   r4  r   r   r   s         rc   r   zTestConvolve2d.test_valid_mode2  s     JJ	9-.JJ-/EFG::567Aw'X&Aw'X&JJ(66*:;<JJ02JKL::234Aw'X& Aw'X&re   z9only integer tensors of a single element can be convertedc                    t        j                  d      }t        j                  g d      }|j                  |      }|j                  |      }dD ]  }t        |j                  t        j                  |||            t        j                  |||             t        |j                  t        j                  |d d d f   |d d d f   |      d      t        j                  |||              y )NrP   g	@gffffff?rN   r   r   ri   rj   r   axis)r   r   r\   r7   r   r   squeezer   )r^   r_   r  b_npr`   ra   rk   s          rc   test_consistency_convolve_funcsz.TestConvolve2d.test_consistency_convolve_funcs  s    
 yy|zz-(JJtJJt- 	D

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

%%aaj!D!G*4H   140	re   c                     t        t        t        dd       t        t        t        dgdg       t        t        t        dgggdggg       y )NrN   rO   rX  r  s     rc   test_invalid_dimsz TestConvolve2d.test_invalid_dims  s<    j*a3j*qcA37j*ug!w?re   z!Can't create large array for testTstride_tricksr|   c                    dd|j                         j                  z  z  }t        j                  d|z  dz  t	        j                          j                  z  dz         |j                  d|z  |j                         }d|d d d<   t        j                  j                  j                  ||dfd	      }t        j                  |ddgg      }t	        j                  |dkD        }|d
   j                  d
k(  sJ y )Nl          rT     g    .Ar   rS   )iH  r   )shapestridesr   )r   itemsizer6   check_free_memoryr   zeroslibr  
as_stridedr   r   wherer   )r^   r_   r   r`   countfailss         rc   test_large_arrayzTestConvolve2d.test_large_array  s    
 dRXXZ0001$$QUT\BHHJ4G4G%G#%MN HHTAXRXXH.#A#FF  ++AaY	+R!!!q!fX.#Qx}}!!!re   N)r(  r)  r*  r+  r   rA  rC  rN  rV  rY  r^  rh  r#  r-  parametrizer   r   rz  r  r  r   r   r   r  r  slowxfail_on_32bitr  r/  re   rc   r1  r1  &  s    k*?@ A k*?@
 A
 g&;<
 =
 k*GH I	:$
 k*MN O k*MN O k*MN[[Vj+%>?[[1%(@'AB%(@'ABDE6E @ O
6 k*MNM OM k*MNU OU
L kCEE kCE'E'. gJ(@
 [[[[ CDd?;" < E "re   r1  c                   F	   e Zd Z edd      ej
                  j                  dddddgddgg      d	               Z edd      ej
                  j                  dd
d
gddgg      d               Zej
                  j                  dddddgddgg      d        Z	ej
                  j                  dd
d
gddgg      d        Z
ej
                  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
                  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                  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
                  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
                  j                  dddddgddgg      d               Z edd      ej
                  j                  dd
dd
gdgg      d               Z edd      ej
                  j                  dddddgddgg      d               Z edd      ej
                  j                  dd
d
gg      d               Zej
                  j                  dddddgddgg      d        Zej
                  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
                  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
                  j                  dddddgddgg      d'        Zej
                  j                  dd
d
gddgg      d(        Z ed)d*+      ej
                  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
                  j                  d/ e ed
d0             e ed1d2            z   e jB                  jE                  d3      jG                  d4d5d       jI                         z         d6               Z%ej
                  jL                   ed)7      d8               Z'y)9TestFFTConvolver   r   rK   axes Nr   r   c                     |j                  g d      }|j                  g d      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||d       y )NrR   rS   rO   rU   rZ         "@r  r  Tqs*>r   r\   r   
isinstancelisttupler7   r^   r  r_   r`   r   r   s         rc   	test_realzTestFFTConvolve.test_real  sa     JJy!::012:a#C$%T{a.CXF3re   rS   c                 Z   |j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        |t              rt        |      }t        |||      }t        ||d       y )NrR   r  rT   rS   r  r  r   r\   r   tiler  r  r  r   r7   r  s         rc   test_real_axeszTestFFTConvolve.test_real_axes  s     JJy!::01JJrwwq1a&)*::bgghA78dD!;D!QT*XF3re   c                     |j                  g d      }|j                  g d      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||d       y )Nrq          @       @y      @      @rt   y               @y              4@y              8@y              2@r  r  r  r   r  r  s         rc   rx   zTestFFTConvolve.test_complex&  s`    JJ/0::IJ2:a#C$%T{a.CXF3re   c                 Z   |j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        |t              rt        |      }t        |||      }t        ||d       y )Nr  r  rT   rS   r  r  r   r  r  s         rc   test_complex_axesz!TestFFTConvolve.test_complex_axes3  s    JJ/0::IJJJrwwq1a&)*::bgghA78dD!;D!QT*XF3re   c                     |j                  g dg dg      }|j                  g dg dg dg      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||       y )N)      ?rT   rN   r   )r  rO   rU   rZ   r8  r   rG  8   r  r   r   rH  r   r  r   r  r  r  r  s         rc   test_2d_real_samez!TestFFTConvolve.test_2d_real_sameA  sx     JJ!# $::2235 6 2:a#C$%T{a.CX&re   rT   c                 r   |j                  g dg dg      }|j                  g dg dg dg      }|j                  t        j                  |g d            }|j                  t        j                  |g d            }t        |t              rt        |      }t        |||      }t        ||dd	
       y )NrR   r   )rS   rO   rU   rZ   r8  r  r  rT   rS   rS   r  r  Fr   r  r  r  s         rc   test_2d_real_same_axesz&TestFFTConvolve.test_2d_real_same_axesZ  s     JJ	 ::0-.0 1 JJrwwq),-::bggh	:;dD!;D!QT*XFFre   c                     |j                  g dg dg      }|j                  g dg dg dg      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||d	       y )
N      ?       @      @      @y      @      @rr   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         rc   test_2d_complex_samez$TestFFTConvolve.test_2d_complex_samer  s{     JJ0+- .::A(<  2:a#C$%T{a.CXF3re   c                 p   |j                  g dg dg      }|j                  g dg dg dg      }|j                  t        j                  |g d            }|j                  t        j                  |g d            }t        |t              rt        |      }t        |||      }t        ||d	       y )
Nr  r  r  r  r  r  r  r  r   r  r  s         rc   test_2d_complex_same_axesz)TestFFTConvolve.test_2d_complex_same_axes  s     JJ0+- .::A(<  JJrwwq),-::bggh	:;dD!;D!QT*XF3re   c                    |j                  g d      }|j                  g d      }|j                  g d      }|j                  g d      }|dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||       |dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||d	       y )
NrR   	rN   rN   rP   rQ   r   r   r8  r   rS        A@     D@     G@	r        4@      9@r  r  r  rm  g      <@ro  r  ri   r  r  r   r  r^   r  r_   r`   ra   
expected_1
expected_2r   s           rc   test_real_same_modez#TestFFTConvolve.test_real_same_mode  s     JJy!JJ23ZZ0
ZZ KL
2:aF+C$%T{aF6CZ(2:aF+C$%T{aF6CZf5re   c                 ~   |j                  g d      }|j                  g d      }|j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        |t              rt        |      }t        ||d|      }t        ||d	
       t        ||d|      }t        ||d	
       y )NrR   r  r  r  rT   rS   ri   r  r  r   r  r  s           rc   test_real_same_mode_axesz(TestFFTConvolve.test_real_same_mode_axes  s     JJy!JJ23ZZ0
ZZ KL
JJrwwq1a&)*JJrwwq1a&)*ZZ
QF ;<
ZZ
QF ;<
dD!;D!QT2Zf5!QT2Zf5re   c                    |j                  g d      }|j                  g d      }|j                  g d      }|dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||d       |dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||d       y )	NrN   rT   rS   r        8@g      ?@r  rl  g     H@r        (@r  r   r  r  r   r  r^   r  r_   r`   ra   r   r   s          rc   test_valid_mode_realz$TestFFTConvolve.test_valid_mode_real  s     JJy!JJ23::AB2:aG,C$%T{aG$7CXF32:aG,C$%T{aG$7CXF3re   c                    |j                  g d      }|j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        |t              rt        |      }t        ||d|      }t        ||d	       y 
Nr  r  r  rT   rS   r   r  r  r   r  r  s          rc   test_valid_mode_real_axesz)TestFFTConvolve.test_valid_mode_real_axes  s     JJy!JJ23::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78dD!;D!Qd3XF3re   c                    |j                  g d      }|j                  g d      }|j                  g d      }|dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||d       |dk(  rt        ||d      }n*t        |t              rt	        |      }t        ||d|      }t        ||d       y )	N      @      y       @      @r   r  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r  r   r  r  r   r  r  s          rc   test_valid_mode_complexz'TestFFTConvolve.test_valid_mode_complex   s    JJ/0JJ?@::AB2:aG,C$%T{aG$7CXF32:aG,C$%T{aG$7CXF3re   c                 
   |j                  g d      }|j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        |t              rt        |      }t        ||d|      }t        ||d	       t        ||d|      }t        ||d	       y )
Nr  r  r  rT   rS   r   r  r  r   r  r  s          rc   test_valid_mode_complex_axesz,TestFFTConvolve.test_valid_mode_complex_axes  s    JJ/0JJ?@::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78dD!;D!Qd3XF3!Qd3XF3re   rI   z mapped axes must have same shapec                    |j                  g d      }|j                  g d      }|j                  g d      }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }|j                  t        j                  |ddg            }t        ||dd      }t	        ||d	       y r  )r\   r   r  r   r7   r   s         rc   test_valid_mode_ignore_nonaxesz.TestFFTConvolve.test_valid_mode_ignore_nonaxes)  s     JJy!JJ23::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78!Qa0XF3re   rC   zassorted error messagesa,brP   rQ   r   c                     t        t        |j                  |      |j                  |            |j                  g              y N)r8   r   r\   r^   r`   ra   r_   s       rc   
test_emptyzTestFFTConvolve.test_empty8  s1    
 	

1rzz!}5JJrN	
re   zjnp.pad: pad_width with nd=0c                 ~    |j                  d      }|j                  d      }t        ||      }t        |||z         y r   )r\   r   r8   r^   r_   r`   ra   r   s        rc   r{   zTestFFTConvolve.test_zero_rankB  s8    JJtJJt!QQU#re   c                     |j                  dg      }|j                  dg      }t        ||      }t        ||j                  ||z  |j                               y )Nr   r   r   )r\   r   r8   r   r  s        rc   r   z#TestFFTConvolve.test_single_elementI  sP    JJvJJv!Q

1q5		
:	<re   c                 p   t         j                  j                  d       t         j                  j                  d      dt         j                  j                  d      z  z   }t         j                  j                  d      dt         j                  j                  d      z  z   }|j	                  t        j
                  ||d            }|j	                  |      }|j	                  |      }|dk(  rt        ||d      }n*t        |t              rt        |      }t        ||d|      }t        ||d	       y )
N    r   )  r   r  r  绽|=r   )r   r   seedrandr\   r   r   r  r  r  r7   	r^   r  r_   r  r  r   r`   ra   r   s	            rc   test_random_dataz TestFFTConvolve.test_random_dataP  s    
		tyy~~d#b299>>$+?&??yy~~d#b299>>$+?&??::bkk$f=>JJtJJt2:aF+C$%T{aF6CXE2re   c                    t         j                  j                  d       t         j                  j                  d      dt         j                  j                  d      z  z   }t         j                  j                  d      dt         j                  j                  d      z  z   }t        j                  ||d      }t        j
                  |ddg      }t        j
                  |ddg      }|j                  t        j
                  |ddg            }|j                  |      }|j                  |      }t        |t              rt        |      }t        ||d|      }t        ||d	
       y )Nr  r  r   r	  r   rT   rS   r  r
  r  )r   r   r  r  r   r  r\   r  r  r  r   r7   r  s	            rc   test_random_data_axesz%TestFFTConvolve.test_random_data_axesa  s   
		tyy~~d#b299>>$+?&??yy~~d#b299>>$+?&??;;tT62wwtaV$wwtaV$::bgghA78JJtJJtdD!;D!QT2XE2re   TzTODO: swapaxesr|   rO   c                    d\  }}t         j                  j                  d       |j                  t        j                  j                  | dt        j                  j                  | z  z         }|j                  t        j                  j                  | dt        j                  j                  | z  z         }t        ||d      }|d d d d d d d f   }|d d d d d d d f   }|d d d d d d d f   }|j                  |j                  dd      dd      }|j                  |j                  dd      dd      }|j                  |j                  dd      dd      }|j                  t        j                  |g d	            }|j                  t        j                  |g d
            }|j                  t        j                  |g d            }t        ||d|      }t        ||dd       y )N)){   rV   )      r  r   r   r   rT   rS   rO   )rT   rS   rN   rS   rS   )rT   rS   rS   rO   rS   )rT   rS   rN   rO   rS   r  r
  r   )r   r   r  r\   r  r   moveaxisswapaxesr  r   r7   )	r^   r  r_   a_shaper   r`   ra   r   r   s	            rc   test_random_data_multidim_axesz.TestFFTConvolve.test_random_data_multidim_axest  s    0
		tJJryy~~w/"ryy~~w7O2OOPJJryy~~w/"ryy~~w7O2OOPaF+aD$$%aD$$%Aq$d23KK

1a(!Q/KK

1a(!Q/;;x00A61= JJrwwq/23JJrwwq/23::bggh@A!QT2XE>re   r   r'  r  i  r  r  '  c                    t         j                  j                  |      dt         j                  j                  |      z  z   }t         j                  j                  |      dt         j                  j                  |      z  z   }|j                  t        j                  ||d            }|j                  |      }|j                  |      }t        ||d      }t        ||d       t        ||ddg      }t        ||d       y )Nr   r   r
  r   r   r  )r   r   r  r\   r   r   r7   )	r^   r   r_   r  r  r   r`   ra   r   s	            rc   test_many_sizeszTestFFTConvolve.test_many_sizes  s     yy~~a 2		q(9#99yy~~a 2		q(9#99::bkk$f=>JJtJJt!Q'XE2!QaS1XE2re   r  c                    d}t         j                  j                  d      }|j                  |j	                  |            }t         j
                  t         j                  fD ]k  }||d<   |j                  t        j                  dd            }d}t        j                  t        |      5  t        j                  ||dd	
       d d d        m y # 1 sw Y   xxY w)Nr  l   [<zn( r'     皙?z4Use of fft convolution.*|invalid value encountered.*r   ri   r   r   )r   r   default_rngr\   standard_normalnaninfr   firwinr#  warnsRuntimeWarningr   )r^   r_   r   r  sig_nanr  coeffsrT  s           rc   test_fft_nanzTestFFTConvolve.test_fft_nan  s     ii##K0**S0034FFBFF# 	LCGCLZZc3 78FHCnC8 LfUKL L	L
L Ls   ,CC	)(r(  r)  r*  r+  r#  r-  r  r  r  rx   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   randinttolistr  r.  r*  r/  re   rc   r  r    s<    g&;<[[Vb$A3RD%AB4 C =4 g&;<[[Va!b2$%784 9 =4 [[Vb$A3RD%AB
4 C
4 [[Va!b2$%784 94 [[Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	1'	1' [[Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1G1G  [[Vb&*'(!f'(!f'("g')1g')1g'("g')2h')2h	&0 	14	14$ [[Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1414$ g&;<[[Vb$A3RD%AB6 C =6, g&;<[[VaaS2$%786 9 =6( g&;<[[Vb$A3RD%AB4 C =4, g&;<[[Va!X.4 / =4  [[Vb$A3RD%AB4 C4* [[Va!b2$%784 94$ k*LMg&;<4 = N4 v&;<{+DE[[Ub"XA|b1#Y$GH
 I F =
 k*HI$ J$< [[Vb$A3RD%AB3 C3  [[Va!b2$%783 93$ t,<=[[Vq!f'(!f'("g')1g')1g'("g')2h')2h&0 1?1 >?. [[[[U1c]U4	 
		d#++D%;BBD	EF
3F 3 [[d#L $ Lre   r  c                      t        d      )NzFell back to fftconvolve)RuntimeError)r  r
  s     rc   fftconvolve_errr/    s    
1
22re   c                 t    t        | d      D cg c]  \  }}t        ||z
        dkD  r||f c}}S c c}}w )NrT   repeatrN   )r   abssizesr`   ra   s      rc   gen_oa_shapesr6    s?    &uQ7 tq!1q5zA~ F   s   4c                 8   t        |       }t        |       }t        ||      D cg c]
  \  }}||z    }}}g d}t        ||      D cg c]<  \  }}|dk7  s,|d   |d   kD  r|d   |d   kD  s|d   |d   k  r|d   |d   k  r||fz   > c}}S c c}}w c c}}w )Nr  r   r   rS   rT   rN   )r6  zipr   )	r5  shapes0shapes1ishapes0ishapes1shapesmodesishapesimodes	            rc   gen_oa_shapes_2drA    s    E"GE"G'7#%$6Hhhx %F % &E3:653I C%QZ'!*$gaj)@QZ'!*$gaj)@ UH C C	%Cs   BABc                 \    t        | d      D cg c]  \  }}||k\  r||f c}}S c c}}w )NrT   r1  r   r4  s      rc   gen_oa_shapes_eqrC    s7    &uQ7 tq!Av F   s   (rI   zfails all aroundrK   
dask.arrayzwrong answerc                      e Zd Zej                  j                         ej                  j                  d e e e	ddd             e e	ddd            z               d               Z
ej                  j                  d eg d            ej                  j                  dd	d
g      ej                  j                  dg d      d                      Zej                  j                  dddg      ej                  j                  d eg d            ej                  j                  dddg      ej                  j                  dddg      ej                  j                  dd	d
g      ej                  j                  dg d      d                                           Zej                  j                  d eg d            ej                  j                  dd	d
g      d               Zej                  j                  dddgddgddgg      ej                  j                  d eg d            ej                  j                  dddg      ej                  j                  dddg      ej                  j                  dd	d
g      d                                    Z edd      ej                  j                  dg g fddgg fg dgfg      d                Zd! Zd" Zy#)$TestOAConvolvezshape_a_0, shape_b_0rS   r'  r  rY   c                    t         j                  j                  |      }t         j                  j                  |      }|j                  |      }|j                  |      }t	        ||      }t        ||      }t        ||       y r   )r   r   r  r\   r   r   r=   )r^   	shape_a_0	shape_b_0r_   r`   ra   r   r   s           rc   test_real_manylensz!TestOAConvolve.test_real_manylens  sd     IINN9%IINN9%JJqMJJqMq!$A!#x0re   )r  /   rQ   rO   rS   
is_complexTFrk   r  c                    t         j                  j                  |      }t         j                  j                  |      }|rJ|dt         j                  j                  |      z  z   }|dt         j                  j                  |      z  z   }|j                  |      }|j                  |      }t	        |||      }	|j                  t        j                  dt               t        |||      }
t        |
|	       y Nr   rj   r   r   r   r  r\   r   setattrr   _signaltoolsr/  r   r=   )r^   rH  rI  rL  rk   monkeypatchr_   r`   ra   r   r   s              rc   test_1d_noaxeszTestOAConvolve.test_1d_noaxes  s     IINN9%IINN9%Bryy~~i000ABryy~~i000AJJqMJJqMq!$/F//+	-AD)!#x0re   r  r   )r  rK  rQ   rO   shape_a_extrarN   shape_b_extrac
                    |gdz  }
|gdz  }||
|<   |||<   t        j                  j                  |
 }t        j                  j                  | }|rD|dt        j                  j                  |
 z  z   }|dt        j                  j                  | z  z   }|	j                  |      }|	j                  |      }t	        ||||      }|j                  t        j                  dt               t        ||||      }t        ||       y )NrT   r   rk   r  r   rO  )r^   r  rH  rI  rT  rU  rL  rk   rR  r_   ax_aax_br`   ra   r   r   s                   rc   test_1d_axeszTestOAConvolve.test_1d_axes  s     q q T
T
IINND!IINND!Bryy~~t,,,ABryy~~t,,,AJJqMJJqMq!$T:F//+	-ADt4!#x0re   z0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec	                    t         j                  j                  ||      }	t         j                  j                  ||      }
|rL|	dt         j                  j                  ||      z  z   }	|
dt         j                  j                  ||      z  z   }
|j                  |	      }	|j                  |
      }
t	        |	|
|      }|j                  t        j                  dt               t        |	|
|      }t        ||       y rN  rO  )r^   rH  rI  	shape_a_1	shape_b_1rk   rL  rR  r_   r`   ra   r   r   s                rc   test_2d_noaxeszTestOAConvolve.test_2d_noaxes  s     IINN9i0IINN9i0Bryy~~i;;;ABryy~~i;;;AJJqMJJqMq!$/F//+	-AD)!#x0re   rT   c                 P   |gdz  }|gdz  }|||d   <   |||d   <   |||d   <   |||d   <   t        j                  j                  | }t        j                  j                  | }|	rD|dt        j                  j                  | z  z   }|dt        j                  j                  | z  z   }|j                  |      }|j                  |      }t	        |      }t        ||||      }|
j                  t        j                  dt               t        ||||      }t        ||       y )NrN   r   rS   r   rW  r   )r   r   r  r\   r  r   rP  r   rQ  r/  r   r=   )r^   r  rH  rI  r\  r]  rk   rT  rU  rL  rR  r_   rX  rY  r`   ra   r   r   s                     rc   test_2d_axeszTestOAConvolve.test_2d_axes4  s    q q !T!W!T!W!T!W!T!WIINND!IINND!Bryy~~t,,,ABryy~~t,,,AJJqMJJqMT{q!$T:F//+	-ADt4!#x0re   r   z*ValueError: Target length must be positiverK   r  rP   rQ   r   c                     t        t        |j                  |      |j                  |            |j                  g       d       y )NFr  )r8   r   r\   r  s       rc   r  zTestOAConvolve.test_emptyX  s3     	rzz!}bjjm4JJrN	
re   c                 ~    |j                  d      }|j                  d      }t        ||      }t        |||z         y r   r\   r   r8   r  s        rc   r{   zTestOAConvolve.test_zero_ranka  s8    JJtJJtAQU#re   c                     |j                  dg      }|j                  dg      }t        ||      }t        |||z         y r   rc  r  s        rc   r   z"TestOAConvolve.test_single_elementg  s<    JJvJJvAQU#re   N)r(  r)  r*  r#  r-  r  r  rC  r  r   rJ  r6  rS  rZ  rA  r^  r`  r,  r  r{   r   r/  re   rc   rF  rF    s    [[[[3-d5C3C.D.25dB3G.H/I J	1	 
	1 [[3*+<=?[[\D%=9[[V%>?1 @ :?1& [[VaV,[[3*>:<[[_q!f5[[_q!f5[[\D%=9[[V%>?1 @ : 6 6< -12 [[ :-n=? [[\D%=91 :?1( [[Vq!fq!fq!f%=>[[ :-n=? [[_q!f5[[_q!f5[[\D%=91 : 6 6? ?1: w'ST[[Ub"XA|b1#Y$GH
 I U
$$re   rF  z!assertions may differ on backendsr|   c                   2   e Zd Zej                  j                  deeg      d        Zej                  j                  deeg      d        Z	ej                  j                  ddgdfddgfdgdggfg      ej                  j                  deeg      d               Z
ej                  j                  deeg      d	        Zej                  j                  d
      ej                  j                  dej                  ej                  g      d               Zy)TestAllFreqConvolvesconvapproachc                     t        j                  dd      j                  d      }t        j                  dd      j                  d      }t        t        d      5   |||d	
       d d d        y # 1 sw Y   y xY w)NrS   r   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr   r   rj   )r   r   r   r   r   r^   rg  r_   r`   ra   s        rc   r   z(TestAllFreqConvolves.test_invalid_shapesq  sm     IIaO##F+IIb!$$V,:"FG 	- AG,	- 	- 	-s   A11A:c                     t        j                  g d      }t        j                  g d      }t        t        d      5   |||ddg       d d d        y # 1 sw Y   y xY w)N)rP   rQ   rT   rS   )rP   rQ   rN   rS   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r   r   rS   r  )r   r  r   r   ri  s        rc   test_invalid_shapes_axesz-TestAllFreqConvolves.test_invalid_shapes_axes{  sV     HH\"HH\":"67 	, AQF+		, 	, 	,s    AA r  rS   rT   rN   c                 b    t        t        d      5   |||       d d d        y # 1 sw Y   y xY w)Nz/in1 and in2 should have the same dimensionalityr   r   r   )r^   r`   ra   rg  r_   s        rc   r  z)TestAllFreqConvolves.test_mismatched_dims  s4     :"-. 	 A	 	 	s   
%.c                    t        t        d      5   |dgdgd       d d d        t        t        d      5   |dgdgg        d d d        t        t        d	      5   |dgdgddgd
dgg       d d d        t        t        d	      5   |dgdgg d       d d d        t        t        d      5   |dgdgdg       d d d        t        t        d      5   |dgdgdg       d d d        t        t        d      5   |dgdgddg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)Nz4acceptable mode flags are 'valid', 'same', or 'full'r   rS   rT   chipsrj   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrN   rO   )r  ro  rq  rr  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   rm  )r^   rg  r_   s      rc   test_invalid_flagsz'TestAllFreqConvolves.test_invalid_flags  s    :"01 	1 !qc0	1
 :!FH 	,!qc+	, : .2 3 	:!qc!Q!Q(89	: : .2 3 	:!qc(89	: :!GI 	-!qc,	- :!GI 	.!qc-	. :!:< 	0!qcA/	0 	03	1 	1
	, 	,	: 	:	: 	:	- 	-	. 	.	0 	0sR   DD, D8E6EEE(D),D58EEEE%(E1ignore::DeprecationWarningr   c                 n   t         j                  j                  d      j                  |      }t         j                  j                  d      j                  |      }t        j                   |             r
|dz  }|dz  }t	        ||      }t        |t        ||d             |j                  |k(  sJ y )N)r   r   rO   rO   y        ?r   r   )r   r   r   iscomplexobjr   r7   r   r   )r^   r   r_   ru   rv   ress         rc   test_longdtype_inputz)TestAllFreqConvolves.test_longdtype_input  s     IIX&--e4IIV$++E2??57#HAHA!QXa8<=yyE!!!re   N)r(  r)  r*  r#  r-  r  r   r   r   rk  r  rp  filterwarningsr   
longdoubleclongdoublerv  r/  re   rc   rf  rf  n  s@    [[^):68-8- [[^):68,8, [[U !sAh 1#h !saSEl,- [[^):688	- [[^):68080< [[ <=[[Wr}}bnn&EF	" G >	"re   rf  c                   T   e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZd Zej                  j                  dg d      d        Z
 edd      ej                  j                  dej                  ej                  ej                  ej                   ej"                  ddg      d                Z edd!      d"        Z edd#      d$        Z ed%d&'      ej                  j                  dg d(      d)               Zy*)+TestMedFilt)
r  r  r  r  r  re     r   r   rJ  )
r  r  r  r  r  r   H   M   r]  rb  )
r  r  r  r  r  rJ  rK     rI  r~  )
r  r  r  r  r  r         _   #   )
r  r  r  r  r  rJ  rl   r8  rs  rb  )
r   a   rW   r]  r   r~  r   r   G   r   )
rI  r  ra  r  r]  rX   r  r]  rF  rc  )
rN   !   r  rK  rS   r   r\  7   rZ   S   )
r   r  rJ  r   r  rK  rF  +   r   rG  )
rX   r   X   r   '   rO   re  rI  r   r   )
r   r  r  r  r   r  r  r|  r   r   )
r   r  r  r  r  r   r  rs  r  r   )
r  r  r  r  r  rK  rl   rl   rJ  r  )
r  r  r  r  r  r  r   rK  rI  r   )
r  r  r  r  r  r  rJ  r  rI  r  )
r  r  r  r  r  rK  rJ  r  r  rG  )
rX   r  r  r  r  rK  rJ  r   r  rG  )
r   rJ  r  r  rK  rJ  rJ  r  r   rs  )
r   rX   r  r  rX   rX   r  r  r  r   )
r   r   r  r   rO   rO   r  r  rF  r   r   rN   c                 h   |j                  | j                        }|j                  | j                        }|j                  | j                        }t	        j
                  ||      }t	        j                  |j                  ||j                        |      }t        ||       t        ||d       y )Nr   Fr  )	r\   INOUTKERNEL_SIZEr   medfilt	medfilt2dr   r8   )r^   r_   in_out_kernel_sizer   r4  s          rc   rd   zTestMedFilt.test_basic  s    jj!zz$((#jj!1!12NN3,RZZ2::Z>L4 1%0re   r   
r   r   r   r   r   r   r   r   r   r   c                 .   t        |      r|dv rt        j                  d       t        ||      }|j	                  | j
                  |      }t        j                  |      j                  |k(  sJ t        j                  |      j                  |k(  sJ y )Nr   r   r   z%torch does not support unisigned intsr   )
r:   r#  skipgetattrr\   r  r   r  r   r  r^   r   r_   in_typeds       rc   
test_typeszTestMedFilt.test_types  s~    
 B<E%CCKK?@E"::dggU:3~~h'--666)//5888re   Tzassertions may differr|   float96float128c                    |dv rHt        j                  t         j                        j                  |k7  rt	        j
                  d|        t        j                  | j                  |      }t	        j                  t        d      5  t        j                  |       d d d        t	        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)N)r  r  zPlatform does not support r   znot supportedr   )r   finforx  r   r#  r  arrayr  r	   r   r   r  r  r  s       rc   test_invalid_dtypeszTestMedFilt.test_invalid_dtypes  s     ,,HHR]]+11U:KK4UG<=88DGG51]]:_= 	%NN8$	% ]]:_= 	'X&	' 	'	% 	%	' 	's   	C!C-!C*-C6object arraysc                     t        t        t        f      5  t        j                  d        d d d        y # 1 sw Y   y xY wr   )r   r   	TypeErrorr   r  r  s     rc   	test_nonezTestMedFilt.test_none  s2     J	23 	!NN4 	! 	! 	!s   5>z#strides are only writeable in NumPyc                     |j                  d|j                        }|dd }t        j                  j                  j                  |d      }t        t        j                  |d      |j                  dg             y )	NrU   r   rP   rQ   )r   )r  rS         @)
r   r   r   r  r  r  r7   r   r  r\   )r^   r_   dummyr`   s       rc   test_odd_strideszTestMedFilt.test_odd_strides  sd    
 		"BJJ	/!AJFF  ++Au+=q!,rzz2$/?@re   rI   z6chunk assignment does not work on jax immutable arraysrK   )r   r   r   c                     t        ||      }|j                   j                  |      |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}|j                  |      }t        d      5 }h d}|D ch c]  }|j                  ||       }	}t        |	      D ]  }
|
j                         \  }}}||||f<    	 d d d        t        ||       y c c}w # 1 sw Y   xY w)	Nr   r   rT   rS   c                    | \  }}|dk(  r)t        dz         }t        d       }t        d      }n't        z
  d       }t        d       }t        d       }|dk(  r)t        dz         }t        d       }t        d      }n't        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              rc   applyz2TestMedFilt.test_medfilt2d_parallel.<locals>.apply*  s     DAqAvArDy)QQ|BIt,T4(RAvArDy)QQ|BIt,T4(R "#s(+J"":t/?/?@CtTz?D$..re   rO   )max_workers>   rS   r   r   r   r   rS   rS   rS   )r  r\   r  r  r  r  
zeros_liker   submitr   ry  r8   )r^   r   r_   r   r  outputpoolchunksr  futuresfuturedataMsliceNslicer  r  r  r  r  s   `             @@@@@rc   test_medfilt2d_parallelz#TestMedFilt.test_medfilt2d_parallel  sU    E"::dggU:3::dhhe:4 ~~///
 ^^A!#^^A!#"a'!+"a'!+	/ 	/8 x(A. 	.$5F>DEUt{{5%0EGE 'w/ .'-}}$ff)-vv~&.	. 	) F	. 	.s   	E&E?-EEEN)r(  r)  r*  r  r  r  rd   r#  r-  r  r  r+  r   bool_r   r   ry  r   r  r  r  r  r/  re   rc   r{  r{    s_    3
1
2
2
1
2
2
0
1
0	
2B 213333321-	/C Q%K	1 [[W '= >9>9 d+BC[[Wrxxr}}')~~rzz'0*'> ?'? D' d?;! <!
 d+PQA RA G [[W&EF6* G	
6*re   r{  c                   ,    e Zd Z edd      d        Zy)
TestWienerrC   zXXX: can_cast in cupy <= 13.2rK   c                    |j                  g dg dg dg dg|j                        }|j                  g dg dg dg d	g      }t        t        j                  |      |d
       t        t        j                  |d      |d
       y )N)rP   rQ   rO   rN   )rN   rP   rQ   rT   )rT   rN   rP   rQ   )rS   rQ   r8  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@_)@rQ   decimalrN   )mysize)r\   r   r=   r   wiener)r^   r_   r@  r?  s       rc   rd   zTestWiener.test_basicV  s    JJ$$$& .0ZZ  9 JJNQQRT U 	"&--"2AqA!&--!"<aKre   N)r(  r)  r*  r+  rd   r/  re   rc   r  r  S  s!     f%DE
L F
Lre   r  )meanmedianminimummaximumlinezXXX something in daskc                      e Zd Z edd       edd      d               Zej                  j                  dd	      ej                  j                  d
d      ej                  j                  dd       edd      d                             Z edd      d        Z	 edd      ej                  j                  dd      ej                  j                  dd      ej                  j                  dd      d                             Z
 edd      ej                  j                  de      d               Z edd      ej                  j                  de      d               Z edd      ej                  j                  de      ej                  j                  dddg      d                      Z edd       edd      ej                  j                  ddg e edgd dge            z         d!                      Zej                  j                  d"d#      ej                  j                  d$d%      d&               Zej                  j                  d"d'      ej                  j                  d$d%      d(               Zej                  j                  d)d*      ej                  j                  d+d*      d,               Z edd       edd-gd./      ej                  j                  d0g d1      d2                      Z edd-gd3/      d4        Z edd      ej                  j                  dd5dg      d6               Zy7)8TestResamplerI   zimmutable arraysrK   Tz!resample_poly/upfirdn is CPU onlyrE   rL   c           
      j   |j                  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
t        j                  d             |j                  |j                  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        ||       y )N   r      )kaiser       @   windowINVALIDdomainyorS   r   g?rT   r  padtyper  rU   )r  cval)rT   rS   r   r  r  )r  constant)r   r   r   
get_windowr   r   resampleresample_polyr   eyer  r  r8   )	r^   r_   signumwinsig2x_refx0r  s	            rc   rd   zTestResample.test_basick  s    ii2::i.5j&//3CHj&//3IN 	j&"6"6T1Ej&"6"6QBj&"6"6S!Dj&"6"6QDj&"6"6Q2Nj&"6"6Q$2	/j&"6"6Q"&&QR)T wwryyBJJy7@c37yyF""" $$S!Q/!!#q!Z@!!#q!ZaHE"E"re   r  )Nhammingr  )r  r  r  )r'  r|  rU   r  c                    t        |      }||j                  k(  r|j                  n|j                  }|j	                  dd|d      }|j                  |dz   dz        }t        j                  |j                  ||      ||      }	t        t        j                  |||      |j                  |	             |j                  |j                  |dz   dz        |j                  |dz   dz        g      }|j                  ||      }
t        j                  |
|d|	      }||j                  k(  rd
nd}t        t        j                  ||d|	      |j                  |      |       y )Nr   rU   F)endpointrT         @r  rS   r  &.>v!>r   )rA   r   r   r   linspacecosr   r  r   r7   realstacksinr   )r^   r  r  r  r_   dt_rdt_cru   rv   desired	y_complex	resampledr   s                rc   	test_rfftzTestResample.test_rfft  s0     ##rzz1r||r}}KK2q5K1FFAqD59//"))At"4c&I3v>(	* HHbffadU3Y'Ac	):;<IIa&	OOIs6J	rzz)ttOOAs6:GGI	re   XXX: immutable arraysc                     |j                  |j                  d      |j                        }t        j                  |      }d}t        t        j                  ||d      t        j                  ||d      d       y )Nr  freqr  timer  r   )r   r   r   sp_fftr   r7   r   r  )r^   r_   tsigfsigr  s        rc   test_input_domainzTestResample.test_input_domain  s^     yy37zz$OOD#f5OOD#f5	re   nx)rS   rT   rN   rP   r   nyr   )r   r   c                     t        ||      }|j                  dg|z  |      }t        j                  ||      }t	        ||j                  dg|z  |j
                               y )NrS   r   )r  r\   r   r  r7   r   )r^   r  r  r   r_   ru   rv   s          rc   test_dczTestResample.test_dc  sY    
 E"JJsRxuJ-OOAr"2::qcBhagg:>?re   r  c                    |j                  d      }|j                  t        j                  j	                  d      j                  d            }|j                  |d      }t        j                  |dd||       t        ||       y )	NrN   r   rT   TcopyrP   rS   r  r  )	r  r\   r   r   r   r   r   r  r8   )r^   r  r_   impulser  window_origs         rc   test_mutable_windowz TestResample.test_mutable_window  sk     ((1+BII11!4::1=>jjdj3Wa67K,re   c                     |j                  d|j                        }|j                  g d|j                        }t        j                  |dd||      }|j
                  |j                  k(  sJ y )NrU   r   rS   rS   rS   rS   rT   r  )r   r   r\   r   r  r   )r^   r  r_   ru   r?  rv   s         rc   test_output_float32z TestResample.test_output_float32  s^     IIb

I+JJy

J3  AqGDww"**$$$re   r   r   c                     t        ||      }|j                  d|      }t        j                  |dd|      }|j                  |j                  k(  sJ y )NrU   r   rS   rT   r  )r  r   r   r  r   )r^   r  r   r_   ru   rv   s         rc   test_output_match_dtypez$TestResample.test_output_match_dtype  sN     E"IIbI&  Aq':ww!''!!!re   zmethod, ext, padtype)r   FN	polyphaseFc           	      "   d}g d}|j                  ||j                        t        |      z  }|j                  d      d d |j                  f   }|j                  d|j                  z  |z  |z        t        ||      z  }	|D ]  }
|j                  |
|j                        t        |
      z  }|j                  d|j                  z  |z  |z        t        |
|      z  }|dk(  rt        j                  |	|
d	      }nu|rU|
|k7  rPt        |
|      }|
|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\  r3|j!                  |      }|dv rt#        ||d       Qt#        ||d       `|j                  |j                  k(  sJ t%        j&                  ||      d   }|dkD  rJ |||
f         t$        j(                  j+                  d      }t        |      t%        j,                  |j/                  |            z  }	|j                  |	      }	|D ]  }
|j                  |
|j                        t        |
      z  }t%        j0                  |||	      }|dk(  rt        j                  |	|
      }nt        j                  |	|
||      }|j                  |j                  k(  sJ |j                  t%        j&                  |t%        j                  |            d         }|dkD  rJ |        |dk(  r|j                  ddg      }t        j                  |d      }|j                  g d      }t#        ||d       |j                  g d       }t        j                  |d      } |j                  d
d!g      }!t#        | |!d       y y )"Nr'  )	r   r  r  c   r'  r|     r     r   )r        $@g      D@rT   r_   r   r   r  r  rU   rS   )r  r  r  r  r  r  r         ?)r  r  333333?r   r   r  gGz?r  r   r   rO   )r         ?        r   r,  -q=)r  r*          r*  r.  )r   r   r  r\   newaxisr  pir1   r   r  r   maxr%  r  r   r  r  r7   r   corrcoefr   r   cumsumr   interp)"r^   r   extr  r_   raterates_tor	  freqsru   rate_tot_toy_tos	y_resampsr@  updownmax_ratef_chalf_lenr  polyargsr   y_toy_resampr  corrr  r  y1_testy1_truer  y2_testy2_trues"                                     rc   test_resample_methodsz"TestResample.test_resample_methods  s    < IId"**I-d;

>*1bjj=9FF1ruu9u$q()D",== %	>G99WBJJ97%.HDFF1ruu9u,t34tG7KKE"OOAwR@	7d?GT*A AB19D"2t}Hx-C!H}H#]]1x<!+;S2ACF*0WEH )73H"00GT = =3;=	 5;;q>* >QT{$QT?U1a4[)3=(==.D"88'$TB'$TB::777;;tX6t<D$;=tW(==;>/%	>P ii##A&J399T?33JJqM 	%G99WBJJ97%.HD99T1a(D!??1g6!//7D8?A::///::bkk$

80DEdKLD$;$$;	% U?VV,-Boob!,Gjj!CDGGW59./Boob!,Gjj"b*GGW59 re   n_in)r   r8  n_out)rN   rO   c                     t        j                  |      }d }t        j                  ||      }t        j                  |||      }t	        d|z  |d       y)zTest callable window function. c                 2    dt        j                  |       z  S )zScale input by 1/2r*  )r   	ones_like)r8  s    rc   r  z0TestResample.test_resample_win_func.<locals>.winC  s    e,,,re   r  rT   r-  r   N)r   rv  r   r  r7   )r^   rK  rL  x_inr  y0y1s          rc   test_resample_win_funcz#TestResample.test_resample_win_func=  sJ     wwt}	- __T5)__T55"bu-re   )rQ   rZ   c                 ,   d\  }}t        j                  |      }t        j                  ||      }t        j                  |||||z   g      \  }}dt        j                  t        |            |z  |z  |z  z   }	t        ||       t        ||	d       y)zcVerify behavior for parameter `t`.

        Note that only `t[0]` and `t[1]` are utilized.
        )rU   rT   )r	  rU   r-  r   N)r   rv  r   r  r   lenr8   r7   )
r^   rK  rL  t0dtrP  rQ  rR  r   t_refs
             rc   test__resample_param_tz#TestResample.test__resample_param_tL  s     Bwwt}__T5)uRU<BRYYs2w'",t3e;;BE.re   n1)rT   rN   r   r   n0c                     t        ||      dz  d ||fD        }fd|D        \  }}t        j                  ||      }t        j                  |dz   |      }t        ||d       t        |j                  |d       y)zDTest behavior at Nyquist frequency to ensure issue #14569 is fixed. rT   c              3   L   K   | ]  }t        j                  |      |z    y wr   )r   r   ).0n_s     rc   	<genexpr>z5TestResample.test_resample_nyquist.<locals>.<genexpr>b  s     4Rbiimb 4s   "$c              3   v   K   | ]0  }t        j                  d t         j                  z  z  |z         2 yw)rT   N)r   r  r0  )r^  t_f_nys     rc   r`  z5TestResample.test_resample_nyquist.<locals>.<genexpr>c  s,     =B"&&RUUT)B./=s   69r   r-  r   N)minr   r  r7   r  )	r^   r[  rZ  ttr  r  y1_ry1_crc  s	           @rc   test_resample_nyquistz"TestResample.test_resample_nyquist]  sq     2r{a4B84="=Br2&rBw+bu-		2E2re   rC   zfiltfilt is CPU-only)rE   rF   rL   down_factor)rT   r  O   c                    t         j                  j                  d      }t        t         j                  t         j
                  t        t        f}d}|D ]  }|j                  |      j                  |      }|t         j
                  t         j                  fv r|d|j                  |      z  z  }|j                  |      }d|d<   d|d<   t        j                  dd|z  d	      }|j                  |      }t        |d|d
      d d |   }	t        ||j!                  |            }
t        j"                  |d||
	      }t%        |	|dd        y )Nr   r  r   r   r   r   r  r  r  r  r  rS   gHz>r   r   )r   r   r   intr   r   r  complexr   r   r   r\   r   r%  r   r   flipr  r7   )r^   ri  r_   random_state	try_typesr   r   ru   r?  yfhcrv   s               rc   test_poly_vs_filtfiltz"TestResample.test_poly_vs_filtfiltk  s&    yy,,R0"**bllE7C	 	9E""4(//6Ar}}55R,,,T222

1A AaDAbEb"{"29EA

1A!S!Z8;GB
 !RWWQZ(B$$Q;rBAB48)	9re   zcorrelate1d is CPU-onlyc           	         dD ]  }t        dd|      D ]  }dD ]  }t        j                  j                  |f      }t        j                  j                  |f      }t        |j                  ||f      \  }}t        |      j                  }t        | ||      d      }t        j                  |d||      }	t        |d d |   |	          y )N)rT   rO   rS   rH  )rX   r  r  rj   )r=  r>  r  )r   r   r   mapr\   rB   ro  r   r   r  r7   )
r^   r_   r>  r  nweightsru   weightsro  y_gy_ss
             rc   test_correlate1dzTestResample.test_correlate1d  s      
	6DAr4( 	6 ( 6H		(("/A ii..{;G!$RZZ!W!>JAw*1-22D%agZHC ..ad7<C#C$K56	6
	6re   r   c                     t        ||      }|j                  g d|      }t        j                  |ddd      }t	        j
                  |      dkD  sJ y )N)r   rS   rT   rN   rT   rS   r   r   rT   rS   smooth)r=  r>  r  r   )r  r\   r   r  r   count_nonzero)r^   r   r_   r  actuals        rc   test_gh_15620zTestResample.test_gh_15620  sY    
 E"zz/uz=%%d)*+,.68 '!+++re   N)r(  r)  r*  r+  rd   r#  r-  r  r
  r  r  padtype_optionsr  r   r"  r  r   rJ  rS  rY  rh  rt  r{  r  r/  re   rc   r  r  h  s    k*<=A# >#B [[X'89[[S(+[[U$67k*<= > 8 , :. k*AB C k*AB[[T?3[[T?3[[W&?@@ A 4 4 C@ t,OP[[Y8- 9 Q- A [[Y8% 9% A [[Y8[[Wy)&<=" > 9
" k*ABA [[	
t}o
	
L: CL:\ [[VV,[[Wf-. . -. [[VW-[[Wf-/ . ./ [[T<0[[T<0
3 1 1
3 k*AB6(3I [[]K89 9 C
98 6(3L66 A [[Ww	&:;, <,re   r  r  c                       e Zd Zd Zd Zy)TestCSpline1DEvalc                 V   t        j                  g d      }t        j                  t        |            }|d   |d   z
  }t	        j
                  |      }t        j                  t        |      dz        dz  }t	        j                  ||||d         }t        |d d d   |d       y )	N)	rS   rT   rN   rO   rN   rT   rS   rT   rq  rS   r   r(  )dxr  rU   rP   r  )r   r  r   rU  r   	cspline1dcspline1d_evalr=   )r^   r_   rv   ru   r  cjr  y2s           rc   rd   zTestCSpline1DEval.test_basic  s    HH23IIc!fqTAaD[a YYs1v}%,""2rbQqT: 	""TrT(Aq9re   c                    t        j                  d      }t        j                  |j                  t         j                        }d}d|z  }t        j
                  dt         j                  z  |z  |z        }t        j                  |      }t        j                  dg      }t        j                  ||      }|j                  |j                  k(  sJ y )NrT   r   r(  r  rt   r*  )r   r   r  r  r   expr0  r   r  r  r  r   )	r^   r_   ru   rv   Tr   cyxnewynews	            rc   rx   zTestCSpline1DEval.test_complex  s    IIaLHHQWWBLL1!GFF4"%%<!#a'( a  xx$$R.zzQWW$$$re   N)r(  r)  r*  rd   rx   r/  re   rc   r  r    s    
:%re   r  c                   X    e Zd Zd Zd Z edd       edd      d               Zd	 Zy
)TestOrderFiltc                     t        j                  |j                  g d      |j                  g d      d      }|j                  g d      }t        ||       y )NrR   rS   r   rS   rS   )rT   rN   rT   )r   order_filterr\   r8   )r^   r_   r  expects       rc   rd   zTestOrderFilt.test_basic  sA    $$RZZ	%:BJJy<QSTUI&'re   c                 F   |j                  |j                  dt        |            d      }|j                  dt        |            }|j	                  g dg dg dg dg dgt        |            }t        t        j                  ||d	      |       |j	                  g d
g dg dg dg dg      }t        t        j                  ||d      |       |j	                  g dg dg dg dg dgt        |            }t        t        j                  ||d      |       y )N   r   rP   rP   rN   )r.  r.  r.  r.  r.  )r.  r.  r  ro  r.  )r.  r  r        @r.  )r.  r(        &@r  r.  r   )r  r  r  r  rr  )r  r  g      *@      ,@r  )g      0@g      1@g      2@      3@r  )      5@      6@      7@r  r  )r  r  r  r  r  rT   r   rS   rT   rN   r   )rP   rQ   r   r   rN   )rU   r  rZ      r   )r  r   r   r|  r  r   r  r   r   r|  rS   )r   r   rA   r  r\   r7   r   r  r^   r_   ru   r  r   s        rc   test_doc_examplezTestOrderFilt.test_doc_example  s   JJryy+;B+?y@&I!1"!56 ::!!!$!	#
 #2&  
 	++Avq98D ::!%&&&	(
 	++Avq98D :: ! 	"
 #2&  
 	++Avq98Dre   rD  zrepeat requires an axisrK   r   zarray-api-compat#292c                 &   |j                  |j                  d      d      }|j                  g dg dg dg dg dg      }t        t	        j
                  |d      |       t        t	        j                  ||j                  d	      d
      |       y )Nr  r  r  )rS   rQ   r   r   rO   )rQ   r  rZ   r  r8  )r  r   r   r|     )r   r   r   r|  r   rN   r  rO   )r   r   r\   r7   r   r  r  rv  )r^   r_   ru   r   s       rc   test_medfilt_order_filterz'TestOrderFilt.test_medfilt_order_filter  s|     JJryy}f- ::!	!
 	q!,h72776?A6	
re   c                 ~   |j                  |j                  d      d      }|j                  g dg dg dg      }|j                  g dg dg dg d	g d
g      }t        t	        j
                  ||d      |       |j                  g dg dg dg dg dg      }t        t	        j
                  ||d      |       y )Nr  r  )rS   rS   r   )r   rS   r   r   r   r   r   r   r   r   r   )r   r   rS   rT   rN   )r   rP   rQ   r   r   )r   rU   r  rZ   r  r  r   )r   rS   rT   rN   rO   )rP   rQ   r   r   r8  )rU   r  rZ   r  r  )r  r   r   r|  r  rS   )r   r   r\   r7   r   r  r  s        rc   test_order_filter_asymmetricz*TestOrderFilt.test_order_filter_asymmetric  s    JJryy}f-
 ::  	"
 	++Avq98D::!!	#
 	++Avq98Dre   N)r(  r)  r*  rd   r  r,  r  r  r/  re   rc   r  r    sA    (
$EL |,EFw'=>
 ? G
&Ere   r  c                      e Zd Zd Zd Z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 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 edd      d        Zd Z edd      d        Zd Z edd      ej4                  j7                  dd d gg d!d"d"gg d#fe$      d%               Zd& Z ed'd(       edd)      d*               Z edd      d+        Z  edd      d,        Z!d- Z"d. Z# ed/      ej4                  j7                  dd0d0g e$jJ                  d0      g      ej4                  j7                  d1d0d0g e$jJ                  d0      g      d2                      Z& ed/      ej4                  jN                  d3               Z(y4)5_TestLinearFilterc                 (   | j                   t        k(  r^t        j                  j                  | _        t        j                  j                  | _        t        j                  j                  | _        y t        | _        t        | _        t        | _        y r   )
r   r"  r   rR  r
   assert_closeassert_equalr=   r7   r8   )r^   s    rc   setup_methodz_TestLinearFilter.setup_method,  s\    :: "

 : :D "

 7 7D-/ZZ-Q-QD* /D /D-FD*re   c                     t        |t              r|nt        j                  |      }|j	                  d|dz
  |      }t        |t              s|j                  ||      }| j                  ||      S )Nr   rS   )r  rm  mathprodr   r   convert_dtype)r^   r  r_   	prodshaperu   s        rc   generatez_TestLinearFilter.generate6  s^    's3E59I	KK9q=)4%%

1e$A!!!R((re   c                    | j                   t        j                   d      k(  rt        j                  |      }t        j                  |j                  | j                         }t        j
                  ||gddgdgdgg      }|D ]  \  }}| j                  |d         |d<    |S t        | j                   t              rt        || j                         n| j                   }|j                  ||      S )	NOrefs_okzerosize_okreadonly	writeonlyr/  .r   )
r   r   r\   emptyr  nditertyper  strr  )r^   arrr_   r   iterru   rv   r   s           rc   r  z_TestLinearFilter.convert_dtype=  s    ::#&**S/C((399djj1C99c3Z)M)B${m46D *11R5)#*J #4::s3 R,**  ::c://re   c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g d|      }| j                  t        |||      |       y )NrQ   rS   r   r*        ࿩r   rT   rO   rQ   r   r(  r  r  r=   r   r^   r_   ru   ra   r`   y_rs         rc   test_rank_1_IIRz!_TestLinearFilter.test_rank_1_IIRL  sj    MM$#2w+T{B/  !5r:&&wq!Q'7=re   c                     | j                  d|      }| j                  ddg|      }| j                  dg|      }| j                  g d|      }| j                  t        |||      |       y )Nr  rS   r   rS   rN   rP   r   r  r  r  s         rc   test_rank_1_FIRz!_TestLinearFilter.test_rank_1_FIRS  sh    MM$#1vr*sB'  !4b9&&wq!Q'7=re   rC   z*XXX https://github.com/cupy/cupy/pull/8677rK   c                 \   | j                  d|      }| j                  g d|      }| j                  ddg|      }| j                  ddg|      }| j                  g d|      }| j                  dd	g|      }t        ||||
      \  }}	| j                  ||       | j                  |	|       y )Nr  rS   r   r   r*  r  rS   rT   )rS   rP   r8  r  r   rs  r  zir  r  r   r=   
r^   r_   ru   ra   r`   r  r  zf_rrv   zfs
             rc   test_rank_1_IIR_init_condz+_TestLinearFilter.test_rank_1_IIR_init_condZ  s    MM$#z2.T{B/A+  !6;!!2s)R01aB'2&&q#.&&r40re   c                 Z   | j                  d|      }| j                  g d|      }| j                  dg|      }| j                  ddg|      }| j                  g d|      }| j                  ddg|      }t        ||||      \  }}	| j                  ||       | j                  |	|       y )Nr  r  rS   )rS   rT   rN   rQ   r8  r  r8  rP   r  r  r  s
             rc   test_rank_1_FIR_init_condz+_TestLinearFilter.test_rank_1_FIR_init_condf  s    MM$#y"-sB'A+  !5r:!!1a&"-1aB'2&&q#.&&r40re   c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g dg dg dg dg|      }t        |||d      }| j                  ||       y )	NrO   rN   rS   r   r*  r   rT   rO   rQ   rO   rT   r   r  r  )r^   r_   ru   ra   r`   y_r2_a0rv   s          rc   test_rank_2_IIR_axis_0z(_TestLinearFilter.test_rank_2_IIR_axis_0r  s    MM&"%2w+Sz2.$$iI&/&1246Aq!!$&&w2re   c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g dg dg dg dg|      }t        |||d	      }| j                  ||       y )
Nr  rS   r   r*  r   rT   r   rQ   r  rQ   rZ   r  rZ   r|  ir|  r  r  )r^   r_   ru   ra   r`   y_r2_a1rv   s          rc   test_rank_2_IIR_axis_1z(_TestLinearFilter.test_rank_2_IIR_axis_1{  s    MM&"%2w+Sz2.$$i])&+,.0Aq!!$&&w2re   c                    | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  t        j                  d      |      }| j                  g dg dg dg d	g|      }| j                  g d
|      d d t        j                  f   }t        |||d|      \  }}	| j                  ||       | j                  |	|       y )Nr  rS   r   r*  )rO   rS   r  )r   r   )r  r  )r  r  )r  r  iir  r  )r  r  r   rv  r/  r   r=   )
r^   r_   ru   ra   r`   r  	y_r2_a0_1r  rv   r  s
             rc    test_rank_2_IIR_axis_0_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_0_init_cond  s    MM&"%2w+Sz2.3&&	:}+(-.02	!!"5r:1bjj=I1aaB/2&&y!4&&r40re   c                    | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  t        j                  d      |      }| j                  g dg dg dg dg|      }| j                  g dg|      }t	        |||d	|
      \  }}	| j                  ||       | j                  |	|       y )Nr  rS   r   r*  rS   rN   )rS   rN   rP   )rP   rN   rS   )r  r  r   r  )r  r  r   rv  r   r=   )
r^   r_   ru   ra   r`   r  	y_r2_a0_0r  rv   r  s
             rc    test_rank_2_IIR_axis_1_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_1_init_cond  s    MM&"%2w+Sz2.4&&	9(19(>?AC	!!?"3R81aaB/2&&y!4&&r40re   Tznp.apply_along_axis is np onlyr|   c                   	
 | j                  d|      }| j                  ddg|      }| j                  ddg|      }t        j                  |      t        j                  |      t        j                  |      c	
}t	        |j
                        D ]L  }t        ||||      }t        j                  	
fd||      }| j                  ||j                  |             N y )NrO   rN   rT   rS   r   r*  c                     t        |       S r   r   wr  r  s    rc   <lambda>z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>      dA0F re   	r  r  r   r\   r   ndimr   apply_along_axisr=   r^   r_   ru   ra   r`   x_npr  rv   r  r  r  s            @@rc   test_rank_3_IIRz!_TestLinearFilter.test_rank_3_IIR  s    MM)R(2w+Sz2.::a="**Q-AdD!&&M 	?D1a&A%%&FdSC**1bjjo>	?re   c                    | j                  d|      }| j                  ddg|      | j                  ddg|      t        |j                        D ]  }t	        |j
                        }d||<   | j                  |j                  |      |      }| j                  dg|      t        |||      \  }}fd}fd}	t        j                  ||t        j                  |            }
t        j                  |	|t        j                  |            }| j                  ||j                  |
             | j                  ||j                  |             
 y )Nr  rS   r   r*  c                 N    t        j                  t        |       d         S Nr  r   r   r\   r   r  r`   ra   zi1s    rc   lf0z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0  "    zz'!Qc":1"=>>re   c                 N    t        j                  t        |       d         S Nr  rS   r  r  s    rc   lf1z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1  r	  re   )r  r  r   r  r  r  rv  r   r   r  r\   r=   )r^   r_   ru   r  zi_shaper  rv   r  r  r  r  r  r`   ra   r  s               @@@rc   test_rank_3_IIR_init_condz+_TestLinearFilter.test_rank_3_IIR_init_cond  s&   MM)R(2w+Sz2.!&&M 	ADAGG}HHTN##BGGH$5r:B$$aS"-CAq!T2.EAr??%%c4A?C&&sD"**Q-@D**1bjjo>**2rzz$/?@	Are   c                   	
 | j                  d|      }| j                  g d|      }| j                  dg|      }t        j                  |      t        j                  |      t        j                  |      c	
}t	        |j
                        D ]L  }t        ||||      }t        j                  	
fd||      }| j                  ||j                  |             N y )Nr  r  rS   c                     t        |       S r   r  r  s    rc   r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>  r  re   r  r  s            @@rc   test_rank_3_FIRz!_TestLinearFilter.test_rank_3_FIR  s    MM)R(z2.sB'::a="**Q-AdD!&&M 	?D1a&A%%&FdSC**1bjjo>	?re   c                    | j                  d|      }| j                  g d|      | j                  dg|      t        j                  |      }t	        |j
                        D ]  }t        |j                        }d||<   | j                  |j                  |      |      }| j                  ddg|      t        |||      \  }}fd}	fd}
t        j                  |	||      }t        j                  |
||      }| j                  ||j                  |             | j                  ||j                  |              y )Nr  r  rS   rT   c                 N    t        j                  t        |       d         S r  r  r  s    rc   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0  r	  re   c                 N    t        j                  t        |       d         S r  r  r  s    rc   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1  r	  re   )r  r  r   r\   r   r  r  r  rv  r   r  r=   )r^   r_   ru   r   r  r  r  rv   r  r  r  r  r  r`   ra   r  s                @@@rc   test_rank_3_FIR_init_condz+_TestLinearFilter.test_rank_3_FIR_init_cond  s   MM)R(z2.sB'zz!}!&&M 	ADAGG}HHTN##BGGH$5r:B$$aVR0CAq!T2.EAr??%%c46C&&sD$7D**1bjjo>**2rzz$/?@	Are   c                 :   | j                  d|      }t        j                  ddd      \  }}| j                  ||      }| j                  ||      }|j                  d   dz
  }| j                  |j                  dd	|f      |      }| j                  |j                  dd|f      |      }t        ||||
      \  }}	t        ||||
      \  }
}| j                  |
|       | j                  |	|       t        t        t        |||d|j                  |             y )N)rO   rP   r  r   r   bar  r   rS   rO   rP   r  r   )
r  r   r    r  r  rv  r   r=   r   r   )r^   r_   ru   ra   r`   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings               rc   test_zi_pseudobroadcastz)_TestLinearFilter.test_zi_pseudobroadcast  s   MM*b)}}QD11q"%q"%''!*q. $$RWWaG_%=rB$$RWWaG_%=rB!!Qg6!!Qg6&&vv6&&w8 	j'1aB8HIre   c                     | j                  d|      }| j                  g d|      }| j                  dg|      }| j                  g d|      }t        ||d   |      }| j                  ||       y )NrQ   r  rS   )r   rS   rT   rT   rT   rT   r   r  )r^   r_   ru   ra   r`   r  rv   s          rc   test_scalar_az_TestLinearFilter.test_scalar_a  so     MM!R z2.sB'  !3R8AqtQ&&q#.re   c                    | j                  |j                  d|j                        |      }| j                  |j                  d|j                        |      }| j                  |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<   |j	                  |      }| j                  ||      }| j                  |j                  d	|j                        |      }t        j                  dt
        j                        }dggdggdggg|d d d d d d
f<   |j	                  |      }| j                  ||      }t        |||d|      \  }}	| j                  ||       | j                  |	|       t        ||d   |d|      \  }
}| j                  |
|       | j                  ||       y )N)rN   rT   rP   r   rP   )rS   r   r   )rN   rS   rO   rS   rT   rN   )rN   rT   rO   rO   r   r   )r  r  r   rv  r\   r   r   r=   )r^   r_   ru   ra   r`   r  zf_expected
y_expectedy_iirzf_iiry_firzf_firs               rc   test_zi_some_singleton_dimsz-_TestLinearFilter.test_zi_some_singleton_dims  s   
 rxx	xBBGrwwqw92>rzz)4b9WWYbhh/
1a7q
1a7qZZ^B'(()288)LbQXXirxx8
"#use4
1a!8ZZ
+
''
B7
  1aR0v&&uj9&&v{;  1Q4B3v&&uj9&&v{;re   c           	          | j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }t        t        t        |||||       y r   )r  r   r   r   )r^   ra   r`   ru   r  r  r_   s          rc   base_bad_size_ziz"_TestLinearFilter.base_bad_size_zi"  s^    q"%q"%q"%B'j'1aD"=re   zcupy does not raisec                    |j                  d      }| j                  dgdg|ddg|       | j                  ddgdg|dddg|       | j                  ddgdg|ddgg|       | j                  ddgdg|dg d|       | j                  g ddg|ddgg|       | j                  g ddg|dg d|       | j                  dgddg|dddg|       | j                  dgddg|ddgg|       | j                  dgddg|dg d|       | j                  g dddg|ddg|       | j                  g dddg|ddgdgg|       | j                  g dddg|dg d|       | j                  g dddg|dg d|       | j                  ddgg d|ddg|       | j                  ddgg d|ddgdgg|       | j                  ddgg d|dg d|       | j                  ddgg d|dg d|       t        j                   d      j                  d	      }|j	                  |      }| j                  dgdg|ddg|       | j                  ddgdg|dg d|       | j                  ddgdg|dg dgg|       | j                  ddgdg|ddgdgd
gg|       | j                  ddgdg|dddgg|       | j                  ddgdg|dg dg|       | j                  g ddg|dg d|       | j                  g ddg|dg dg dgg|       | j                  g ddg|dddgd
dgddgg|       | j                  g ddg|dddgd
dgg|       | j                  g ddg|dg dg dg|       | j                  dgddg|dg d|       | j                  dgddg|dg dgg|       | j                  dgddg|ddgdgd
gg|       | j                  dgddg|dddgg|       | j                  dgddg|dg dg|       | j                  dgg d|dg d|       | j                  dgg d|dg dg dgg|       | j                  dgg d|dddgd
dgddgg|       | j                  dgg d|dddgd
dgg|       | j                  dgg d|dg dg dg|       | j                  g dddg|dg d|       | j                  g dddg|dg dg dgg|       | j                  g dddg|dddgd
dgddgg|       | j                  g dddg|dddgd
dgg|       | j                  g dddg|dg dg dg|       | j                  dgdg|ddg|       | j                  ddgdg|dg d|       | j                  ddgdg|ddgdgd
gdggg|       | j                  ddgdg|dg dg|       | j                  ddgdg|ddgdgd
gg|       | j                  ddgdg|ddgdgd
gdgdgg|       | j                  g ddg|dg d|       | j                  g ddg|dddgd
dgddgddggg|       | j                  g ddg|dg dg dg|       | j                  g ddg|dddgd
dgddgg|       | j                  g ddg|dddgd
dgddgddgddgg|       | j                  dgddg|dg d|       | j                  dgddg|ddgdgd
gdggg|       | j                  dgddg|dg dg|       | j                  dgddg|ddgdgd
gg|       | j                  dgddg|ddgdgd
gdgdgg|       | j                  dgg d|dg d|       | j                  dgg d|dddgd
dgddgddggg|       | j                  dgg d|dg dg dg|       | j                  dgg d|dddgd
dgddgg|       | j                  dgg d|dddgd
dgddgddgddgg|       | j                  g dddg|dg d|       | j                  g dddg|dddgd
dgddgddggg|       | j                  g dddg|dg dg dg|       | j                  g dddg|dddgd
dgddgg|       | j                  g dddg|dddgd
dgddgddgddgg|       y )NrQ   rS   r   r   r   rS   rT   r  r   rS   rT   rN   rZ   r  rT   )r   rS   rT   rN   rO   rP   rg   rN   rO   rP   )rO   rP   rQ   r   )r   rS   rT   rN   rO   rP   rQ   r   r   r   r8  )r   r,  r   r   r\   )r^   r_   r  r  s       rc   test_bad_size_ziz"_TestLinearFilter.test_bad_size_zi)  sQ
    YYq\qcA3BR8q!fqc2rAq62>q!fqc2rQC5"=q!fqc2r9bAi!b"seR@i!b"iDqcAq62rAq62>qcAq62rQC5"=qcAq62r9bAi!QR!bAi!QR1#sRHi!QRBGi!QRrJq!fiR!bAq!fiR1#sRHq!fiRBGq!fiRrJ YYr]""5)ZZ^qcA3AsB7 	q!fqc2q)R@q!fqc2qI;-Dq!fqc2qA3aS/2Fq!fqc2qAq6(B?q!fqc2q<."Ei!b!5GLi!b!y)6L5MrRi!b!q!fq!fq!f5MrRi!b!q!fq!f5ErJi!b!lL5QSUVqcAq62q)R@qcAq62qI;-DqcAq62qA3aS/2FqcAq62qAq6(B?qcAq62q<."Eqc9b!5GLqc9b!y)6L5MrRqc9b!q!fq!fq!f5MrRqc9b!q!fq!f5ErJqc9b!lL5QSUVi!QQ8JBOi!QQ)Y9O8PRTUi!QQ!Q!Q!Q8PRTUi!QQ!Q!Q8H"Mi!QQ+\:B	@ 	qcA3AsB7q!fqc2q,Cq!fqc2qQC!qcA33G2H"Mq!fqc2q<."Eq!fqc2qA3aS/2Fq!fqc2qA3aS1#s2KRPi!b!5MrRi!b!!"AAAA?@"	Fi!b!lL5QSUVi!b!q!fq!fq!f5MrRi!b! !1v1v1v1v1vF	L 	qcAq62q,CqcAq62qQC!qcA33G2H"MqcAq62q<."EqcAq62qA3aS/2FqcAq62qA3aS1#s2KRPqc9b!5MrRqc9b!!"AAAA?@"	Fqc9b!lL5QSUVqc9b!q!fq!fq!f5MrRqc9b!q!f !fq!fq!fq!f6>?A	C 	i!QQ8PRTUi!QQ!"AAAA?@"	Fi!QQ+\:B	@i!QQ!Q!Q!Q8PRTUi!QQ !1v1v1v1v1vF	Lre   c                    | j                  d|      }| j                  dg|      }| j                  dg|      }| j                  g |      }t        ||||      \  }}| j                  ||       |j                  t        | j                  t              rt        || j                        n| j                  k(  sJ t        |      dk(  sJ y )N)rP   rS   r  r   )	r  r  r   r=   r   r  r  r  r@   )r^   r_   ru   r`   ra   r  rv   r  s           rc   test_empty_ziz_TestLinearFilter.test_empty_zi  s    MM$#sB'sB'B'1aB'2&&q!,xx)$**c: $B

3!%- 	- - r{are   rI   z jax does not support inplace opsr`   rS   )rS   r*        ?rT   )rT   rS   rN   )idsc           	         t        |      r,t        |t        t        z        rt	        j
                  d       | j                  d|      }| j                  g d|      }| j                  ||      }t        |      dz
  }t        |      dz
  }t        |      r||z   nt        ||      }t        |||| j                  ||            \  }}	t        |||j                  |      |j                  |            }
| j                  |	|
       y )Nz0cupy does not supoprt scalar filter coefficientsrQ   )r*  r  r   rS   r  )r<   r  rm  r  r#  r  r  r  r@   r1  r   r&   ro  r=   )r^   r`   r_   ru   ra   r  r  KrR  zi_1zi_2s              rc   test_lfilticz_TestLinearFilter.test_lfiltic  s     2;:au5KKJKMM!R |R0q"%AJNAJNR[AEc!Qi1at}}Q';<Dq!RWWR["''!*5&&tT2re   c           	         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       y )NrS   rT   r   )r   r   r&   r)  s    rc   test_lfiltic_bad_coeffsz)_TestLinearFilter.test_lfiltic_bad_coeffs  s    j'Aq621v1vFj'Aq6Aq6Aq6Aq6Jj'Aq6QC!:1v1vNj'QC!:sQFQFKre   array_api_strictz-int64 and float64 cannot be promoted togetherzjax dtype defaults differc                    | j                  dg|      }| j                  dg|      }t        |||j                  ddg            }t        |||j                  ddg            }t        |||j                  ddg            }| j                  ||       | j                  t
        k(  ri nddi} | j                  ||fi | y )NrS   r  r   TFr  )r  r&   r\   r  r   r"  )r^   r_   r`   ra   r  r7  r8  check_dtype_args           rc   test_lfiltic_bad_ziz%_TestLinearFilter.test_lfiltic_bad_zi  s     sB'sB'Q2::r1g./q!RZZa12q!RZZu67"d# $

f 4"=%:P"d6o6re   c                 Z   | j                  dg|      }| j                  g d|      }| j                  ddg|      }| j                  dg|      }| j                  dg|      }| j                  ddg|      }t        ||||      \  }}	| j                  ||       | j                  |	|       y )	NrS   r  rT   r   r}  r\  r  r  r   r=   
r^   r_   r`   ra   r  ru   yezferv   r  s
             rc   test_short_x_FIRz"_TestLinearFilter.test_short_x_FIR  s     sB'z2.A+tR(b)  !S2.1aB'2&&q"-&&r3/re   c                 \   | j                  ddg|      }| j                  g d|      }| j                  ddg|      }| j                  dg|      }| j                  dg|      }| j                  ddg|      }t        ||||	      \  }}	| j                  ||       | j                  |	|       y )
NrS   r  rT   r   r}  r\  irA  r  rB  rC  s
             rc   test_short_x_IIRz"_TestLinearFilter.test_short_x_IIR  s     1vr*z2.A+tR(b)  #sR01aB'2&&q"-&&r3/re   c                 Z   | j                  d|      }| j                  ddg|      }t        ||      }| j                  ddg|      }t        ||      }| j                  g d|      }t        |||      }| j	                  ||       | j                  ||       | j                  ||       y )Nr  rS   r   r)  r*  r  r  r  r  r?   r   r=   r  	r^   r_   ru   ra   b0r`   a0r  y_fs	            rc   test_do_not_modify_a_b_IIRz,_TestLinearFilter.test_do_not_modify_a_b_IIR  s    MM$#2w+Q2T{B/Q2  !5r:aA&&sC0!R !R re   c                 X   | j                  d|      }| j                  g d|      }t        ||      }| j                  dg|      }t        ||      }| j                  g d|      }t        |||      }| j	                  ||       | j                  ||       | j                  ||       y )Nr  r  r)  rT   )r   r*  rS   rT   rN   rr  rJ  rK  s	            rc   test_do_not_modify_a_b_FIRz,_TestLinearFilter.test_do_not_modify_a_b_FIR  s    MM$#y"-Q2sB'Q2  !6;aA&&sC0!R !R re   r  r  ra   c                     t         j                  j                  d      }|j                  |      }| j	                  t        |j                  dg      |j                  dg      |      t        |||             y )NrU   r  )r   r   r   r\   r  r   )r^   r`   ra   r_   r  s        rc   test_scalar_inputz#_TestLinearFilter.test_scalar_input	  s`     yyr"zz$BJJu%rzz3%'8$?Aq$	
re   c                     t        j                  g dt              }t        j                  g dt              }t        j                  d      5  t        ||g d       d d d        y # 1 sw Y   y xY w)Nr   r   r   r  r   rh   )r   r\   r"  r#  r$  r   r   s       rc   r%  z(_TestLinearFilter.test_dtype_deprecation	  sV     JJ)8JJ2&A##*IJ 	(Aq,'	( 	( 	(s   A**A3N))r(  r)  r*  r  r  r  r  r  r+  r  r  r  r  r  r  r  r  r  r  r   r"  r*  r,  r0  r2  r#  r-  r  r  r9  r;  r?  rF  rH  rO  rQ  r   r  rS  r.  r%  r/  re   rc   r  r  )  s   G)0>> f%QR	1 S	1 f%QR	1 S	133 f%QR1 S1 f%QR1 S1 d+KL	? M	? d+KLA MA( d+KL	? M	? d+KLA MA* f%QRJ SJ* f%QR/ S/ f%QR< S<:> f%:;gL <gLR  k*LM[[S1qc<QC"K!$  &3& N3$L #R k*EF7 G7 f%QR0 S0 f%QR0 S0
!
! d#[[S3xrxx}"=>[[S3xrxx}"=>
 ? ? $
 d#[[(  $(re   r  c                       e Zd ZdZy)TestLinearFilterFloat32r   Nr(  r)  r*  r   r/  re   rc   rV  rV  	      Ere   rV  c                       e Zd ZdZy)TestLinearFilterFloat64r   NrW  r/  re   rc   rZ  rZ  	  rX  re   rZ  rq  c                   0    e Zd Z ej                  d      Zy)TestLinearFilterFloatExtendedr@  Nr(  r)  r*  r   r   r/  re   rc   r\  r\  	       BHHSMEre   r\  c                       e Zd ZdZy)TestLinearFilterComplex64r   NrW  r/  re   rc   r`  r`  $	  s    Ere   r`  c                       e Zd ZdZy)TestLinearFilterComplex128r   NrW  r/  re   rc   rb  rb  (	  s    Ere   rb  c                   0    e Zd Z ej                  d      Zy)TestLinearFilterComplexExtendedGNr]  r/  re   rc   rd  rd  ,	  r^  re   rd  r  c                   6    e Zd Z ej                  d      Zd Zy)TestLinearFilterDecimalr  c                 *    t        t        |            S r   )r   r  )r^   ru   s     rc   r  zTestLinearFilterDecimal.type7	  s    s1vre   N)r(  r)  r*  r   r   r  r/  re   rc   rg  rg  2	  s     BHHSMEre   rg  c                   4    e Zd Z ej                  d      ZeZy)TestLinearFilterObjectr  N)r(  r)  r*  r   r   r  r  r/  re   rc   rj  rj  ;	  s     BHHSMEDre   rj  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       y )Nabiflagsr   z'test is flaky when run with python3-dbgr  )r  Nro  r  ro  rq  )hasattrsysrl  r#  r  r   r  r   r)  s    rc   test_lfilter_bad_objectrp  B	  sc    
 sJC3<<$7=>)WsecU4DE)WsedV_E)Wtfse_Ere   c                 >    t        t        t        ddgddgg d       y )NrT   rN   rO   rP   )rS   rT   rN   rO   rP   )r   NotImplementedErrorr   r)  s    rc   !test_lfilter_notimplemented_inputrs  N	  s     %w1!ukJre   c                       e Zd 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y)_TestCorrelateRealc                 T    |t         k(  rt        j                  j                  S t        S )z/Use np.testing while object arrays are a thing.)r   r   rR  r=   )r^   rW  s     rc   _get_assertionz!_TestCorrelateReal._get_assertionV	  s    =::777,,re   c                     |j                  ddd|      }|j                  ddd|      }|j                  g d|      }|||fS )Nr   rN   rO   r   rS   rT   )r   rT   rP   r   rN   )r   r\   r^   rW  r_   r`   ra   r  s         rc   _setup_rank1z_TestCorrelateReal._setup_rank1]	  sL    KK1arK*KK1arK*jjj3!Syre   c                     d}	 t        j                  |      }t        |d      r+t        dt        j                  |j
                        z        }|S # t        $ r Y |S w xY w)NrQ   
resolutionr  )r   r  rn  rm  log10r|  	Exception)r^   res_dtr  dt_infos       rc   equal_tolerancez"_TestCorrelateReal.equal_toleranced	  sb    	hhv&Gw-d288G,>,>#??@   		s   AA 	AAc                     |t         j                  k(  r| j                  t         j                        S | j                  |      S r   )r   rx  r  r   )r^   r  s     rc   equal_tolerance_fftz&_TestCorrelateReal.equal_tolerance_ffto	  s6     R]]"''

33''//re   Tz	order='F'r|   c                    |t         k(  r(t        t        d      gt        d      g      }|dk(  sJ y t        ||      }| j                  ||      \  }}}t	        ||d      }t	        ||d      }t        ||| j                  |j                               t        ||| j                  |j                               |j                  |k(  sJ |j                  |k(  sJ y )NrO   rN   r   r   r   r  )	r   r   r  _setup_rank3r   r=   r  r   r  )	r^   rW  r_   r   r`   ra   r  y_ffty_directs	            rc   test_methodz_TestCorrelateReal.test_methodw	  s    ='wqzlCFX%%%RB))"b1IAq#a51E Ah7H%c&+.2.F.Fu{{.SV &c&..2.B.B8>>.RU ;;"$$$>>R'''re   c                    t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  |      }| j                  ||      \  }}}t        ||d      } |||dd        |j                  |k(  sJ t        ||d      }|j                  t        k7  r |||j                  |dd              n |||dd d d d          |j                  |k(  sJ y )Nr  $torch does not support unsigned intsr   rS   rO   r   )r:   r#  r  r  r  r  rw  rz  r   r   r"  ro  )r^   rW  r_   _assert_almost_equalr`   ra   r  rv   s           rc   test_rank1_validz#_TestCorrelateReal.test_rank1_valid	  s    B<B"@@;;=> *2s 3WR_#2226%%b"-	1caG$QAa)ww"}} aG$II BGGC!H$56 C!HTrTN3ww"}}re   c                 *   t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  ||      \  }}}t        ||d      }| j                  |      } |||d d        |j                  |k(  sJ y )Nr  r  ri   r   
r:   r#  r  r  r  r  rz  r   rw  r   r^   rW  r_   r`   ra   r  rv   r  s           rc   test_rank1_samez"_TestCorrelateReal.test_rank1_same	  s    B<B"@@;;=> *2s 3WR_%%b"-	1caF##2226QCR)ww"}}re   c                 $   t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  ||      \  }}}t        ||d      }| j                  |      } |||       |j                  |k(  sJ y )Nr  r  r   r  r  s           rc   test_rank1_fullz"_TestCorrelateReal.test_rank1_full	  s    B<B"@@;;=> *2s 3WR_%%b"-	1caF##2226Q$ww"}}re   c                    t        j                  ddd      j                  dd      j                  |      }t        j                  ddd      j                  d	d      j                  |      }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
                        j                  |      }|||fS )Nr   r  rH  )rT   rO   rP   F)orderrY   rF  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     @rm  )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   ry  s         rc   r  z_TestCorrelateReal._setup_rank3	  s    KK2r"**9C*@GGKK2r"**9C*@GG hhHIKKJFH JKLLLIK GIKLIEGH( **)&( '-fRj) 	, !Syre   c           	         t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||d      }| j                  |      } |||ddddddf          |j                  |k(  sJ t	        ||d      }| j                  |      } |||ddddddf   d d dd d dd d df          |j                  |k(  sJ y )Nr   rS   rT   rO   rN   rP   r   r  r  r  r  r   rw  r   r  s           rc   test_rank3_validz#_TestCorrelateReal.test_rank3_valid	  s     *2s 3WR_%%b"-	1caG$#2226QAaC1acM 23ww"}} aG$#2226QAaC1acM 24R42tt3C DEww"}}re   c                     t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||d      }| j                  |      } |||ddddddf          |j                  |k(  sJ y )Nri   r   r   rS   r  r  r  s           rc   test_rank3_samez"_TestCorrelateReal.test_rank3_same	  s     *2s 3WR_%%b"-	1caF##2226QAbD!B$"$4 56ww"}}re   c                     t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||      }| j                  |      } |||       |j                  |k(  sJ y r   r  r  s           rc   test_rank3_allz!_TestCorrelateReal.test_rank3_all	  sf     *2s 3WR_%%b"-	1caO#2226Q$ww"}}re   N)r(  r)  r*  rw  rz  r  r  r+  r  r  r  r  r  r  r  r  r/  re   rc   ru  ru  T	  s    -	0 d;7( 8((&

< d;7 8 d;7 8 d;7 8re   ru  rW  r  c                       e Zd Zy)TestCorrelateRealNr(  r)  r*  r/  re   rc   r  r  	  s     	re   r  c                       e Zd Zy)TestCorrelateRealDecimalNr  r/  re   rc   r  r  
  s     	re   r  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ej                  j                   ed      d               Zy)TestCorrelateTr  c                    t        j                  dd      j                  d      }t        j                  dd      j                  d      }t        t        t
        g||fi ddi t        t        t
        g||fi ddi y r   )r   r   r   r   r   r   r   s       rc   r   z!TestCorrelate.test_invalid_shapes
  ss     IIaO##F+IIb!$$V,j)Jq!fJ8IJj)Jq!fJ8IJre   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       y r   r   r   r   r   s       rc   r   z!TestCorrelate.test_invalid_params
  sd    j)Q?j)QuMj)QhOj)QwOj)QwOre   c                 ,   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       y r  r  r  s     rc   r  z"TestCorrelate.test_mismatched_dims#
  sp     	j)aS!HEj)QHEj)aS!EBj)QEBj)aSA3%8j)aS!4re   rC   rD   rI   zdtype differsrK   c                    |j                  g d      }|j                  ddg      }t        t        ||d      |j                  g d             |j                  g d      }|j                  g d      }t        t        ||d      |j                  g d             t        t        ||d	      |j                  g d
             t        t        ||d      |j                  dg             y )NrR   rO   rP   ri   rj   )rP   r  rY   r   )r   rX   rY   r   )rQ   r   rX   rY   rZ   r   rX   )r\   r7   r   r   s       rc   test_numpy_fastpathz!TestCorrelate.test_numpy_fastpath-
  s     JJy!JJ1v	!QV4bjj6MNJJy!JJy!	!QV4bjj6NO	!QV4bjjAT6UV	!QW5rzz2$7GHre   c                     t        j                  g dt              }t        j                  g dt              }t        j                  d      5  t        ||       d d d        y # 1 sw Y   y xY wr  )r   r\   r"  r#  r$  r   r   s       rc   r%  z$TestCorrelate.test_dtype_deprecation:
  sS     JJ)8JJ2&A##*IJ 	aO	 	 	r&  N)r(  r)  r*  r+  r   r   r  r  r#  r-  r.  r%  r/  re   rc   r  r  	
  s     d#
K $
K d#P $P d#5 $5 t9k/:	I ; :	I [[d# $ re   r  z accepts ints, return numpy arrayrk   r   ri   r   behindF
input_sizer'  r|  r  r  r  )marksi'  c                    t         j                  j                  d      }|j                  |      }t	        |dz        }|r*t        j
                  |j                  |      |g      }| }n||d  }|}t        |||       }	t        |j                  |j                  |       }
t        j                  |	      }t        |
|   |       |
j                  |	j                  k(  sJ y )Nr   rU   rj   )r   r   r   r"  rm  concatenater   r   r   argmaxr8   r  )rk   r  r  r_   r  in1offsetin2r   correlationlags	lag_indexs               rc   test_correlation_lagsr  D
  s     ))


"C


j
)CBFnnc11&93?@7 &'lC40KCHHchhT:D		+&IDOX.::*****re   c                     t        j                  t        d      5  t        ddd       d d d        y # 1 sw Y   y xY w)NzMode asdfgh is invalidr   r'  asdfghrj   )r#  r	   r   r   r)  s    rc   "test_correlation_lags_invalid_moder  d
  s2    	z)A	B 2c12 2 2s   4=dt_namer   r   c                   t    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y)TestCorrelateComplexc                     t        |      r#|t        j                  k(  rt        j                  }ddd|j	                  |      j
                     }t        d|z  dz        S )Nr  rQ   )rI  rX   rT   rN   )r9   r   ry  cdoubler  bitsrm  )r^   rW  r_   precs       rc   r  zTestCorrelateComplex.decimalt
  sN    B<B"..0B Arxx|0011t8a<  re   c                 x   t         j                  j                  d       t         j                  j                  d      j	                  |      }|dt         j                  j                  d      j	                  |      z  z  }t         j                  j                  d      j	                  |      }|dt         j                  j                  d      j	                  |      z  z  }t        |j                  |j                  |      t        |j                  |j                  |      z   j	                  |      }|dt        |j                  |j                  |       t        |j                  |j                  |      z   z  z  }|j                  |      |j                  |      |j                  |      }}}|||fS )Nr8  rU   r   r   rj   )	r   r   r  r   r   r   r  imagr\   )r^   rW  rk   r_   r`   ra   r  s          rc   rz  z!TestCorrelateComplex._setup_rank1|
  sH   
		qIIOOB&&r*	R"))//"%,,R000IIOOA%%b)	R"))//!$++B///d3d345;VBZ 	riT::qvvqvvD9: ; 	; JJqM2::a="**S/c1!Syre   c                 v   | j                  |d|      \  }}}t        ||      }t        ||d      }t        ||| j	                  ||             |j
                  |k(  sJ t        ||d      }t        ||j                  |j                  |            | j	                  ||             |j
                  |k(  sJ y )Nr   r  )rz  r  r   r=   r  r   conjro  r^   r  r_   r`   ra   r  rW  rv   s           rc   r  z%TestCorrelateComplex.test_rank1_valid
  s    %%gw;	1cR!aG$!!S$,,r22FGww"}} aG$!!RWWRWWS\%:*.,,r2*>	@ww"}}re   c                     | j                  |d|      \  }}}t        ||      }t        ||d      }t        ||| j	                  ||             |j
                  |k(  sJ y )Nri   r  rz  r  r   r=   r  r   r  s           rc   r  z$TestCorrelateComplex.test_rank1_same
  s]    %%gvr:	1cR!aF#!!S$,,r22FGww"}}re   c                     | j                  |d|      \  }}}t        ||      }t        ||d      }t        ||| j	                  ||             |j
                  |k(  sJ y )Nr   r  r  r  s           rc   r  z$TestCorrelateComplex.test_rank1_full
  s]    %%gvr:	1cR!aF#!!S$,,r22FGww"}}re   c                     t        ||      }|j                  g d|      }|j                  g d|      }t        ||      }t        ||j                  g d      dd       y )Nr   rq   r  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      r   Fr  )r  r\   r   r7   )r^   r  r_   rW  r   krv   s          rc   test_swap_fullz#TestCorrelateComplex.test_swap_full
  s[    R!JJ/rJ:JJ7rJBaOrzzNO5	
re   c                     |j                  g d      }|j                  g d      }t        ||d      }t        ||j                  g d             y )Nr  r  ri   rj   )r  r  r  )r\   r   r7   )r^   r  r_   r   r  rv   s         rc   test_swap_samez#TestCorrelateComplex.test_swap_same
  sB    JJ/0JJ78a(2::&ABCre   rC   notimplementederrorrK   c                    t         j                  j                  ddd      j                  |      }|dt         j                  j                  ddd      j                  |      z  z  }t         j                  j                  ddd      j                  |      }|dt         j                  j                  ddd      j                  |      z  z  }t	        |j
                  |j
                        t	        |j                  |j                        z   j                  |      }|dt	        |j
                  |j                         t	        |j                  |j
                        z   z  z  }|j                  |      |j                  |      |j                  |      }}}t        ||      }t	        ||d      }t        ||| j                  ||      dz
         |j                  |k(  sJ y )	NrU   r   rQ   r   rO   r   rS   r  )r   r   r   r   r   r  r  r\   r  r=   r  r   r  s           rc   
test_rank3zTestCorrelateComplex.test_rank3
  sq   IIOOB1%,,W5	R"))//"a+227;;;IIOOAq!$++G4	R"))//!Q*11':::(166166*+,2F7O 	ri//)AFFAFF2KKLLJJqM2::a="**S/c1R!aF#!!S$,,r22F2JKww"}}re   Tr  c           	         t        j                  t         j                  j                               j	                  |      }|dt        j                  t         j                  j                               j	                  |      z  z  }t        j                  t         j                  j                               j	                  |      }|dt        j                  t         j                  j                               j	                  |      z  z  }t        ||      }t        |j                  |j                        t        |j                  |j                        z   j	                  |      }|dt        j                  t        |j                  |j                         t        |j                  |j                        z         z  z  }|j                  |      |j                  |      }}t        ||d      }t        ||| j                  ||      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       y )
Nr   r   rS   r  rt   F)check_shape              @rO   )r   r  r   r   r   r  r   r  r  r\   r=   r  r   r8   )r^   r  r_   r`   ra   rW  r  rv   s           rc   
test_rank0zTestCorrelateComplex.test_rank0
  s   HHRYY__&'..w7	R"((299??,-44W===HHRYY__&'..w7	R"((299??,-44W===R!(166166*+,2F2J 	rBHHi77&qvvqvv67 8 8 	8 zz!}bjjm1aF#!!S$,,r22F2JKww"}}	1#t,bjj1b9I.J$)	+	2$-rzz)B:K/L$)	+	2$,bjj2q9I.J$)	+re   N)r(  r)  r*  r  rz  r  r  r  r  r  r+  r  r  r/  re   rc   r  r  j
  s[    !
D f%:; <" d#+ $+re   r  c                   T    e Zd Zd Z ed      d        Z ed      d        Zd Zy)TestCorrelate2dc                    t        j                  d      }t        j                  g d      }dD ]  }|j                  |      |j                  |      }}t        j                  |||      }t        t        j                  |||      |j                  |             |dk(  stt        j                  |||      }t        t        j                  |||      |j                  |              y NrP   r  r  rj   r   )r   r   r  r\   r   r>   r   )r^   r_   r`   ra   rk   a_xpb_xpnp_corr_results           rc    test_consistency_correlate_funcsz0TestCorrelate2d.test_consistency_correlate_funcs
  s    IIaLHH]#- 
	@DA

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

> :< w!#a!>#F$4$4T4d$K$&JJ~$>@
	@re   Tr  c           
         t        j                  d      }t        j                  g d      }dD ]  }t        t        j                  t        j                  |g|g|            t        j                  |||             |dk(  sVt        t        j                  t        j                  |g|g|            t        j                  |||              y r  )r   r   r  r>   r  r   r   r   )r^   r_   r`   ra   rk   s        rc   "test_consistency_correlate_funcs_2z2TestCorrelate2d.test_consistency_correlate_funcs_2
  s     IIaLHH]#- 		GD

6+=+=qcA3CG,I !J & 0 0AD AC
 w#BJJv/A/A1#sGK0M %N$*$4$4Q$EG		Gre   c                 0   t        j                  dd      j                  d      }t        j                  dd      j                  d      }t        t        t
        j                  g||fi ddi t        t        t
        j                  g||fi ddi y r   )r   r   r   r   r   r   r   r   s       rc   r   z#TestCorrelate2d.test_invalid_shapes  s     IIaO##F+IIb!$$V,j&"4"4S1vS&'ARSj&"4"4S1vS&'ARSre   c                    t        t        j                  |j                  dgg      |j                  dgg            |j                  dg      dd       t        t        j                  |j                  dgg      |j                  dgg            |j                  dg      dd       t        t        j                  |j                  dgg      |j                  dgg            |j                  d	g      dd       y )
NrS   rt                 F)r  r  r  y      @        rO   y              (@)r8   r   r   r\   r  s     rc   test_complex_inputz"TestCorrelate2d.test_complex_input  s    **2::se+<bjj2$>PQ

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

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

C5)u%	Qre   N)r(  r)  r*  r  r+  r  r   r  r/  re   rc   r  r  
  sD    @  d#G $G  d#
T $
TQre   r  )rE   zlfilter_zi is incompatiblec                       e Zd Z edd      d        Zd Zd Zej                  j                  ddd	g      d
        Z
y)TestLFilterZITzlist inputs are numpy specificr|   c                 b    |j                  ddg      }t        g dg d      }t        ||       y )Nr  rp  r  r.  ro  r  rp  r*  r\   r   r=   )r^   r_   zi_expectedr  s       rc   test_array_likezTestLFilterZI.test_array_like"  s+    jj#t-)9:!"k2re   c                     |j                  g d      }|j                  g d      }|j                  ddg      }t        ||      }t        ||       y )Nr  r  r  rp  r  )r^   r_   r`   ra   r  r  s         rc   rd   zTestLFilterZI.test_basic(  sG    JJ'(JJ'jj#t-1!"k2re   c                     |j                  g d      }|j                  g d      }t        ||      }t        d|z  d|z        }t        ||d       y )N)ro  r   rP   )r  rS   r   rT   r-  r  )r\   r   r7   )r^   r_   ra   r`   r  zi2s         rc   test_scale_invariancez#TestLFilterZI.test_scale_invariance/  sL     JJ{#JJ{#A1ac"Su-re   r   r   r   c                     t        ||      }|j                  d|      }|j                  dg|      }t        j                  ||      j
                  |k(  sJ y )Nr   r   rS   )r  r  r\   r   r   r   )r^   r   r_   ra   r`   s        rc   r  zTestLFilterZI.test_types8  sU    E"HHaH&JJs%J(  A&,,555re   N)r(  r)  r*  r+  r  rd   r  r#  r-  r  r  r/  re   rc   r  r    sS     d+KL3 M3
3. [[Wy)&<=6 >6re   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y)TestFiltFilttfNc	           
         | j                   dk(  r?t        | \  }	}
|j                  |	      |j                  |
      }
}	t        |	|
||||||      S | j                   dk(  r(t	        | }|j                  |      }t        |||||      S y )Nr   sos)filtfilt_kindr!   r\   r   r"   r)   )r^   zpkru   r  r  padlenr   irlenr_   ra   r`   r  s               rc   r   zTestFiltFilt.filtfiltD  s    %3<DAq::a="**Q-qAAq!T7FFEJJ5(3-C**S/CsAtWf== )re   r   negative stridesrK   c                 :   t        |      r%| j                  dk(  rt        j                  d       t	        g dg d      }| j                  ||j                  d      |      }t        |      rdnd}t        ||j                  d|j                  	      |
       y )Nr  sosfilt works in-placerK   rR   rZ   r)  gA:)>g6{=r   r   )
r;   r  r#  r  r+   r   r   r<   r7   r   )r^   r_   r  r   r   s        rc   rd   zTestFiltFilt.test_basicO  su    ":$,,5KK78Y	*mmC22m6bkdxRYYrY<4Hre   c                 *   t        |      r%| j                  dk(  rt        j                  d       d}|j	                  dd|dz         }|j                  dt        j                  z  |z        }|j                  d	t        j                  z  |z        }||z   }t        d
dd      }t        j                  |d         j                         }d}	t        t        j                  t        j                  |	      t        j                  |      z              }
| j                  |||
|      }t        j                  ||z
        j                         }|dk  sJ |j                  t        j                   |||z   g            }| j                  |||
d|      }|j"                  |j"                  k(  sJ t        j                  ||z
        j                         }|dk  sJ | j                  ||j$                  |
d|      }t'        ||j$                         y )Nr  r	  rK     r   r  rS   rU   i  r         ?r  r  r   )r  r_   r   r  r  r_   )r;   r  r#  r  r   r  r   r0  r    r3  r1  rm  ceillogr   r\   vstackr  r  r8   )r^   r_   r6  r	  xlowxhighru   r  repsr   rv   errx2dy2dy2dts                   rc   	test_sinezTestFiltFilt.test_sineY  s   ":$,,5KK78KK3q)vvebeema'(w*+5LQe,FF3q6N  sbffQi/01 MM#qrM2ffQX""$Tzz jjD$,#789mmCQQ2m>yyCII%%%ffS4Z $$&Tzz }}S#%%b}ATVV$re   c           
         t        |      r%| j                  dk(  rt        j                  d       t	        j
                  d      j                  ddd      }|j                  |      }t        dd	d
      }| j                  ||dd|      }| j                  ||j                  t	        j                  |dd            dd|      }t        ||j                  t	        j                  |dd                   | j                  ||j                  t	        j                  |dd            dd|      }t        ||j                  t	        j                  |dd                   y )Nr  r	  rK   g     @rU   r  rZ   rN   r  r  r  r   r  rS   rT   )r;   r  r#  r  r   r   r   r\   r    r   r  r8   )r^   r_   ru   r  rQ  rR  r  s          rc   	test_axiszTestFiltFilt.test_axis  s"   ":$,,5KK78 II()11"b"=JJqMQe,]]3!!];]]BKK1a01!!  
 	BJJr{{2q!'<=>]]BKK1a01!!  
 	BJJr{{2q!'<=>re   Tz-python scalars in array_namespace are np-onlyr|   c                     | j                   dk7  ry t        j                  |j                  ddg      d|j	                  d|j
                              }t        ||j	                  d|j
                        dd       y )Nr   r*  rS   rU   r   r   r   )r  r   r   r\   r   r   r7   )r^   r_   r   s      rc   test_acoeffzTestFiltFilt.test_acoeff  si     %ooJJBx !RYYrY%D
 	RYYrY<5uUre   z_filtfilt_gust is np-onlyc           
         | j                   dk7  rt        j                  d       |j                  ddg      }|j                  dg      }|j                  ddg      }t	        |||      \  }}}t        |d   d|d   z  d	|d
   z  z          t        |d   d	|d   z  d|d
   z  z          t        ||j                  |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             y )Nr   $gust only implemented for TF systemsr  ro  r*  r  r   r+  r   rS         ?r  )r  r#  r  r\   r2   r7   )r^   r_   ru   ra   r`   rv   z1z2s           rc   test_gust_simplezTestFiltFilt.test_gust_simple  s%   %KK>? JJSz"JJuJJT{#"1a+	2r1s1Q4x#ad(231s1Q4x#ad(23

BqEDAJ$6ad$BU1Q4Z$O$(AJA$6qt$Cd1Q4i$O$Q R	
re   c                     | j                   dk7  rt        j                  d       |j                  d      }d}d}t	        |||d      }||z  dz  |z  }t        ||       y )	Nr   r  rZ   rq  ro  gustr   rT   )r  r#  r  r   r   r7   )r^   r_   ru   ra   r`   rv   r   s          rc   test_gust_scalarszTestFiltFilt.test_gust_scalars  sc     %KK>? IIbMQ1V,aC!8a<8$re   )r   oddNr  NN)r(  r)  r*  r  r   r+  rd   r  r  r  r#  r&  r/  re   rc   r  r  @  s    M>B.2	> g&89I :I g&89#% :#%J g&89? :?$ dLNVNV d+FG
 H
  dLN%N%re   r  zLsosfiltfilt directly sets shape attributes on arrays which dask doesn't likec                   J    e Zd ZdZ edd       edd      d               Zy)	TestSOSFiltFiltr  rI   r	  rK   r   r  c                    t         j                  j                  d      j                  d      }|j	                  |      }t        dd      D ]u  }t        j                  |dd      }t        | \  }}t        | }t        |j                  |||f      \  }}}t        |||      }t        ||      }	t        ||	dd	| 
       w y)z1Test equivalence between sosfiltfilt and filtfiltr   r  rS   rQ   ffffff?r  r  r-  zorder=)r   err_msgN)r   r   r   r   r\   r   r   r    r!   r"   rv  r   r)   r7   )
r^   r_   ru   r  r  ra   r`   r  rv   y_soss
             rc   test_equivalencez TestSOSFiltFilt.test_equivalence  s     II!!!$**40JJqM1a[ 	LE--tE:C3<DAq3-CBJJAs4IAq#Aq!AQ'EAu5F5':JK	Lre   N)r(  r)  r*  r  r+  r.  r/  re   rc   r)  r)    s6     Mk*BCg&89L : DLre   r)  c                    d }t        t        |      t        |             dz
  }t        | |      }t        j                  |d| j                         |z  || d j                         |z  f      }t        ||| ||fdddddd		      }|\  }}	}
}}|d
kD  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                 R   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.rS   Nr  r   r   rT   )r1  rU  r   r   sum)icsra   r`   ru   mz0fz0brN  y_fby_by_bfvalues               rc   filtfilt_gust_opt_funcz1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_func  s    AA!#"1g!"gaA#&q)q!S2Y3/24R48aAddG,Q/"5q!SS)!,ta'(re   rS   Nr
  r-  r  TF)r  xtolftolmaxfunmaxiterfull_outputdispr   z3minimization failed in filtfilt_gust_opt: warnflag=r   r  )	r1  rU  r   r   r  r  r   r.  r   )ra   r`   ru   r:  r3  r  r2  ry  optfoptniterfuncallswarnflagr4  r5  r7  rv   s                    rc   filtfilt_gust_optrF    s    	CFCFaA	Aq	B
..!BQ%**,r/1aRS6;;=+;<
=C(#Q1I5"0F ,2(Cuh!|A(L
 	
 bq'C
ab'C !Q$B$C
(
+DbD
1C1cc"1%Ac3;re   c                 n   t         j                  j                  d       t        j                  j                  | }t	        | |||d|      }t        | ||||      \  }}}	t        j                  ||d      }
|
j                  d d }t        j                  |
      }t        t        |      t        |             dz
  }t        j                  ||fz         }t        j                  ||fz         }t        |D cg c]  }t        |       c} D ]  }t        | ||
|         \  ||<   ||<   ||<   ! t        j                  |d|      }t        j                  |d|      }t        j                  |d|      }t        ||dd	       t        ||dd	       t        ||dd	       t        |	|dd	       y c c}w )
Nr  r%  )r  r   r  )r  r  r   rS   r   r  r   )r   r   r  r   r   r2   r  r  
empty_liker1  rU  r  r   r   rF  r7   )ra   r`   r  r  r  ru   rv   ygzg1zg2xx	out_shaper  r3  zo1zo2r   indxs                     rc   check_filtfilt_gustrQ    s   IINN3
		A 	AqtF%@A "!QEBLBS
 
Qb	!B"I	r	BCFCFaA
((9t#
$C
((9t#
$CI6q%(67 K):1aD)J&4#d)SYK	RT	"B
++c2t
$C
++c2t
$CAr40BD1C4d3C4d3 7s   8F2rU   c                    dD ]R  }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|
j                         v rd	|
j                         v rJ  d
}dD ]M  }t        t         |      st        j                  ||      }|j                         }t        |||      d	k(  rMJ  t        j                  dgt         j                        }|j                         }t        |||      d	k(  rSJ  y )Nr  )rS   rT   )r   rQ   r   rj   T)rk   measure>   r   r   r   r   rU   
complex256
complex192r   l         @ )r   r   r   r   r  dictkeysrn  rv  r  r  r   )r_   rk   r  r   r  true_methodru   r?  r   
method_trytimesnot_fft_conv_supps               rc   test_choose_conv_methodr]  &  sb    * ? 	FD .Aq+		1$+/A		1$+/A'148F[((( 21adD QJ!2222eT***EJJL(X-EEE	F != 	Gr,-GGA%67FFH)!QT:hFFF		G HHeWBHH-FFH!!QT2h>>>/?re   c                     t        j                  g dt              }t        j                  g dt              }t        j                  d      5  t        ||       d d d        y # 1 sw Y   y xY wr  )r   r\   r"  r#  r$  r   )r_   r`   ra   s      rc   "test_choose_conv_dtype_deprecationr_  D  sT     	

%V4A


.f=A			&E	F !1a ! ! !r&  c                 8   dD ]  }t        d      t        d      g}t        d      t        d      g}t        |||      dk(  sJ d}d	D ]M  }t        t        |      st        j                  ||
      }|j                         }t        |||      dk(  rMJ   y )Nr  rN   rT   rS   rO   rj   r   rU   rT  r   )r   r   rn  r   rv  r  )r_   rk   ru   r?  r   r\  s         rc   test_choose_conv_method_2ra  N  s     * 
GQZ$QZ$!!QT2h>>>!= 	Gr,-GGA%67FFH)!QT:hFFF		G
Gre   c           	      <   t        j                  ddddd      \  }}}d}t        j                  t        j                  |            }t        t        j                  t        j                  |      t        j                  |      z              }t        j                  j                  d       t        |||      \  }}d |fD ]?  }	d	|z  }
t        |||
fd
|	       t        d      D ]  }g d}|
||<   t        |||||	        A d|z  dz
  }t        |||fd
|       y )NrN   {Gz?x   gffffff?r  r  r
  r  rP   r   r   rT   r  )r   ellipr   r1  r3  rm  r  r  r   r  r!   rQ  r   )r_   rw   pr  r  r  approx_impulse_lenra   r`   r  
signal_lenr  r  lengths                 rc   test_filtfilt_gustrj  ^  s    ll1dC>GAq! C
rvvayARWWRVVC[266!9%<=>IINN3!Q?DAq*+ 
:++
 	Aq:-E: !H 	:DE$E$K1eT59	:
: !!B&F1vi,>?re   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)TestDecimatec                     t        j                  d      }t        t        t        j
                  |dd       t        t        t        j
                  |dd       y )NrZ   r*  rS   )qr   rT   )r   r   r   r  r   decimater^   r_   ru   s      rc   test_bad_argszTestDecimate.test_bad_args  s7    IIbMi!sa@i!qC@re   c                     t        j                  d      }t        j                  |dddd      j	                         }t        ||d d d   j                  t                     y )NrZ   rT   rS   iirFr   ftype
zero_phaser   r   r   ro  roundr8   r   r  r^   r_   ru   rv   s       rc   test_basic_IIRzTestDecimate.test_basic_IIR  I    IIbMOOAqAUuEKKM1SqS6==/0re   c                     t        j                  d      }t        j                  |dddd      j	                         }t        ||d d d   j                  t                     y )NrZ   rT   rS   firFrt  rw  ry  s       rc   test_basic_FIRzTestDecimate.test_basic_FIR  r{  re   c                     t        j                  d      }t        j                  |ddd      }|j                  dk(  sJ t        j                  |ddd      }|j                  dk(  sJ y )	N)r   r   rT   r   F)r  rv  )r  r   rS   )r   r  )r   r  r   ro  r  )r^   r_   rw   d0d1s        rc   
test_shapezTestDecimate.test_shape  s\    HHX__Qe<xx8###__Qe<xx8###re   c                     t               5 }|j                  t        d       | j                  dd       d d d        y # 1 sw Y   y xY w)NBadly conditioned filterr}  Fr   rv  r   rS  r,   _test_phaseshiftr^   r_   rU  s      rc   test_phaseshift_FIRz TestDecimate.test_phaseshift_FIR  sE      	BCJJ(BC!!5!A	B 	B 	B	   *>Ac                     t               5 }|j                  t        d       | j                  dd       d d d        y # 1 sw Y   y xY w)Nr  r}  Tr  r  r  s      rc   test_zero_phase_FIRz TestDecimate.test_zero_phase_FIR  sE      	ACJJ(BC!!4!@	A 	A 	Ar  c                 *    | j                  dd       y )Nrs  Fr  r  r  s     rc   test_phaseshift_IIRz TestDecimate.test_phaseshift_IIR  s    Uu=re   c                 *    | j                  dd       y )Nrs  Tr  r  r  s     rc   test_zero_phase_IIRz TestDecimate.test_zero_phase_IIR  s    Ut<re   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                  |j                  d      z  }|D ]X  }	||	z  }
t        j                  |	|z  dz         t        |	      z  }t        j                  dt         j
                  z  |d d t         j                  f   z  |z        t        j                  j                  |j                  d      z  }|d	k(  r5d
}t        j                  t        j                  |dz   d|
z  d      d      }nU|dk(  rPd}dt         j
                  z  |
z  }t        j                  t        j                  |d|t         j
                  z         }|du r^t        j                  j                  |j                   ||z  dz  t         j
                  z        \  }}|t        j"                  |      z  }nt        j$                  |      }t        j&                  |j(                  |
|      }t        j*                  |j-                         |z  d      }|t        j"                  |      z  }|d|	z  k  }t        j.                  |j-                         |z        |   }t1        |t        j2                  |      dd       [ y )Nrd  )r  r  r   rH  r'  rS   皙?rT   rt   皙?r}  r   r  r  r  rs  r   g?Fru  rv  r   r  r*  r   rl  )r   r   r  r  r  r0  r/  r   windowstukeyr   dltir%  cheby1freqzr  denr3  rO  ro  r  r1  r  angler7   r  )r^   r   rv  r6  r7  t_totr	  r8  r   r9  rn  r:  d_tosr   systemwc_h_respsr<  	h_resampssubnyqry  s                         rc   r  zTestDecimate._test_phaseshift  s   #IId5jl#eDk1 "S(1,VVFRUUNU1bjj=%99A=>~~##AFFC01   #	2GA99WU]1_-g>DVVFRUUNU1bjj=-AADHI~~++DIIs;<E V]]1q5"q&:C&EFHJ5Yq[fmmAtRX&FG U"#\\&**fjj*/*Q,ruu*<>
7266'?*,,u-1F3=?I uzz|i7bAI	**IS[(F XXgllnY67?FFBMM&$9!%D2E#	2re   c                    d}d}t        j                  |      |z  }t        j                  d|z        t        j                  dt         j                  z  |dz  z  |z        z  }t        t         j                  j                  |      dd       t        j                  |d	d
      }t         j                  j                  |      dk  sJ y )Ng      Y@r  ro  rT   g      >@r  r   r  r   r}  )ru  rc  )
r   r   sqrtr  r0  r7   linalgnormr   ro  )r^   r_   sfreqr   r	  ru   x_outs          rc   test_auto_nzTestDecimate.test_auto_n  s     IIaL5 GGBFObffQY%#+%>%BCC		q)2D92U3yy~~e$t+++re   c                     t        j                  t        j                  dt        j                        d      }t        t        j                  |            rJ y )Nr  r   rU   )r   ro  r   rv  r   r   isnanrp  s      rc   test_long_float32zTestDecimate.test_long_float32  s<     OOBGGF"**=rBrxx{####re   c                     t        j                  t        j                  dt        j                        d      }|j
                  j                  t        j                  k(  sJ y )Nr'  r   rU   )r   ro  r   rv  r   r   r  r   rp  s      rc   test_float16_upcastz TestDecimate.test_float16_upcast  s;    OOBGGCrzz:B?ww||rzz)))re   c                    d}d}d}t        j                  ddt        j                  z  |z  dz  d|      \  }}}|j	                  t
              t        j                  dt        j                  z  |z  |z        z  }|j	                  t
              t        j                  dt        j                  z  |z  |z        z  }t        j                  |||      }t        j                  d      |z  }	t        j                  dt        j                  z  |z  |	z        d	t        j                  d
t        j                  z  |z  |	z        z  z   }
t        j                  |
d|d      }t        j                  g t        j                  |||      |
 d d d   }t        ||       t        j                  |
d|d      }t        j                  g t        j                  |||      |
 d d d   }t        ||dd       y )Nr  rP        @@rT   r  )r  fsrt   r  r*  r  Fr  Tr
  vIh%<=r   )r   r    r   r0  r   rn  r  r  r   ro  r   r!   r8   r   r7   )r^   r_   fcentrefwidthr  rw   rf  r  r  r	  r   ynzpynzprefyzpyzprefs                  rc   test_complex_iir_dltiz"TestDecimate.test_complex_iir_dlti  s    --1RUU76>!#3EbI1aHHWrBEEzG';B'> ??HHWrBEEzG';B'> ??Q1%IIcNR VVBJ(1,-RVVC"%%K'1A5667 q!6eD.. $&--1a"8 $!"$$'aC) 	g&ooa&TB $&--1a"8 $!"$$'aC) 	V%e<re   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        ||       y )Nr  rP   r  r  rT   )r  rt   r   rS   r  r*  r  Fr  )r=  r>  r'  Tr  )r   r%  r   rootsr  r0  polyr  r   ro  upfirdnr8   r  )r^   r_   r  r  r  numtapsbbasezbasezrotbzr  r	  r   r  r  r  r  s                    rc   test_complex_fir_dltiz"TestDecimate.test_complex_fir_dlti  sS    gvaxB7 rvvb255j7225661X%R#IIcNR VVBJ(1,-RVVC"%%K'1A5667 q!6eD..Q115ds;g&ooa&TB%%aAb9V$re   N)r(  r)  r*  rq  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r/  re   rc   rl  rl    sM    A
1
1
$B
A
>=/2b
,$*
=@"%re   rl  z)jax arrays do not support item assignmentc                   f    e Zd Zd Zd Zd Zej                  j                  dddg      d        Z	y)	TestHilbertc                     |j                  dg      }t        t        t        |       |j	                  d      }t        t        t        |d       y )Nr   r  r   r  )r\   r   r   r   r   rp  s      rc   rq  zTestHilbert.test_bad_args9  s9    JJ
|$j'1-IIcNj'12re   c           	      J   d}|j                   }|j                  dd|z  |dz  |j                        }|j                  |      }|j	                  |      }|j                  d|z        }|j	                  d|z        }|j                  ||||g      }	t        |	      }
|j                  |
      }|j                  |j                  |
      |j                  |
            }|j                  |
      }t        ||	|       t        ||j                  |	j                        |       t        |dd df   |j                  | dz  |dz  |dz  |j                        |       t        |dd df   |j                  d||dz  |j                        |       t        |dd df   |j                  | dz  |dz  |dz  |j                        |       t        |dd df   |j                  d||dz  |j                        |       t        |j                  |
dd d f         ||       y )	Nr  r   rT   r  r   rS   r  rN   )r0  r   r   r  r  r  r   r3  atan2r  r  r>   rv  r  )r^   r_   r  r0  r	  rM  a1a2a3r`   r?  h_absh_angleh_reals                 rc   test_hilbert_theoreticalz$TestHilbert.test_hilbert_theoretical?  s   UUIIaRcI<VVAYVVAYVVAE]VVAE]HHb"b"%&AJq	((2771:rwwqz2 	FAw/E277177#3W= 	GAttG,IIrcAgrAvrCxrzzIR#	%
 	AttGbii2rCxrzziJG	U 	GAttG,IIrcAgrAvrCxrzzIR#	% 	AttGbii2rCxrzziJG	U 	BGGAadG,b':re   c                    |j                  |j                  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      }|j                  |      }t        |dd d f   |dd       y )Nr|  r   )rN   rQ   r   r  r   r  r  )r  r  )rN   r  )r  rN   )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   r8   r  r>   r  r   r  r\   )r^   r_   r`   aaaana0hilbs         rc   test_hilbert_axisNzTestHilbert.test_hilbert_axisNi  s    JJryy2::y6?QR !,bdd3GAadG,bAh; a2B'yyG###qssbq)//7:::  F G( F#C1Ivr>Jre   r   r   r   c                     t        ||      }|j                  d|      }|j                  t        |            j                  |k(  sJ y )Nr   r   )r  r  r  r   r   r  s       rc   test_hilbert_typeszTestHilbert.test_hilbert_types  sB    E"88AU8+wwwx()//5888re   N)
r(  r)  r*  rq  r  r  r#  r-  r  r  r/  re   rc   r  r  5  s>    3(;T$KL [[Wy)&<=9 >9re   r  c                   z    e Zd Z edd      d        Zd Zej                  j                  dddg      d	        Z	y
)TestHilbert2Tlist inputs are numpy-specificr|   c                 &    t        g dg dg       y )NrR   r   )r   r  s     rc   r  zTestHilbert2.test_array_like  s    )Y'(re   c                    |j                  dgg      }t        t        t        |       |j	                  |j                  d      d      }t        t        t        |       |j	                  |j                  d      d      }t        t        t        |d       t        t        t        |d       t        t        t        |d	       y )
Nr   rF  r   r   rs  r   r  )rT   r   )rT   )r\   r   r   r   r   r   rp  s      rc   rq  zTestHilbert2.test_bad_args  s    JJ~&j(A. JJryy}i0j(A. JJryy}f-j(A3j(A8j(A6re   r   r   r   c                     t        ||      }|j                  d|      }|j                  t        j                  |            j
                  |k(  sJ y )N)rT   rX   r   )r  r  r  r   r   r   r  s       rc   test_hilbert2_typesz TestHilbert2.test_hilbert2_types  sF    E"88G581wwvx01775@@@re   N)
r(  r)  r*  r+  r  rq  r#  r-  r  r  r/  re   rc   r  r    sP     d+KL) M)7 [[Wy)&<=A >Are   r  c                      e Zd ZdZed        Zd Z edd      d        Z edd      e	j                  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                  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                  j                  d)g d*g d+g      d,               Zd- Zy.)/TestEnvelopez4Unit tests for function `._signaltools.envelope()`. c                 l    t        |      |j                  k(  rdddnddd}	 t        | |fi |d|i y )Nr-  rl  r   r,  )rA   r   r7   )r  r  rT  r_   a_r_tols        rc   r  zTestEnvelope.assert_close  sF     'r*bjj8 "51!%t4 	
 	H@7@C@re   c                    t        j                  t        d      5  t        t	        j
                  d      d       ddd       t        j                  t        d      5  t        |j                  d      d	       ddd       d
D ]e  }dj                  t        t        |            }t        j                  t        d| d      5  t        |j                  d      |       ddd       g t        j                  t        d      5  t        |j                  d      d       ddd       dD ]B  }t        j                  t        d      5  t        |j                  d      |       ddd       D t        j                  t        d      5  t        |j                  d      d       ddd       y# 1 sw Y   |xY w# 1 sw Y   IxY w# 1 sw Y   TxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)z[For `envelope()` Raise all exceptions that are used to verify function
        parameters. z'Invalid parameter axis=2 for z.shape=.*r   rN   rT   r  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rN   r   rS   )r.  )r   ro  )Nro  z, zbp_in=\(z\) isn't a 2-tuple of.*rO   )bp_inz)n_out=10.0 is not a positive integer or.*r(  )rL  ))r   rN   r  )r   rU   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*	undefinedresidual)	r#  r	   r   r   r   rv  joinrv  r  )r^   r_   r  tss       rc    test_envelope_invalid_parametersz-TestEnvelope.test_envelope_invalid_parameters  s    ]]:!KM 	)RWWQZa(	) ]]:!JL 	.RWWV_1-	. 6 	2E3sE?+Bz(04K%LN 2 512 2	2 ]]:!LN 	, RWWQZs+	, 0 	2Ez%NP 2512 2	2 ]]:-MN 	7RWWQZ+6	7 	7)	) 	)	. 	.
2 2	, 	,
2 2	7 	7sG   !F7 GG
GG*G67GGG	G'*G3	6G?rI   r  rK   c           
      d   t        |      }||j                  k(  r|j                  n|j                  }|j	                  g d|      }|j	                  g d|      }t        j                  |      }|j                  d   }|j                  t        |ddd            \  }}	| j                  t        j                  |      |j	                  g d	|      d
|       | j                  t        j                  |	      |j	                  g d|      d|       |j                  t        |ddd            \  }
}| j                  |
dz  |d|       | j                  ||	d|       |j                  t        |dddd|z              \  }}| j                  |ddd   |d|       | j                  |ddd   |	d|       |j                  t        |ddd            \  }}| j                  ||d|       | j                  t        j                  |      |j	                  g d|      d|       t        |ddd      }| j                  ||d|       |j	                  |d      }|ddxxx dz  ccc t        j                  ||      }| j                  |j                  |      |d|       |j                  t        |ddd            \  }}| j                  ||j                  ||      d |       | j                  t        j                  |      |j	                  ||      d!|       y)"zEEnsure that the various parametrizations produce compatible results. )rr  rT   rT   rN   r   r   )rr  r   r   rQ   r   r   r   r   r   r  allTr  squaredrO   rT   r   r   r   Envelope calculation errorrT  r_   )rO   r   r   rN   r   Residual calculation errorFrT   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrN   )r  r  rL  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorlowpassz/`residual='lowpass'` envelope calculation error)rO   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorr  rS   )r   zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)rA   r   r   r   r\   r  irfftr  unstackr   r  rfftifftr  r   r   )r^   r_   r  r  ZZr_arw   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                        rc   test_envelope_verify_parametersz,TestEnvelope.test_envelope_verify_parameters  s6     ##rzz1r||r}}JJ(J5zz4DzALLOGGAJ jj!VeT!RSt&++e,**_D*A:r 	 	C 	&++d+**_D*A:r 	 	C ZZFUE RS
d$'5S 	 	! 	$S 	 	! jjQAaCH
t 	%!*eHR 	 	Q$ss)THR 	 	Q jj!ViQU!VWt%OTV 	 	X&++d+**_D*AOTV 	 	X FT4@%Jr 	 	S jjj&AB1kk##"''#,?B 	 	Hjj#vt!TUt%5$!7Br 	 	K&**T*BJJt4J,HBr 	 	Kre   z@               Z,        bp_in,     Ze2_desired,      Zr_desired)rS   r   rT   rT   r   )rS   Nr  rS   r   r   r   r   )rO   r   rT   r   r   )r   Nr  )rO   r   r   rT   r   NN)r   r   rT   rT   r   r  )rT   r   r   r   r   )r   r   r   rT   r   )rO   r   rT   rT   r   )rN   )rO   r   rN   rO   r   )NrS   )r   r   rN   rO   r   r  c                    |j                  ||j                        }|j                  ||j                        }|j                  ||j                        }t        j                  |      }|j	                  t        ||dd            \  }}|j	                  t        ||dd            \  }	}
d |||	|
fD        \  }}}}|j                  ||j                        }|j                  ||j                        }| j                  ||d|       | j                  ||d	|       |d
   d||d
   d | j                  ||d|       | j                  ||d|       y)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   F   K   | ]  }t        j                  |        y wr   r  r  r^  z_s     rc   r`  z:TestEnvelope.test_envelope_real_signals.<locals>.<genexpr>2  s     !Ub&++b/!U   !z+Envelope calculation error (residual='all')r  z+Residual calculation error (residual='all')rS   Nr   z/Envelope calculation error (residual='lowpass')z/Residual calculation error (residual='lowpass'))r\   r   r  r  r  r   r   r  )r^   r  r  Ze2_desired
Zr_desiredr_   rw   ze2zrze2_lpzr_lpZe2ZrZe2_lpZr_lps                  rc   test_envelope_real_signalsz'TestEnvelope.test_envelope_real_signals  sj   ( JJq

J+jjBJJj?ZZ
"**Z=
LLO**XaMNR

8AuyRV#WX!US"fe<T!URjjBMMjBZZ
"--Z@
#{KPR 	 	T"jKPR 	 	T 8$%JuQxy!&+OTV 	 	X%OTV 	 	Xre   zG               Z,        bp_in,         Ze2_desired,         Zr_desired)r   rP   r   rP   r   rP   r   rU   r   rP   )rS   rP   r   rP   rT   r   rT   rS   r   r   r   rT   )rS   rT   rQ   r   rQ   rN   )r   rQ   r   rZ   r   rQ   )rS   rT   r   r   r   rN   c                    |j                  ||j                        }|j                  ||j                        }|j                  ||j                        }t        j                  t        j
                  |            }|j                  t        ||dd            \  }}d ||fD        \  }	}
| j                  |	|d|       | j                  |
|d|       y	)
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   l   K   | ],  }t        j                  t        j                  |             . y wr   r  fftshiftr   r  s     rc   r`  z=TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>U  s!     Gr6??6::b>2Gs   24r  r  r  N)	r\   r   r   r  r  	ifftshiftr  r   r  )r^   r  r  r  r  r_   rw   r  r  r  r  s              rc   test_envelope_complex_signalsz*TestEnvelope.test_envelope_complex_signalsB  s     JJq

J+jjBMMjBZZ
"--Z@
KK((+,**XaMNRGc2YGR#{:r 	 	C"j:r 	 	Cre   c                    t        |      }||j                  k(  r|j                  n|j                  }t	        j
                  |j                  g dg dg|            }|j                  g dg dg|      }|j                  g dg dg|      }|j                  t        |dd	
            \  }}|j                  t        |j                  dd
            \  }	}
d ||	j                  ||
j                  fD        \  }}}}| j                  ||d|       | j                  ||d|       | j                  ||d|       | j                  ||d|       y)z.Test for multi-channel envelope calculations. )r  r   rT   rT   r   )r   r   rO   rO   r   r   r  )r   r   r   r   r   r
  )r   r   r   r   r   TrS   )r  r  r   c              3   F   K   | ]  }t        j                  |        y wr   r  r  s     rc   r`  zCTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>i  s     OFKKOOr  2d envelope calculation errorr  2d residual calculation error"Transposed 2d envelope calc. error"Transposed 2d residual calc. errorN)rA   r   r   r   r  r  r\   r  r   r  r  )r^   r_   r  r  rw   r  r  r  r  ye2TyrTr  Ye2r  Yrs                  rc   #test_envelope_verify_axis_parameterz0TestEnvelope.test_envelope_verify_axis_parameter\  sK     ##rzz1r||r}}LL%6$HPTUVjj/3C!D'+ ! -ZZ/ B$ZO
**XaA>?RJJxTBC	cOsDFFB6NOS"b#{0OTVW"j/NSUV"F2 	 	
 	
 D 	 	
re   c                    t        |      }||j                  k(  r|j                  n|j                  }|j	                  g dg dg|      }t        j                  t        j                  |d            }|j	                  g dg dg|      }|j	                  g dg dg|      }t        d	d
d      }|j                  t        |fddi|      \  }	}
|j                  t        |j                  fddi|      \  }}d |	|j                  |
|j                  fD        \  }}}}| j                  ||d|       | j                  ||d|       | j                  ||d|       | j                  ||d|       y)zBTest for multi-channel envelope calculations with complex values. )r  rP   r   rP   rT   )rS   rU   r   rU   rT   r   rS   r  r  )r  r   rH  r   r  r   r  r  T)r  r  r  r  r   c              3   p   K   | ].  }t        j                  t        j                  |      d        0 yw)rS   r  Nr#  r  s     rc   r`  zKTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>  s0      @ " #OOFJJrNCC @s   46r)  r  r*  r+  r,  N)rA   r   r   r   r\   r  r  r%  rW  r  r   r  r  )r^   r_   r  r  inprw   Ze2_desZr_deskwr  r  r-  r.  r  r/  r  r0  s                    rc   +test_envelope_verify_axis_parameter_complexz8TestEnvelope.test_envelope_verify_axis_parameter_complext  sv     ##rzz1r||r}}jj+->?tjLKK((156**.0BDD*Q_o>dK%>**Xa6a6267RJJx:!:r:;	c@'*DFFB&>@S"b 	#w,KPRS"f*IbQC 	 	
 	"f+OTVWre   X)rO   r   r   rS   rT   )rO   r   r   rT   rS   rT   c                     |j                  ||j                        }t        j                  |      }|j	                  t        |            }t        |dd      }| j                  ||d|       y)z0Compare output of `envelope()` and `hilbert()`. r   r  Nr  z!Hilbert-Envelope comparison errorr  )r\   r   r  r  r3  r   r   r  )r^   r9  r_   ru   e_hile_envs         rc   test_compare_envelope_hilbertz*TestEnvelope.test_compare_envelope_hilbert  s`     JJq

J+LLOwqz"L48%,OTVWre   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                  |j                        d       y
)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   rQ   )r  r  )rL  r  r   r-  r   r   N)
r  r  r   r  r   r7   r   r  r   r   )r^   x4x6y6y6_resz6z6_ress          rc   test_nyquistzTestEnvelope.test_nyquist  s     \\)$__RQ'bE:
Fb2gQ?
FBHHQKe4/BHHQbhh7eD		"(( 3%@re   N)r(  r)  r*  __doc__staticmethodr  r  r+  r	  r#  r-  r  r  r&  r1  r8  r=  rE  r/  re   rc   r  r    s   >A A76 k*AB8K C8Kt k*AB[[J
i/	J
i/	J
</	J
/	J
/	J
i/	J
i/	J	LMXM CXB k*AB[[Q
<,<	Q
,<	Q
)<>P	Q	C CC& k*AB
 C
. k*ABX CX, k*AB[[S?4F"GHX I CXAre   r  c                   x    e Zd Zedd       Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestPartialFractionExpansionc                 <   t        j                  |      }t        j                  |      }t        j                  t        |d d d f   |z
        t        | d d d f   |z
              }t	        |      \  }}t        ||   ||   |       t        | |   ||   |       y )Nr  )r   r\   hypotr3  r   r>   )r  rf  r_truep_truer  distancerowscolss           rc   assert_rp_almost_equalz3TestPartialFractionExpansion.assert_rp_almost_equal  s    F#F#88C!T'
V 34!T'
V 346 +84
dAdGVD\7CAdGVD\7Cre   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
             y )NrR   r  rN   r   )rT   rT   rN   rS   )rS   rS   rS   rN   rT   )rS   rS   rS   rT   rT   )rS   rS   rS   rT   rT   rN   T)include_powersrQ   )rS   rS   rT   rT   rN   )rS   rT   rT   rN   )rS   rS   rS   rT   rN   rO   rP   )r3   rU  r>   r   r  )r^   r_   factorsr  s       rc   test_compute_factorsz1TestPartialFractionExpansion.test_compute_factors  sB   (I>7|q   GAJ	(:;GAJ(=>GAJ(@AD"''*<"=>(I8<>7|q   GAJ(@AGAJ(=>GAJ	(:;GAJ(@AGAJ(=>GAJ(@AD"''*<"=>re   c                 `    t        g ddd      \  }}t        |g d       t        |g d       y )N)r  gjt?g?5^I?ro  g/$ @rq  r  rd  rm  r  )r4   r7   r^   r_   uniquemultiplicitys       rc   test_group_polesz-TestPartialFractionExpansion.test_group_poles  s,    +0#u >0i0re   c                 d   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      \  }}}| j                  ||g dg d       |j                  dk(  sJ t        ddgg d      \  }}}| j                  ||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"      \  }}}| j                  ||g d#g d$       |j                  dk(  sJ t        g d%g d&      \  }}}| j                  ||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      \  }}}| j                  ||g d3g d4       |j                  dk(  sJ y )5NrP   rN   r  r   r  r   r   rN   )gZd;O?g9#Jg&䃞ͪrO   r  )g-1ڿgeagvq-?g      r  r   rS   rQ   r   ir  r   rS   )rS   r   r  rN   r   rT   )rT   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rS   rP   r   rO   )r   rS   rN   )r   r  r  )rN   gg)\(?g^I+g rh?)rS   gffffffgQg~jt?)r  rO   rS   )r   g333333ӿr  )rS   rT   r  r         пr  )rS   r   r  )rS   r   r   r   r   )rS   y              ?y             r   )r                r   rS   )rN   r   rQ   rS   rN   rN   rS   rR   r   r   r   )rS   r  rT   rP   )rT   rN   r   r  )r   rT   rN   r   r  E   r   rY   )rS   r  rO   r  )rO   y            @y            )rS         ?      rq   )r/   r>   r   rQ  r^   r_   r  rf  r  s        rc   test_residue_generalz1TestPartialFractionExpansion.test_residue_general  s    -71aA91EA91EAy!42q'9-1aA3x(ABx(vv{{1a&+.1aA1v&AAw'vv{{1a&"9:1a##q?)	+ vv{{1a&,/1a##Aq*lCvv{{8131aAz*A/0A1v&1#z*1aAe}-A2w'vv{{*&671a##Aq$8:J	Lvv{{)\21a##Aq)\Bvv{{1b':.1aAAw'A1v&vv{{*j11aABx(A1v&As#-41aARy)A1v&A2w'*n51a##Aq*C$7	9vv{{re   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        ||       y )Nr\  r]  )r   rP   rN   r  r   )r   r  r   r   rN   )r   r   rP   rN   r  r   )r   r   r   r  r   r   rN   )r/   r>   r^   r_   r0p0k0r1p1k1r2p2k2r3p3k3s                 rc   test_residue_leading_zerosz7TestPartialFractionExpansion.test_residue_leading_zeros  s    ]M:
B-}=
B],<=
B02HI
BB#B#B#B#B#B#B#B#B#re   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        y # 1 sw Y   y xY w)Nr   r^  r  r  rS   Denominator `a` is zero.r   )r/   r>   r   r#  r	   r   re  s        rc   test_resiude_degeneratez4TestPartialFractionExpansion.test_resiude_degenerate$  s    1a&),1aA1v&ABx(vv{{!Q-1avv{{vv{{vv{{]]:-GH 	AqM	 	 	s    B66B?c                 r   t        g dg d      \  }}}| j                  ||g dg d       t        |dg       t        g dg d      \  }}}| j                  ||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      \  }}}| j                  ||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      \  }}}| j                  ||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      \  }}}| j                  ||g d7g d8d       |j                  dk(  sJ y )9N)rS   rQ   rQ   rT   )rS   y             r  r`  )y             @y      @      @y            ()r   rS   rS   rt   )rS   rT   rS   )rS   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrO   r  gŏ1w@rS   r   )rS   r  rQ   rT   rN   r   r   ra  )rO   r  rN   rb  )rS   r  r  rO   )rT   r  r  r*  g      r3  r|  )r|  rN   r  r   )g
ףp=
?gQ?皙?)r*  UUUUUUտr{  r  r   g
gUUUUUU@r_  rS   r  rS   r`  r   )rS   r   r   )rS   g      r  )rS   rQ   rT   r  r8  rQ   r  r   ir  rU   r  )rS   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿrz  yjM?%uyjM?%u?)ySsA?ySsAr  y-?8gDio?y-?8gDio)r0   rQ  r>   r   r   polymulre  s        rc   test_residuez_generalz2TestPartialFractionExpansion.test_residuez_general3  s   <)FG1a##Aq*G$.	0At$9o61a##Aq%68I$J%2M$B,- 	$ 	/ 	Ax3Ar7J/1aAAw'A1v&vv{{9l31a##Aq*lCvv{{?K81aAT{+AAw'ARy)B411a##Aq$57H	Jvv{{Aq62::q$i!S#BC1aAt}-As|,vv{{:2w/1aAs#As#A2w'1q#h'1aAs#At$vv{{1m,1aA1v&ASz*vv{{1./1aAAw'Ac{+vv{{9j11aAQx(A1v&As#Aq6:.1aAAw'A1v&vv{{<41aARy)A1v&AAw'9&9:1a##Aq%N%N,- 	$ 	/ vv{{re   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        ||       y )Nr\  r]  )rP   rN   r  r   r   )r  r   r   rN   r   )rP   rN   r  r   r   r   )r  r   r   rN   r   r   r   )r0   r>   rh  s                 rc   test_residuez_trailing_zerosz9TestPartialFractionExpansion.test_residuez_trailing_zeros  s     m];
B.>
Bm-=>
B13IJ
BB#B#B#B#B#B#B#B#B#re   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        t        j                  t
        d      5  t        dg d	       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)
Nr   r^  r  r  rS   rw  r   z6First coefficient of determinant `a` must be non-zero.r/  )r0   r>   r   r#  r	   r   re  s        rc   test_residuez_degeneratez5TestPartialFractionExpansion.test_residuez_degenerate  s    Aq69-1aA1v&ABx(vv{{1a.1avv{{vv{{vv{{]]:-GH 	QN	 ]]:"01 	& Q%	& 	&	 		& 	&s    C(C4(C14C=c                     g d}g d}g }g d}g d}dD ]Z  }t        ||||      \  }}	t        ||       t        |	|d       t        ||||      \  }}	t        ||       t        |	|d       \ y )	N)r+  UUUUUUſg)r   r  r  )r.  rS   rN   )rS   r   rU   r   avgr  rd  r  r1  r  rtypeFr  r#   r7   r$   )
r^   r_   r  rf  r  
b_expected
a_expectedr  ra   r`   s
             rc   *test_inverse_unique_roots_different_rtypeszGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypes  s    % 
"
 I 	>E!Q/DAqAz*Azu=1a%0DAqAz*Azu=	>re   c                     g d}g d}g }g d}g d}g d}dD ]^  }t        ||||      \  }	}
t        |	|d	       t        |
|d
       t        ||||      \  }	}
t        |	|d	       t        |
|d
       ` y )Ng333333?g98ȿr  gll?r   r  r  r  )r.  r   rS   rN   )r  gUUUUUUgUUUUUU?rN   )rS   r8  rF  r  r   r  r  r   r   Fr  r  )r^   r_   r  rf  r  r  b_expected_zr  r  ra   r`   s              rc   ,test_inverse_repeated_roots_different_rtypeszITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypes  s    -#
,&
H 	>E!Q/DAqAz6Azu=1a%0DAqA|%8Azu=	>re   c                    g d}g d}g }t        j                  t        d      5  t        |||d       d d d        t        j                  t        d      5  t	        |||d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr  r  z`rtype` must be one ofr   r  r  )r#  r	   r   r#   r$   re  s        rc   test_inverse_bad_rtypez3TestPartialFractionExpansion.test_inverse_bad_rtype  sz    -]]:-EF 	,1a(+	,]]:-EF 	-Aq!8,	- 	-	, 	,	- 	-s   A2A>2A;>Bc                 l    dg}dg}dg}t        |||      \  }}t        |dg       t        |ddg       y )NrS   rT   r   r  g       )r$   r7   )r^   r_   r  rf  r  ra   r`   s          rc    test_invresz_one_coefficient_bugz=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  sC    CCCq!Q1A3C;'re   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       y )NrS   r   rd  rT         ?      rS   r   rq   y      @      y      !      ?y      @      
@rS   y             y      ?       @y      ?      r*  rd  r  rR   )rS                     ?       r  rU   rS               rO   r   rT   r   r  rO   r  r   r   r   rN   rN   rN   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prS   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rT   )rS   r   r  rs   r|  )r#   r>   r^   r_   ra   r`   s       rc   test_invresz(TestPartialFractionExpansion.test_invres  s    qcA3#1As#A2w'+->C1ADEACDsAh 0)<1AABA/03R91A  9 	:A  7 	8 r2hAA/1A12Az*re   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       y )NrS   r   r  r  r  r  r*  rd  r  rR   )g      @r  r  y            rZ   r  r  r  )rQ   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rT   )r   rS   r  rT   r|  )r$   r>   r  s       rc   test_invreszz)TestPartialFractionExpansion.test_invresz  s    sQC$1As#A2w',.?D1ADEACDQx&&!19=1ABCA/14b:1A  9 	:A  7 	8 Bx!Q!Q01A~.Az*re   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       y )NrS   r   r   rT   )r#   r>   r$   r  s       rc   test_inverse_scalar_argumentsz:TestPartialFractionExpansion.test_inverse_scalar_arguments  s]    aA1A1v&A2w'q!Q1A2w'A2w're   N)r   )r(  r)  r*  rG  rQ  rU  rZ  rf  ru  rx  r~  r  r  r  r  r  r  r  r  r  r/  re   rc   rI  rI    se    	D 	D?&1BH$ Ob$"&&>&>"-(+0+0(re   rI  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y)TestVectorstrengthc                 &   |j                  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 y )	Nr*  r  r  r  r   v!>abs_tolrT   r\   r%   r  r  iscloser0  r^   r_   eventsperiodtarg_strength
targ_phasestrengthphases           rc   test_single_1dperiodz'TestVectorstrength.test_single_1dperiod  s    RD!
(8%}}!!!zzQ||HmVDDD||E1tww;#;VLLLre   r   zphase modulo 2*pirK   c                 P   |j                  dg      }|j                  g d      }|j                  dgdz        }|j                  g d      }t        ||      \  }}|j                  dk(  sJ |j                  dk(  sJ t        ||       t	        |d|j
                  z  |z         y )Nr*  )rS   rT   r  r  rN   )r*  r   r  rS   rT   )r\   r%   r  r=   r>   r0  r  s           rc   test_single_2dperiodz'TestVectorstrength.test_single_2dperiod(  s    RD!J'

B4!8,ZZ.
(8%}}!!!zzQ!(M:E1ruu9z#9:re   c                 (   |j                  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 y )Nr   r   r   r   r   r   rT   r  r  r   r  r  r  r  s           rc   test_equal_1dperiodz&TestVectorstrength.test_equal_1dperiod6  s    :;
(8%}}!!!zzQ||HmVDDD||E1tww;#;VLLLre   c                 R   |j                  g d      }|j                  ddg      }|j                  dgdz        }|j                  ddg      }t        ||      \  }}|j                  dk(  sJ |j                  dk(  sJ t        ||       t        |d|j                  z  |z         y )Nr  rS   rT   r  r   r  r\   r%   r  r>   r0  r  s           rc   test_equal_2dperiodz&TestVectorstrength.test_equal_2dperiodD  s    :;QH%

B4!8,ZZd,
(8%}}!!!zzQHm4E1ruu9z#9:re   c                 (   |j                  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 y )
Nr  g?g @gffffff@g333333$@rS   r  r  r   r  r  rT   r  r  r  s           rc   test_spaced_1dperiodz'TestVectorstrength.test_spaced_1dperiodQ  s    56
(8%}}!!!zzQ||HmVDDD||E1tww;#;VLLLre   c                    |j                  g d      }|j                  ddg      }|j                  dgdz        }|j                  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 | y )
Nr  rS   r*  r  rT   r  r   r   g>)r\   r%   r  r>   rA   r   r7   r0  )	r^   r_   r  r  r  r  r  r  rtol_kws	            rc   test_spaced_2dperiodz'TestVectorstrength.test_spaced_2dperiod_  s    56QG$

B4!8,ZZR)
(8%}}!!!zzQHm4$4R$8BJJ$F64.Bq255y:5AAre   c                     |j                  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 y )Nr   r*        ?rS   UUUUUU?r*  r   rT   r  r  s           rc   test_partial_1dperiodz(TestVectorstrength.test_partial_1dperiodm  s    N+
(8%}}!!!zzQ||Hm444||E1tww;#;<<<re   c                 R   |j                  g d      }|j                  g d      }|j                  dgdz        }|j                  g d      }t        ||      \  }}|j                  dk(  sJ |j                  dk(  sJ t        ||       t        |d|j                  z  |z         y )Nr  )r  r  r  r  r  rO   )r*  r*  r*  r*  rS   rT   r  r  s           rc   test_partial_2dperiodz(TestVectorstrength.test_partial_2dperiod|  s    N+,-

G9q=1ZZ 01
(8%}}!!!zzQHm4E1ruu9z#9:re   c                     |j                  g d      }d}d}t        ||      \  }}|j                  dk(  sJ |j                  dk(  sJ t        j                  ||d      sJ y )Nr   r   r*  r  r  r   r  r  )r\   r%   r  r  r  r^   r_   r  r  r  r  r  s          rc   test_opposite_1dperiodz)TestVectorstrength.test_opposite_1dperiod  sc    -.(8%}}!!!zzQ||HmVDDDre   c                     |j                  g d      }|j                  dgdz        }|j                  dgdz        }t        ||      \  }}|j                  dk(  sJ |j                  dk(  sJ t        ||       y )Nr  r  rU   r.  rS   )r\   r%   r  r>   r  s          rc   test_opposite_2dperiodz)TestVectorstrength.test_opposite_2dperiod  su    -.RD2I&

B4"9-(8%}}!!!zzQHm4re   c                 \    |j                  ddgg      }d}t        t        t        ||       y )NrS   rT   r  r\   r   r   r%   r^   r_   r  r  s       rc   test_2d_events_ValueErrorz,TestVectorstrength.test_2d_events_ValueError  s)    aVH%j.&&Are   c                 Z    d}|j                  dgg      }t        t        t        ||       y )Nr  rS   r  r  s       rc   test_2d_period_ValueErrorz,TestVectorstrength.test_2d_period_ValueError  s'    aSE"j.&&Are   c                 8    d}d}t        t        t        ||       y )Nr  r   r   r   r%   r  s       rc   test_zero_period_ValueErrorz.TestVectorstrength.test_zero_period_ValueError  s    j.&&Are   c                 8    d}d}t        t        t        ||       y )Nr  r   r  r  s       rc   test_negative_period_ValueErrorz2TestVectorstrength.test_negative_period_ValueError  s    j.&&Are   N)r(  r)  r*  r  r,  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  re   rc   r  r    s    M w':;; <;M;MB= w':;; <;	E	5B
B
B
Bre   r  ri  c                 @   t        d      t        d      t        d      g}t        d      t        d      t        d      g}t        d      t        d      t        d      g}t        j                  |      }|j                  j                  dk(  sJ t        t        j                  |t              t        j                  |t              |j                  t                    }| t        u rt        ||z   g|      }nt        |||      }t        d |D              sJ t        |j                  t              |j                  t                     | t
        u rddg}nt        dd      g}t        j                  t        d      5   | |d	di d d d        y # 1 sw Y   y xY w)
NrS   rT   rN   r  c              3   <   K   | ]  }t        |t                y wr   )r  r   )r^  ru   s     rc   r`  z)test_nonnumeric_dtypes.<locals>.<genexpr>  s     6!z!W%6s   r  zmust be at least 1-Dr   ru   )r   r   r  r   r   r   r  r   r(   r  r
   r'   r#  r	   r   )ri  r_   ru   ra   r`   r  r  r  s           rc   test_nonnumeric_dtypesr    sA    
WQZ,A	WQZ,A	WQZ,A
A77<<3bhhq%("((1e*<ahhuoNGw!a%!$Aq!6v6666FMM%('..*?@wBxr2	z)?	@ db  s   	FF)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ej                  j                    ed      d               Zy)TestSOSFiltrI   zbuffer array is read-onlyrK   c                    t        ||      }|j                  ddd|      }|j                  ddg|      }|j                  ddg|      }|j                  g d	|      }t        t        j                  ||f      \  }}t        ||      }	|j                  |	      }	t        t        |	|      |       |j                  ddg|      }|j                  ddg|      }|j                  g d
|      }t        t        j                  ||f      \  }}t        ||      }	|j                  |	      }	t        t        |	|      |       |j                  g d      }|j                  g d      }|j                  d      }|j                  ||f      }	|j                  |	d      }	t        |	|      }
t        |
|j                  g d             y )Nr   rP   rQ   r   rS   r   r*  r  r  r  )r  rS   r   )r  r   r   r   )rS   rQ   )r  rT   rT   rT   rT   rT   rT   rT   )r  r   r\   rv  r   r'   r=   r(   rv  concatr   r7   )r^   rW  r_   ru   ra   r`   r  bbr  r  rv   s              rc   
test_rank1zTestSOSFilt.test_rank1  s   R_KK1arK*JJ2wbJ)JJT{"J- jj-Rj8RZZ!Q(BRnjjo!'#q/37 JJ1vRJ(JJ1vRJ(jj,Bj7RZZ!Q(BRnjjo!'#q/37JJ{#JJ{#GGAJiiAjjf%CO2::&@ABre   c                    t        ||      }d}t        j                  |      }|j                  d|dz
  ||      }|j	                  ||      }|j                  ddg|      }|j                  ddg|      }|j                  g dg dg dg dg|      }|j                  g d	g d
g dg dg|      }	t        t        j
                  ||f      \  }
}t        |
|      }|j                  |      }t        ||d      }t        ||       t        |
|      }|j                  |      }t        ||d      }t        |	|       y )Nr  r   rS   r   r   r*  r  r  r  r  r  r  r  )r  r  r  r   r   r\   rv  r   r'   r(   r=   )r^   rW  r_   r  r  ru   ra   r`   r  r  r  r  r  rv   s                 rc   
test_rank2zTestSOSFilt.test_rank2  s7   R_IIe$	KK9q=)2K>JJq% JJ2wbJ)JJSzJ,**iIyI!#  % **i])+24  6 RZZ!Q(BRnjjoC#!'1-RnjjoC#!'1-re   c                 8   t        ||      }d}t        j                  |      }|j                  d|dz
  |      }|j	                  ||      }|j                  ddg|      }|j                  ddg|      }t        t        j
                  ||f      \  }}	t        ||	      }
|j                  |
      }
t        |
|      }t        |j                  d         D ]B  }t        |j                  d         D ]%  }t        |||df   t        |||||df                ' D y )Nr  r   rS   r   r   r*  .)r  r  r  r   r   r\   rv  r   r'   r(   r   r  r=   r   )r^   rW  r_   r  r  ru   ra   r`   r  r  r  rv   r   js                 rc   r  zTestSOSFilt.test_rank3  s   R_IIe$	KK9q=)4JJq% JJ2wbJ)JJSzJ, RZZ!Q(BRnjjoCOqwwqz" 	UA1771:& U)!Aq#I,1a1c	l8STU	Ure   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 )NrT   r   lowr  )r   r    r   r   r  r_rv  r\   )r^   r_   b1r  b2r  b3r  ra   r`   r  s              rc   _get_ab_soszTestSOSFilt._get_ab_sos+  s    q$.Bq$.Bq$.BKKB+R0KKB+R0hhb"fruuRV}beeBFmDE

Q3K0	1c!Syre   item assignmentc           
         | j                  |      \  }}}t        j                  j                  d      j	                  |      }|j                  |      }t        ||      }t        |||d d |j                  d            \  }}|j                  |t        |||dd  |      d   f      }t        |t        |||             t        ||d d |j                  d            \  }	}|j                  |	t        ||dd  |      d   f      }	t        ||	       t        |      }|j                  d|      }t        |||      \  }
}t        |
|j                  d      d	
       t        ||d	
       y )Nr  r  rQ   r  r   r   r   r   Fr  )r  r   r   r  r   r\   r  r   r  r  r7   r(   r*   rv  )r^   rW  r_   r`   ra   r  ru   y_truer  r-  rv   r  s               rc   test_initial_conditionsz#TestSOSFilt.test_initial_conditions6  sN   $$R(	1cIINN2%%b)JJqMR_ Q1Sb6bhhqk:
FGAq!BC&R$@$CDE1a 01C3BBHHV,<=	r		5'#qv""=a"@AB& _GGARG Q2&22771:59BE2re   r<  zfancy indexing not supportedc                    t        ||      }|j                  d|      }| j                  |      \  }}}t        |      }|j	                  |d|j
                  z         }t        j                  t              5  t        |||       d d d        t        ||      }|j	                  ||j
                  d   dd|j
                  d   f      }t        j                  t              5  t        |||d d d d d d g d	f          d d d        t        |||      \  }}	t        |d
   |j                  d      d       t        |	d d ddd d f   |d       y # 1 sw Y   xY w# 1 sw Y   `xY w)Nr   r   r  r  r)  r   rS   r   )r   rS   rS   r  Fr  )r  rv  r  r*   r   r  r#  r	   r   r(   r?   r7   )
r^   rW  r_   ru   r  r  r  zi_ndrv   r  s
             rc   test_initial_conditions_2z%TestSOSFilt.test_initial_conditions_2P  s>    R_GGARG $$R(	1c_ JJq&177*+]]:& 	#Cr"	# r"

5288A;1bhhrl"CD]]:& 	:CuQ1i%789	: Q5)2$?1aA:>	# 	#	: 	:s   8E%E"E"E+c                 @   t         j                  j                  d      j                  ddd      }|j	                  |      }|j                  |      }t        j                  ddd	      }t        | }|j                  |      }|j                  d   }d
}t        |j                        }d||<   t        |g|z         }|j                  |      }	t        ||||	      \  }
}t        ||d d d dd d f   ||	      \  }}t        ||d d dd d d f   ||      \  }}|j                  ||f|      }t        ||
dd       t        ||dd       t!        |      }|j#                  ||d
dd
f      }||d d dd
d d f   z  }t        ||||      d   }t%        | \  }}|j                  |      |j                  |      }}t'        ||      }|j#                  |d
t)        |      d
f      }||d d dd
d d f   z  }t+        |||||      d   }t        ||dd       y )N   r   rP   )rT   r  rN   r   rQ   r+  r  r  rS   rT   r  r  r
  r  r   )r   r   r   r+  r   r\   r   r    r"   r  r  r  r  r(   r  r7   r*   r   r!   r   r@   r   )r^   rW  r_   ru   r  r  	nsectionsr  shpz0rr  r  rR  r!  r  r"  rv   r  ra   r`   y_tfs                        rc    test_initial_conditions_3d_axis1z,TestSOSFilt.test_initial_conditions_3d_axis1h  s!   
 II!!#&..q!*.EHHRLJJqM mmAtE2smjjoIIaL	  177mD	YK#%&XXc] adr2B a2A2qk<Ba12qk<B IIr2hTI*2E6BU7 _ZZY1a01!AqsAI,C"-a0s|1zz!}bjjm11ZZQQ/0!AqsAI,q!QTb1!44e%8re   r   zissues a RuntimeWarningc                    t        ||      }|j                  d|      }|j                  d      }|j                  d      }t        j                  t
        d      5  t        |||d       d d d        d	|d d d
f<   t        j                  t
        d      5  t        |||d       d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)N)rN   r  rN   r   )rO   rQ   )rO   rN   rN   rT   zshould be all onesr   rS   )r  r  r  rN   zInvalid zi shape)r  r  r  r#  r	   r   r(   )r^   rW  r_   ru   r  r  s         rc   test_bad_zi_shapezTestSOSFilt.test_bad_zi_shape  s     R_ HHZrH*hhvXXl#]]:-AB 	+Cr*	+AqD	]]:-?@ 	+Cr*	+ 	+	+ 	+	+ 	+s   B2B>2B;>Cc           	         t        ||      }t        j                  ddd      }|j                  |      }t	        |      }t        ||j                  d|      |      \  }}t        ||dd	
       |j                  |j                  |d d d df   d      |j                  |d d dd f   d      z        }t        |||j                  |      z  d       y )NrQ   r   r  r  rH  r   r  r  Fr   r  rN   r   r  r  )r  r   r    r\   r*   r(   rv  r7   r  r1  rO  )r^   rW  r_   r  r  rv   r  sss           rc   test_sosfilt_zizTestSOSFilt.test_sosfilt_zi  s    R_mmAs51jjo_RWWRrW2r:2BU> WWRVVC2A2JRV0266#ae*263NNO2Q/e<re   Tr  c                    t        ||      }t        j                  ddd      }|j                  |      }t	        |      }t        ||j                  d|      |j                               \  }}t        ||dd	
       y )NrQ   r   r  r  rH  r   r  r  Fr  )	r  r   r    r\   r*   r(   rv  r,  r7   )r^   rW  r_   r  r  r  r  s          rc   test_sosfilt_zi_2zTestSOSFilt.test_sosfilt_zi_2  sj     R_mmAs51jjo_RWWRrW2ryy{C2BU>re   c                    t        j                  g dt              j                  dd      }t        j                  g dt              }t	        j
                  d      5  t        ||       d d d        y # 1 sw Y   y xY w)N)rS   rT   rN   rS   rP   rN   r   rS   rQ   r   r  r   )r   r\   r"  r   r#  r$  r(   )r^   rW  r_   r  ru   s        rc   r%  z"TestSOSFilt.test_dtype_deprecation  s`     jj+6:BB1aHJJ2&A##*IJ 	CO	 	 	s   !A77B N)r(  r)  r*  r+  r  r  r  r  r  r  r   r  r  r  r#  r-  r.  r%  r/  re   rc   r  r    sW   
 k*EFC GC@ k*EF. G.6 k*EFU GU&	 k*;<3 =32 k*;<(1OP? Q =?, k*;<19 =19f g&?@k*;<+ = A+ k*;<= == d#? $? [[d# $ re   r  z!lfilter is CPU-only compiled coder  r  c                   >    e Zd Z edd      d        Zd Zd Zd Zy)	TestDeconvolveTr  r|   c                     g d}ddg}|j                  g d      }t        j                  ||      \  }}t        ||       y )Nr.  rS   r   r   rS   rS   r   r   rT   rS   	r.  rT   rS   r   rT   rN   rS   r   r   )r\   r   
deconvolver7   r^   r_   originalimpulse_responserecorded	recovered	remainders          rc   r  zTestDeconvolve.test_array_like  sD     .q6::;<%00;KL	9	8,re   c                     |j                  g d|j                        }|j                  ddg      }|j                  g d      }t        j                  ||      \  }}t	        ||       y )Nr  r   rT   rS   r  )r\   r   r   r  r7   r  s          rc   rd   zTestDeconvolve.test_basic  s]    ::8

:K::q!f-::;<%00;KL	9	8,re   c                     |j                  ddgddgg      }|j                  ddg      }t        j                  t        d      5  t	        j
                  ||      \  }}d d d        y # 1 sw Y   y xY w)Nr   zsignal must be 1-D.r   r\   r#  r	   r   r   r  r^   r_   r  r  quotientr  s         rc   test_n_dimensional_signalz(TestDeconvolve.test_n_dimensional_signal  sp    ::1v1v./::q!f-]]:-BC 	P"("3"3H>N"OHi	P 	P 	P   A))A2c                     |j                  ddg      }|j                  ddgddgg      }t        j                  t        d      5  t	        j
                  ||      \  }}d d d        y # 1 sw Y   y xY w)Nr   zdivisor must be 1-D.r   r  r  s         rc   test_n_dimensional_divisorz)TestDeconvolve.test_n_dimensional_divisor  sp    ::q!f%::1v1v&67]]:-CD 	P"("3"3H>N"OHi	P 	P 	Pr  N)r(  r)  r*  r+  r  rd   r  r  r/  re   rc   r  r    s0     d+KL- M--PPre   r  c                   2   e Zd Zd Z edd      d        Zej                  j                  dddg      ej                  j                  d	g d
      d               Z	d Z
ej                  j                  d ej                  ddg      ddgg      d        Zy)TestDetrendc                 z    t        |j                  g d            }|j                  g d      }t        ||       y )NrR   r  )r-   r\   r=   )r^   r_   	detrendeddetrended_exacts       rc   rd   zTestDetrend.test_basic  s-    BJJy12	**Y/!)_=re   rI   zoverwrite_data not implementedrK   c                 v    |j                  g d      }t        |d      }t        |d      }t        ||       y )N)rS   333333?r3  g?g333333@F)overwrite_dataT)r\   r-   r=   )r^   r_   ru   
copy_arrayinplaces        rc   	test_copyzTestDetrend.test_copy  s3    JJ./Qu5
!D1!*g6re   r   linearr  r  r.  c                     |j                  |j                  d      d      }t        |||      }|j                  |j                  k(  sJ y )N   )rP   rQ   r   )r  r  )r   r   r-   r  )r^   r  r   r_   r  r"  s         rc   r  zTestDetrend.test_axis  sA     zz"))E*I6Dt$7	$**,,,re   c                 |   g dg dz   }|j                  |      }t        |dd      }t        ||j                  |      d       |j                  |      d d d d f   }t        |ddd	      }t        ||j                  |      d       t	        t
              5  t        |dd       d d d        y # 1 sw Y   y xY w)
Nr.  )rP   r   r  r  r*  rN   )r  bpr   r   rS   )r  r.  r  )r\   r-   r7   r  r   r   )r^   r_   r  r"  s       rc   test_bpzTestDetrend.test_bp  s    ?*zz$DxA6		2==#;%H zz$a.DxAA>		2==#;%H :& 	/DxA.	/ 	/ 	/s   B22B;r.  r   rT   c                    t         j                  j                  d      }|j                  d      }|j	                  |t        |            }t        |t         j                        r|j	                  |      }n t        |      st        j                  d       t        ||      }|j	                  g d      }t        |      |j                  k(  rdnd}t        |||	       y )
Ni90  rU   r   zlist bp is numpy-only)r.  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr  r   r   )r   r   r   r  r\   rA   r  ndarrayr9   r#  r  r-   r   r7   )r^   r.  r_   r  ru   ru  res_scipy_191r   s           rc   test_detrend_array_bpz!TestDetrend.test_detrend_array_bp  s     ii##E*HHRLJJq 0 4J5b"**%BBB<34aB

 $O P (+rzz9tu]6re   N)r(  r)  r*  rd   r+  r)  r#  r-  r  r  r/  r   r  r3  r/  re   rc   r   r     s    >
 k*JK7 L7 [[Vh
%;<[[VY/- 0 =-
/  [[THBHHaV$4q!f#=>7 ?7re   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestUniqueRootsc                     g d}t        |      \  }}t        ||d       t        |t        j                  t        |      t                     y )N)rp  r  r+  r%  r(  r  r  r   r.   r>   r8   r   rv  rU  rm  r^   r_   rf  rX  rY  s        rc   test_real_no_repeatz#TestUniqueRoots.test_real_no_repeat-  s:    (+AFAr2bggc!fC&@Are   c                 &   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       y )N)rp  ffffff{Gz皙r*  r  ?r  rd  tolr  )rp  r<  r*  r  r  r  rT   rT   rS   rT   r1  )r;  r=  r*  r>  r  )g333333g
ףp=
r*  gffffff?r.   r>   r8   r8  s        rc   test_real_repeatz TestUniqueRoots.test_real_repeat3  s    6+A4uEF$;RHl3+A4uEF$<bIl3+A4uEF$@"Ml3re   c                     g d}t        |      \  }}t        ||d       t        |t        j                  t        |      t                     y )N)rp  r         ?      ?r  r  r  r  r   r7  r8  s        rc   test_complex_no_repeatz&TestUniqueRoots.test_complex_no_repeatB  s:    =+AFAr2bggc!fC&@Are   c                 &   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       y )N)rp        𿚙?ffffff333333?333333?r.  rE  ??r  rd  r?  )rp  rI  r.  rK  r  r  rA  r1  )rH  rJ  r.  rE  r  )y      𿚙?y333333?r.  yffffff??rB  r8  s        rc   test_complex_repeatz#TestUniqueRoots.test_complex_repeatH  s    '  ,A4uEF$L$&	(l3+A4uEFJ$&	( 	l3+A4uEH	 	l3re   c                 N   t        j                  t        j                  t        j                  d      t        j                  d                  }g d}t	        |      \  }}t        j
                  |      }t        t        j
                  |      |d       t        |g d       y )NrP   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r   r  )rT   rT   rT   rT   )r   r  r   rv  r.   sortr>   r8   )r^   r_   rf  
true_rootsrX  rY  s         rc   test_gh_4915zTestUniqueRoots.test_gh_4915]  si    HHR[[RWWQZ89K
+ABGGFOZCl3re   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       y )N)r  r   r  r  r   r  r  rT   rS   )rS   g_p   ?&.>      ?r  )r@  rR  rB  rW  s       rc   test_complex_roots_extraz(TestUniqueRoots.test_complex_roots_extrag  sa    +,<=FS$K<q!f-+,D#NFS+$6Cq!f-re   c                    t         j                  j                  d      dt         j                  j                  d      z  z   }t        |d      \  }}t	        |t        j
                  |      gd       t        |dg       y )Nr'  r   rT   r  r  )r   r   r  r.   r>   rd  r8   r8  s        rc   test_single_unique_rootz'TestUniqueRoots.test_single_unique_rootp  s^    IINN3"ryy~~c':"::+Aq1FRVVAYK<se,re   N)
r(  r)  r*  r9  rC  rF  rL  rP  rS  rU  r/  re   rc   r5  r5  +  s'    B4B4*4.-re   r5  c                      t        j                  t        j                  dt        j                        dd      } | j
                  t        j                  k(  sJ y )Nr  r   rQ   rO   )r   r  r   r   r   r   )r  s    rc   test_gh_22684rW  w  s;    !!"))D"Eq!LF<<2<<'''re   r   )ro  r  concurrent.futuresr   r   r  r   	itertoolsr   r   r#  r	   r   numpy.testingr
   r   numpyr   numpy.exceptionsr   scipyr   r  r~  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/   r0   scipy.signal.windowsr1   scipy.signal._signaltoolsr2   r3   r4   scipy.signal._upfirdnr5   
scipy._libr6   scipy._lib._array_apir7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   r-  r+  r,  rH   r1  r  r/  r6  rA  rC  rF  rf  r{  r  r  r  r  r  r  rV  rZ  rw  r\  r`  rb  rd  rg  rj  rp  rs  ru  r  r  r  r  paramr  r  r  r  r  r  r  r)  rF  rQ  	fail_slowr]  r.  r_  ra  rj  rl  r  r  r  rI  r  r  r  r  r   r5  rW  r/  re   rc   <module>rg     s	   
  ?     *  +  % 6          &4 4 0 !   
 ;;// KK11  4VH5w w 6wt 4VH5[" [" 6["| 4VH5nL nL 6nLb3

C
 +&89<7W$ W$ 8 :W$t $'JKN" N" LN"b 4VH5O* O* 6O*d 4VH5L L 6L  C > ! ,'>?~, ~, @~,B
 $% %  %@ 4VH5ZE ZE 6ZEz 4VH5i( i( 6i(X/ /  89$$5    : 1 !2  89$&7    : 89$7/  8 : 89$7.  8 :
 89$F   :F $K  K
` `F   ! "
 4VH5+&89	* 	 : 6"	 89$7y)	1 	 * 8 :	8 8v $'IJ!:;D%=1S$(4U6;;CSCSBT(U(4U6;;CSCSBT(U(W +	 2 < K+2 $2  2
 4VH5[,$?@u+ u+ A 6u+p 4VH56Q 6Q 66Qr 4 &!=>6 6 ? !6@ 4VH5z% z% 6z%z 	" 4VH5Ll L 6L(*Z4@ 89$r?    :?6 $!   ! $89G :  G $r@   @> $r% r%  r%j +
57\9 \97\9~ +
57A A7A8sA sAj $k( k(  k(\ZB ZBz 89$'7!34 5   :: 4 PQt t R !tn 4(KL+&78P P 9 MP@ 4VH577 77 677t $H- H-  H-V(re   