
    bi"                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dl	Z	d dl	m
Z d dlZd dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS e	j                  j                  ZUe	j                  j                  ZVegZW ePe       G d d             ZX ePe       G d d             ZY ePe       G d d             ZZd Z[d Z\d Z]d Z^ ePe        G d d             Z_ eUdd      e	j                  j                  d  eQe       eQe       g       G d! d"                    Za eUdd      e	j                  j                  d#      e	j                  j                  d$ej                  ej                  g       ePee      d%                             Ze G d& d'      Zf ePej                         G d( d)             Zhg d*Zieie@z  Zi G d+ d,      Zj ePej                         G d- d.             Zl ePej                         G d/ d0             Zn ePe%       G d1 d2             Zo G d3 d4eo      Zp G d5 d6eo      Zq eUd7       G d8 d9eo             Zr G d: d;eo      Zs G d< d=eo      Zt eUd7       G d> d?eo             Zu ePe%      d@        Zv ePe%      dA        Zwe	j                  j                  dBg dC       eVdDdEF       ePe       G dG dH                           Zx ePe       G dI dJ             Zy ePe      e	j                  j                  dKg dL      e	j                  j                  dMddNg      e	j                  j                  dOdPdQdRdS e	j                  dTe	j                  j                  gU       e	j                  dVe	j                  j                  gU      g      dW                             Z| ePe      dX        Z} ePe      e	j                  j                  dYdZd[g       G d\ d]                    Z~ G d^ d_      Z ePe&       G d` da             Z ePe'e1       G db dc             Z ePe1e'       G dd dee             Zdf ZddgZ ePe!      e	j                  j                  dh      di               Z ePe!      dj        Z eUd7      e	j                  j                  dh      dk               Z ePej                         G dl dm             Z ePe#       G dn do             Z ePe$       G dp dq             Z ePe"       G dr ds             Z G dt du      Z ePe-       G dv dw             Z eUdx       ePe0      e	j                  j                  dBg dy       G dz d{                           Z ePej"                         G d| d}             Z ePe5       G d~ d             Z ePe6       G d d             Zd Zy)    N)ThreadPoolExecutoras_completedproduct)gcd)raises)ComplexWarning)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2dcorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodenvelopehilberthilbert2lfilter
lfilter_zifiltfiltbutterzpk2tfzpk2sosinvresinvreszvectorstrengthlfiltictf2sossosfiltsosfiltfilt
sosfilt_zitf2zpkBadCoefficientsdetrendunique_rootsresidueresiduez)hann)_filtfilt_gust_compute_factors_group_poles)_upfirdn_modes)
_testutils)xp_assert_closexp_assert_equalis_numpyis_torchis_jaxis_cupyassert_array_almost_equalassert_almost_equalxp_copyxp_sizexp_default_dtypearray_namespacemake_xp_test_casemake_xp_pytest_paramSCIPY_DEVICE_xp_copy_to_numpyc                      e Zd Z edd      d        Z edd      d        Z edd      d        Zd Z edd      d	        Z	 ed
d      d        Z
 edd      d        Z edd      d        Z ed       ed      d               Z ed       ed      d               Zd Z edd      d        Z edd      d        Z edd      d        Z ed
d      d!d       Z edd      d        Z ed
      d        Z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)            rM   rL         rK   )rK   
             rU         asarrayr   r5   selfxpabcs        ^/home/cdr/jupyterlab/.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rK   rL   rM   )rP   rQ   rK   rL   samemode)rR   rS   "   rX   rZ   s        r`   	test_samezTestConvolve.test_same5   sA     JJy!JJ|$Q'2::l34rb   c                     |j                  g d      }|j                  g d      }t        ||d      }t        ||j                  g d             y )Nrd   rO   re   rf   )rR   rS   rS   rX   rZ   s        r`   test_same_eqzTestConvolve.test_same_eq=   sA     JJy!JJy!Q'2::l34rb   c                     |j                  g d      }|j                  ddg      }t        ||      }t        ||j                  g d             y )N)      ?      ?       @      ?      @      ?rm   rn   )               @y       @      @y      @       @y      @      @rX   )r[   r\   xyzs        r`   test_complexzTestConvolve.test_complexE   sC    JJ/0JJ'(QN2::&BCDrb   zwrong output dtypec                 ~    |j                  d      }|j                  d      }t        ||      }t        |||z         y Ni	  i  rX   rZ   s        r`   test_zero_rankzTestConvolve.test_zero_rankK   s7    JJtJJtQN1q5!rb   Tzpure pythonnp_onlyrI   c                 8    d}d}t        ||      }|||z  k(  sJ y rv   )r   rZ   s        r`   test_zero_rank_python_scalarsz*TestConvolve.test_zero_rank_python_scalarsR   s'    QNAEzzrb   zdisagreement between methodsc           
      V   |j                  |j                  d      d      }|j                  d      }t        d      D ]i  }dgdz  }d||<   t        ||j                  |t	        |            d      }t        ||j                  |t	        |            d      }t        ||d	       k y )
N   rK   rK   rK   rK   rP   directmethodr
   +=atol)reshapearangeranger   tupler4   )r[   r\   r]   r^   ib_shaperq   rr   s           r`   test_broadcastablezTestConvolve.test_broadcastableY   s    JJryy}i0IIaLq 	.Ac!eGGAJBJJq%.9(KABJJq%.9%HAAqu-	.rb   c                     |j                  dg      }|j                  dg      }t        ||      }t        |||z         y Ng  P  rX   rZ   s        r`   test_single_elementz TestConvolve.test_single_elemente   s;    JJvJJvQN1q5!rb   cupyc                     |j                  g dg dg      }|j                  g dg dg      }t        ||      }|j                  g dg dg dg      }t        ||       y NrO   rd   rQ   rK   rL   rL   rM   rN   )rQ            rW   )rR      >   :   &   )rW      r   1   r   rX   r[   r\   r]   r^   r_   ds         r`   test_2d_arrayszTestConvolve.test_2d_arraysl   s]     JJ	9-.JJ	9-.QNJJ*'') * 	1rb   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   rQ   rQ   rQ                 ?r}   dtyper~   )                y      :@        y      9@      ?y      8@       @)y      J@        y     b@      @y      b@      &@y     @W@      &@)y      G@      @y     `@      7@y     _@      =@y     @T@      7@)y      D@      (@y     X@      @@y     @W@     B@y      K@      8@)y      Z@        y     n@      *@y     m@      7@y     `@      5@)y     q@      >@y     @      X@y     @      _@y     t@     U@)y     n@     P@y      @     f@y     @@      j@y     q@     `@)y     a@     P@y     0s@      d@y     r@     `f@y      c@     Z@)y      Q@      B@y     c@     Y@y     `b@     @\@y     @T@     R@)y     e@     @a@y     w@     u@y      v@     w@y     @g@     l@)y     @a@     e@y     r@      {@y     p@     |@y     @a@     `q@)y     Q@     @a@y      b@     0t@y     _@     Pu@y     O@     h@)y      @@      R@y      Q@     d@y     M@     e@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     L@     o@)y      C@     k@y     @R@     0@y     I@     H@y      5@     0r@)y      (@      b@y      4@     s@y      @     t@y             f@fullre   rP   rK   r   valid)r   r   
complex128rY   r5   r   )r[   r\   smallbig	out_arrays        r`   test_input_swappingz TestConvolve.test_input_swappingw   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	5rb   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 Nrd   rO   spamrf   eggsr
   rg   r   hamr   r   baconre   )rY   assert_raises
ValueErrorr   r[   r\   r]   r^   s       r`   test_invalid_paramsz TestConvolve.test_invalid_params   sv    JJy!JJy!j(Aqv>j(AqveLj(AquXNj(AqvgNj(AqvgNrb   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)rP   rQ   rK   rN   rM   rK   )	rQ   rK   rL   rM   rK   rL   rQ   rQ   rP   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $rX   r[   r\   r]   r^   expectedouts         r`   test_valid_mode2zTestConvolve.test_valid_mode2   s     JJ)*JJ23::./q!W%X&q!W%X&JJ/0JJ'(::vw/0q!W%X&q!W%X&rb   c                     |j                  g d      }|j                  g d      }t        ||d      }|j                  g d      }t        ||       y )N)rP   rQ   rK   rK   rP   rQ   )rP   rL   rK   rL   rM   rN   r   rL   rK   rQ   rP   rP   rK   re   )9   =   ?   r   -   $   rX   r   s         r`   test_same_modezTestConvolve.test_same_mode   sG    JJ)*JJ>?Q6"JJ/01rb   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 	NrP   r   rQ   rK   r   rK   rQ   rg   r   )r   r   r   r   r   r   s       r`   test_invalid_shapesz TestConvolve.test_invalid_shapes   ss     JJryyA/JJryyQ'0j(IaVI7HIj(IaVI7HIrb   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   re   *   r   rP   size)r   fr   r^   ur                 ?r_   )r
   r   )r   rg   r
   r   r   >   r   r   -C6?ư>rtolr   r   MbP?h㈵>:0yE>)nprandomRandomStatechoicerandnr   kindastyper   r   anyr4   )r[   r\   ntypest1t2rg   argsrngarray_typesx1x2keyresultstkwargss                   r`   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)	rR      2   3   4   5   6   <   r   rQ   r   r
   r   r   r
  Fcheck_dtype)rY   r   r   r5   )r[   r\   r   rs   r
   r   vals          r`    test_convolve_method_large_inputz-TestConvolve.test_convolve_method_large_input   s     6 	@A

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

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

8 45rb   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   rP   r   r   )rR   rK   e   )rR   rR   re   rN  rg  )r   r   )rg   origin)scipy.ndimagendimager   r   r   r   r5   r   )r[   r\   ndir]   r^   r_   s         r`   test_boundary_extension_samez+TestConvolve2d.test_boundary_extension_same  sx    
 	$JJryyF"**y=wGJJryyG2::y>Iq!&6:3<<16(<KLrb   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   rP   rR   r   rK   rK   %   )rN   rN   r   rN  rg  rK   )rv  rv  rf   r   )rq  rr  r   r   r   r   r   floatpadrY   r5   r   )	r[   r\   rs  r]   r^   r_   a_npapad_npapads	            r`   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Trb   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       r`   r   z"TestConvolve2d.test_invalid_shapes  ss     JJryyA/JJryyQ'0j*K1vK&'9JKj*K1vK&'9JKrb   rG   c                     |j                  g dg dg      }|j                  g dg dg      }t        ||d      }|j                  g dg dg      }t        ||       y )NrO   rd   r&  r'  re   )rS   rT   rh   )r*  r+  r,  r#  )r[   r\   r$  r   r0  r/  s         r`   r   zTestConvolve2d.test_same_mode  s\     JJ	9-.JJ-/EFGq!V$JJ " #1rb   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 )NrO   rd   r&  r'  r)  r   rm   r   ro         @        )r         @       @r  )r  y      @      ?y      @      y      ;@      y      G@       @r#  )r[   r\   r$  r   r   r   s         r`   r   zTestConvolve2d.test_valid_mode2  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&rb   z9only integer tensors of a single element can be convertedc                    |j                  d      }|j                  g d      }t        |      }t        |      }dD ]  }t        |j                  t	        j
                  |||            t        j
                  |||             t        |j                  t        j                  |d d d f   |d d d f   |      d      t        j
                  |||              y )NrM   g	@gffffff?rK   r   r   re   rf   r   axis)	r   rY   rC   r4   r   r   r   squeezer   )r[   r\   r]   r^   rz  b_nprg   s          r`   test_consistency_convolve_funcsz.TestConvolve2d.test_consistency_convolve_funcs  s    
 IIaLJJ}% # #- 	D

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

%%aaj!D!G*4H   140	rb   c                     t        t        t        dd       t        t        t        dgdg       t        t        t        dgggdggg       y )NrK   rL   rK  r  s     r`   test_invalid_dimsz TestConvolve2d.test_invalid_dims  s<    j*a3j*qcA37j*ug!w?rb   z!Can't create large array for testTstride_tricksrx   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          rQ     g    .Ar   rP   )iH  r   )shapestridesr   )r   itemsizer3   check_free_memoryr   zeroslibr  
as_stridedr   r   wherer   )r[   r\   r   r]   countfailss         r`   test_large_arrayzTestConvolve2d.test_large_array  s    
 dRXXZ0001$$QUT\BHHJ4G4G%G#%MN HHTAXRXXH.#A#FF  ++AaY	+R!!!q!fX.#Qx}}!!!rb   N)r  r  r  r  r   r1  r3  r>  rI  rL  rQ  r[  pytestmarkparametrizer   r   rm  rt  r}  r   r   r   r  r  slowxfail_on_32bitr  r  rb   r`   r!  r!    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 "rb   r!  c                   	   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d)7      d8        Z&y)9TestFFTConvolver   r   rH   axes Nr   r   c                     |j                  g d      }|j                  g d      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||d       y )NrO   rP   rL   rR   rW         "@r  r  Tqs*>r   rY   r   
isinstancelistr   r4   r[   r  r\   r]   r   r   s         r`   	test_realzTestFFTConvolve.test_real  sa     JJy!::012:a#C$%T{a.CXF3rb   rP   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 )NrO   r  rQ   rP   r  r  r   rY   r   tiler  r  r   r   r4   r  s         r`   test_real_axeszTestFFTConvolve.test_real_axes  s     JJy!::01JJrwwq1a&)*::bgghA78dD!;D!QT*XF3rb   c                     |j                  g d      }|j                  g d      }|dk(  rt        ||      }n)t        |t              rt	        |      }t        |||      }t        ||d       y )Nrm          @       @y      @      @rp   y               @y              4@y              8@y              2@r  r  r  r   r  r  s         r`   rt   zTestFFTConvolve.test_complex  s`    JJ/0::IJ2:a#C$%T{a.CXF3rb   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  rQ   rP   r  r  r   r  r  s         r`   test_complex_axesz!TestFFTConvolve.test_complex_axes*  s    JJ/0::IJJJrwwq1a&)*::bgghA78dD!;D!QT*XF3rb   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      ?rQ   rK   r   )r  rL   rR   rW   r(  r   r7  8   r  r   r   r8  r   r  r   r  r  r  r  s         r`   test_2d_real_samez!TestFFTConvolve.test_2d_real_same8  sx     JJ!# $::2235 6 2:a#C$%T{a.CX&rb   rQ   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 )NrO   r   )rP   rL   rR   rW   r(  r  r  rQ   rP   rP   r  r  Fr   r  r  r  s         r`   test_2d_real_same_axesz&TestFFTConvolve.test_2d_real_same_axesQ  s     JJ	 ::0-.0 1 JJrwwq),-::bggh	:;dD!;D!QT*XFFrb   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      @      @rn   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@r  y      $@      4@y      5@      L@y      2@      S@y      &@      N@r  r  r  r   r  r  s         r`   test_2d_complex_samez$TestFFTConvolve.test_2d_complex_samei  s{     JJ0+- .::A(<  2:a#C$%T{a.CXF3rb   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         r`   test_2d_complex_same_axesz)TestFFTConvolve.test_2d_complex_same_axes  s     JJ0+- .::A(<  JJrwwq),-::bggh	:;dD!;D!QT*XF3rb   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 )
NrO   	rK   rK   rM   rN   r   r   r(  r   rP        A@     D@     G@	r        4@      9@r  r  r  r`  g      <@rb  r  re   r  r  r   r  r[   r  r\   r]   r^   
expected_1
expected_2r   s           r`   test_real_same_modez#TestFFTConvolve.test_real_same_mode  s     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5rb   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 )NrO   r  r  r  rQ   rP   re   r  r  r   r  r  s           r`   test_real_same_mode_axesz(TestFFTConvolve.test_real_same_mode_axes  s     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5rb   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rK   rQ   rP   r        8@g      ?@r  r_  g     H@r        (@r  r   r  r  r   r  r[   r  r\   r]   r^   r   r   s          r`   test_valid_mode_realz$TestFFTConvolve.test_valid_mode_real  s     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3rb   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  rQ   rP   r   r  r  r   r  r  s          r`   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3rb   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          r`   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3rb   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  rQ   rP   r   r  r  r   r  r  s          r`   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3rb   rF   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  )rY   r   r  r   r4   r   s         r`   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3rb   r   zassorted error messagesa,brM   rN   r   c                     t        t        |j                  |      |j                  |            |j                  g              y N)r5   r   rY   r[   r]   r^   r\   s       r`   
test_emptyzTestFFTConvolve.test_empty/  s1    
 	

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

1q5		
:	<rb   c                 8   t         j                  j                  d      }t         j                  j                  d      d|j                  d      z  z   }t         j                  j                  d      d|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   default_rngrandrY   r   r   r  r  r   r4   
r[   r  r\   r   rz  r  r   r]   r^   r   s
             r`   test_random_dataz TestFFTConvolve.test_random_dataG  s    ii##D)yy~~d#b3::d+;&;;yy~~d#b3::d+;&;;::bkk$f=>JJtJJt2:aF+C$%T{aF6CXE2rb   c                    t         j                  j                  d      }t         j                  j                  d      d|j                  d      z  z   }t         j                  j                  d      d|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   rQ   rP   r  r  r   )r   r   r  r  r   r  rY   r  r  r   r   r4   r  s
             r`   test_random_data_axesz%TestFFTConvolve.test_random_data_axesX  s   ii##D)yy~~d#b3::d+;&;;yy~~d#b3::d+;&;;;;tT62wwtaV$wwtaV$::bgghA78JJtJJtdD!;D!QT2XE2rb   TzTODO: swapaxesrx   rL   c                    d\  }}t         j                  j                  d      }|j                  t        j                  j                  | d|j                  |      z  z         }|j                  t        j                  j                  | d|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)){   rS   )      r  r   r   r   rQ   rP   rL   )rQ   rP   rK   rP   rP   )rQ   rP   rP   rL   rP   )rQ   rP   rK   rL   rP   r  r  r   )r   r   r  rY   r  r   moveaxisswapaxesr  r   r4   )
r[   r  r\   a_shaper   r   r]   r^   r   r   s
             r`   test_random_data_multidim_axesz.TestFFTConvolve.test_random_data_multidim_axesk  s    0ii##D)JJryy~~w/"szz'7J2JJKJJryy~~w/"szz'7J2JJK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>rb   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      }t        ||d       y )Nr   r   r  r   )r   r  )r   r   r  rY   r   r   r4   )	r[   r   r\   rz  r  r   r]   r^   r   s	            r`   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T2XE2rb   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.*rA  re   r
   r   )r   r   r  rY   standard_normalnaninfr   firwinr  warnsRuntimeWarningr   )r[   r\   r   r   sig_nanr  coeffsrH  s           r`   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  rt   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rw   r   r  r  r  r  r  r   r   r   r   randinttolistr  r  r  rb   r`   r  r    s*    g&;<[[Vb$A3RD%AB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rb   r  c                      t        d      )NzFell back to fftconvolve)RuntimeError)r   r  s     r`   fftconvolve_errr#    s    
1
22rb   c                 t    t        | d      D cg c]  \  }}t        ||z
        dkD  r||f c}}S c c}}w )NrQ   repeatrK   )r   abssizesr]   r^   s      r`   gen_oa_shapesr*    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   rP   rQ   rK   )r*  zipr   )	r)  shapes0shapes1ishapes0ishapes1shapesmodesishapesimodes	            r`   gen_oa_shapes_2dr5    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 )NrQ   r%  r   r(  s      r`   gen_oa_shapes_eqr7    s7    &uQ7 tq!Av F   s   (c                      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_0rP   r  r  rV   c                 *   t         j                  j                  |      }t         j                  j                  |      }|j                  t	        ||            }|j                  |      }|j                  |      }t        ||      }t        ||       y r  )r   r   r  rY   r   r   r:   )r[   	shape_a_0	shape_b_0r\   r]   r^   r   r   s           r`   test_real_manylensz!TestOAConvolve.test_real_manylens  sm     IINN9%IINN9%::k!Q/0JJqMJJqMA!#x0rb   )r
  /   rN   rL   rP   
is_complexTFrg   r  c                    t         j                  j                  |      }t         j                  j                  |      }|rJ|dt         j                  j                  |      z  z   }|dt         j                  j                  |      z  z   }|j                  t	        |||            }	|j                  |      }|j                  |      }|j                  t        j                  dt               t        |||      }
t        |
|	       y Nr   rf   r   r   r   r  rY   r   setattrr   _signaltoolsr#  r   r:   )r[   r;  r<  r?  rg   monkeypatchr\   r]   r^   r   r   s              r`   test_1d_noaxeszTestOAConvolve.test_1d_noaxes  s     IINN9%IINN9%Bryy~~i000ABryy~~i000A::k!QT:;JJqMJJqMF//+	-AD)!#x0rb   r  r   )r
  r>  rN   rL   shape_a_extrarK   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                  t	        ||||            }|	j                  |      }|	j                  |      }|j                  t        j                  dt               t        ||||      }t        ||       y )NrQ   r   rg   r  r   rB  )r[   r  r;  r<  rG  rH  r?  rg   rE  r\   ax_aax_br]   r^   r   r   s                   r`   test_1d_axeszTestOAConvolve.test_1d_axes  s     q q T
T
IINND!IINND!Bryy~~t,,,ABryy~~t,,,A::k!QTEFJJqMJJqMF//+	-ADt4!#x0rb   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                  t	        |	|
|            }|j                  |	      }	|j                  |
      }
|j                  t        j                  dt               t        |	|
|      }t        ||       y rA  rB  )r[   r;  r<  	shape_a_1	shape_b_1rg   r?  rE  r\   r]   r^   r   r   s                r`   test_2d_noaxeszTestOAConvolve.test_2d_noaxes  s     IINN9i0IINN9i0Bryy~~i;;;ABryy~~i;;;A::k!QT:;JJqMJJqMF//+	-AD)!#x0rb   rQ   c                 n   |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   }t        |      }|j	                  t        ||||            }|j	                  |      }|j	                  |      }|
j                  t        j                  dt               t        ||||      }t        ||       y )NrK   r   rP   r   rJ  r   )r   r   r  r   rY   r   rC  r   rD  r#  r   r:   )r[   r  r;  r<  rO  rP  rg   rG  rH  r?  rE  r\   rK  rL  r]   r^   r   r   s                     r`   test_2d_axeszTestOAConvolve.test_2d_axes%  s     q q !T!W!T!W!T!W!T!WIINND!IINND!Bryy~~t,,,ABryy~~t,,,AT{::k!QTEFJJqMJJqMF//+	-ADt4!#x0rb   r   z*ValueError: Target length must be positiverH   r  rM   rN   r   c                     t        t        |j                  |      |j                  |            |j                  g       d       y )NFr  )r5   r   rY   r  s       r`   r  zTestOAConvolve.test_emptyH  s3     	rzz!}bjjm4JJrN	
rb   c                 ~    |j                  d      }|j                  d      }t        ||      }t        |||z         y r   rY   r   r5   r  s        r`   rw   zTestOAConvolve.test_zero_rankQ  s8    JJtJJtAQU#rb   c                     |j                  dg      }|j                  dg      }t        ||      }t        |||z         y r   rV  r  s        r`   r   z"TestOAConvolve.test_single_elementW  s<    JJvJJvAQU#rb   N)r  r  r  r  r  r  r  r7  r  r   r=  r*  rF  rM  r5  rQ  rS  r  r  rw   r   r  rb   r`   r9  r9    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< -10 [[ :-n=? [[\D%=91 :?1& [[Vq!fq!fq!f%=>[[ :-n=? [[_q!f5[[_q!f5[[\D%=91 : 6 6? ?18 w'ST[[Ub"XA|b1#Y$GH
 I U
$$rb   r9  Tz!assertions may differ on backendsrx   convapproachc                   ~    e Zd Zd Zd Zej                  j                  ddgdfddgfdgdggfg      d        Zd Z	y	)
TestAllFreqConvolvesc                     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)NrP   r   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionrA  r   rf   )r   r   r   r   r   r[   rX  r\   r]   r^   s        r`   r   z(TestAllFreqConvolves.test_invalid_shapesd  sk    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)rM   rN   rQ   rP   )rM   rN   rK   rP   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)rA  r   rP   r  )r   r  r   r   r\  s        r`   test_invalid_shapes_axesz-TestAllFreqConvolves.test_invalid_shapes_axesl  sT    HH\"HH\":"67 	, AQF+		, 	, 	,s    AA r  rP   rQ   rK   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 dimensionalityrA  r   r   )r[   r]   r^   rX  r\   s        r`   r  z)TestAllFreqConvolves.test_mismatched_dimsu  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'rA  rP   rQ   chipsrf   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrK   rL   )r  rb  rd  re  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   r`  )r[   rX  r\   s      r`   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N)
r  r  r  r   r^  r  r  r  r  rc  r  rb   r`   rZ  rZ  ^  sZ    -, [[U !sAh 1#h !saSEl,-	-0rb   rZ  z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}   rL   rL   y        ?r   r   )r   r   r   iscomplexobjr   r4   r   r   )r   r\   rq   rr   ress        r`   test_convolve_longdtype_inputrh    s    
 			"))%0A
		 ''.A	uw	S	S
a
CC!Qx8999rb   c                      e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZ eej                  ej                        d        Z
ej                  j                  dg d       eej                  ej                        d               Z edd      ej                  j                  dej"                  ej$                  ej&                  ej(                  ej*                  ddg       eej                  ej                        d                       Z edd!       eej                        d"               Z edd#       eej                        d$               Z ed%d&'      ej                  j                  dg d(       eej                        d)                      Zy*)+TestMedFilt)
r
  r
  r
  r
  r
  rX     r}   r   r:  )
r
  r
  r
  r
  r
  r   H   M   rP  rU  )
r
  r
  r
  r
  r
  r:  r>     r9  rm  )
r
  r
  r
  r
  r
  r         _   #   )
r
  r
  r
  r
  r
  r:  rh   r(  rf  rU  )
r   a   rT   rP  r   rm  r   r   G   r   )
r9  r  rT  rp  rP  rU   rn  rP  r6  rV  )
rK   !   r  r;  rP   r   rO  7   rW   S   )
r   r  r:  r   r  r>  r6  +   r   r7  )
rU   r   X   r   '   rL   rX  r9  r   r   )
r   r
  r
  r
  r   ro  ro  rk  r}   r   )
r   r
  r
  r
  r
  r   rn  rf  rp  r   )
r
  r
  r
  r
  r
  r>  rh   rh   r:  rr  )
r
  r
  r
  r
  r
  r
  r   r>  r9  r   )
r
  r
  r
  r
  r
  r
  r:  rv  r9  rr  )
ru  r
  r
  r
  r
  r>  r:  rx  rv  r7  )
rU   r
  r
  r
  r
  r>  r:  r   rv  r7  )
r   r:  r
  r
  r>  r:  r:  rx  r   rf  )
r   rU   ru  rz  rU   rU   rx  rx  rx  r   )
r   r   r  r   rL   rL   rn  rn  r6  r   r   rK   c                 h   |j                  | j                        }|j                  | j                        }|j                  | j                        }t	        j
                  ||      }t	        j                  |j                  ||j                        |      }t        ||       t        ||d       y )Nr   Fr  )	rY   INOUTKERNEL_SIZEr   medfilt	medfilt2dr   r5   )r[   r\   in_out_kernel_sizer   r$  s          r`   ra   zTestMedFilt.test_basic  s     jj!zz$((#jj!1!12NN3,RZZ2::Z>L4 1%0rb   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   )
r7   r  skipgetattrrY   r|  r   r  r   r  r[   r   r\   in_typeds       r`   
test_typeszTestMedFilt.test_types  s~     B<E%CCKK?@E"::dggU:3~~h'--666)//5888rb   Tzassertions may differrx   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 supportedrA  )r   finfo
longdoubler   r  r  arrayr|  r   r   r   r  r  r  s       r`   test_invalid_dtypeszTestMedFilt.test_invalid_dtypes  s     ,,HHR]]+11U:KK4UG<=88DGG51]]:_= 	%NN8$	% ]]:_= 	'X&	' 	'	% 	%	' 	's   	C!C-!C*-C6z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     r`   	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 )	NrR   r   rM   rN   )r   )r  rP         @)
r   r   r   r  r  r  r4   r   r  rY   )r[   r\   dummyr]   s       r`   test_odd_strideszTestMedFilt.test_odd_strides  sd     		"BJJ	/!AJFF  ++Au+=q!,rzz2$/?@rb   rF   z6chunk assignment does not work on jax immutable arraysrH   )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   rQ   rP   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              r`   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$..rb   rL   )max_workers>   rP   r   r   r   r   rP   rP   rP   )r  rY   r|  r}  r  r~  
zeros_liker   submitr   rl  r5   )r[   r   r\   r   r  outputpoolchunksr  futuresfuturedataMsliceNslicer  r  r  r  r  s   `             @@@@@r`   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~  r@   r   r  r  ra   r  r  r  r  r  r   bool_r   r   clongdoubler   r  r  r  r  r  rb   r`   rj  rj    s   
2
1
2
2
1
2
2
0
1
0	
2B 213333321-	/C Q%Kv~~v'7'78	1 9	1 [[W '= > v~~v'7'789 9>9 d+BC[[Wrxxr}}')~~rzz'0*'> ? v~~v'7'78' 9? D
' d?;v~~&! ' <!
 d+PQv~~&A ' RA G [[W&EFv''(6* ) G	6*rb   rj  c                   ,    e Zd Z edd      d        Zy)
TestWienerr   zXXX: can_cast in cupy <= 13.2rH   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)rM   rN   rL   rK   )rK   rM   rN   rQ   )rQ   rK   rM   rN   )rP   rN   r(  r   r   )gSXO@gXq	@gq@g?)g]`UUU@gFUUUU@gq@gcq@)gyq@gXq@gXq@gUJ4@)gUUUU?g2k6k@gҷWH@g@_)@rN   decimalrK   )mysize)rY   r   r:   r   wiener)r[   r\   r0  r/  s       r`   ra   zTestWiener.test_basicI  s    JJ$$$& .0ZZ  9 JJNQQRT U 	"&--"2AqA!&--!"<aKrb   N)r  r  r  r  ra   r  rb   r`   r  r  F  s!     f%DE
L F
Lrb   r  )meanmedianminimummaximumlinec                      e Zd Z eej
                  ej                         edd      d               Ze	j                  j                  dd      e	j                  j                  dd      e	j                  j                  d	d
       eej
                        d                             Z eej
                        d        Ze	j                  j                  dd      e	j                  j                  dd      e	j                  j                  dd       eej
                        d                             Z edd      e	j                  j                  de       eej                        d                      Z edd       eej                        e	j                  j                  de      d                      Ze	j                  j                  de      e	j                  j                  dddg       edd       eej                        d                             Z edd      e	j                  j                  ddg e edgddge            z          eej
                  ej                        d                      Ze	j                  j                  d d!      e	j                  j                  d"d#       eej
                        d$                      Ze	j                  j                  d d%      e	j                  j                  d"d#       eej
                        d&                      Ze	j                  j                  d'd(      e	j                  j                  d)d(       eej
                        d*                      Ze	j                  j                  d+g d,      e	j                  j                  deej8                  ej:                  eeg       eej                        d-                      Z  eej                        d.        Z! eej                        e	j                  j                  dd/dg       edd      d0                      Z"y1)2TestResampler   z-does not raise with non-int upsampling factorrH   c           
      f   |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|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       @   r\   windowINVALIDdomainyorP   r   g?rQ   r  padtyper  rR   )r  cval)rQ   rP   r   r  r  )r  constant)r   r   r   
get_windowr   r   resampleresample_polyeyer  r  r5   )	r[   r\   signumwinsig2x_refx0r  s	            r`   ra   zTestResample.test_basic]  s    ii2::i.<j&//3CH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"rb   r  )Nhammingr  )r	  rn  r  )r  ro  rR   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   rR   F)endpointrQ         @r  rP   r  &.>v!>r   )r>   r   r   r   linspacecosr   r  r   r4   realstacksinr   )r[   r  r  r  r\   dt_rdt_crq   rr   desired	y_complex	resampledr   s                r`   	test_rfftzTestResample.test_rfft  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	rb   c                     |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
   r4   r   r  )r[   r\   tsigfsigr  s        r`   test_input_domainzTestResample.test_input_domain  s^     yy37zz$OOD#f5OOD#f5	rb   nx)rP   rQ   rK   rM   r   nyr   )r   r   c                     t        ||      }|j                  dg|z  |      }t        j                  ||      }t	        ||j                  dg|z  |j
                               y )NrP   r   )r  rY   r   r  r4   r   )r[   r  r  r   r\   rq   rr   s          r`   test_dczTestResample.test_dc  sY    
 E"JJsRxuJ-OOAr"2::qcBhagg:>?rb   z padtype not supported by upfirdnr  c                    |j                  d      }|j                  t        j                  j	                  d      j                  d            }|j                  |d      }t        j                  |dd||       t        ||       y )	NrK   r   rQ   TcopyrM   rP   r  r  )	r  rY   r   r   r   r   r   r  r5   )r[   r  r\   impulser  window_origs         r`   test_mutable_windowz TestResample.test_mutable_window  sk    
 ((1+BII11!4::1=>jjdj3Wa67K,rb   c                     |j                  d|j                        }|j                  g d|j                        }t        j                  |dd||      }|j
                  |j                  k(  sJ y )NrR   r   rP   rP   rP   rP   rQ   r	  )r   r   rY   r   r  r   )r[   r  r\   rq   r/  rr   s         r`   test_output_float32z TestResample.test_output_float32  s^    
 IIb

I+JJy

J3  AqGDww"**$$$rb   r   r   c                     t        ||      }|j                  d|      }t        j                  |dd|      }|j                  |j                  k(  sJ y )NrR   r   rP   rQ   r  )r  r   r   r  r   )r[   r  r   r\   rq   rr   s         r`   test_output_match_dtypez$TestResample.test_output_match_dtype  sN     E"IIbI&  Aq':ww!''!!!rb   zmethod, ext, padtype)r
   FN	polyphaseFTc                    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	      }n|rf|
|k7  rat        |
|      }|
|z  }||z  }t        ||      }d
|z  }d|z  }t        j                  d|z  dz   |d      }|j                  |      }||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&                  ||      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  ro     r     r   )r        $@g      D@rQ   r  r
   r   r  r  rR   rP   )r  r  r  r	  r  r  r         ?)r  r  333333?r   r   r  gGz?r  r   r   rL   )r         ?        r   r  -q=)r  r          r  r  )r   r   rx  rY   newaxisr  pir.   r   r  r   maxr  r  r   r  r  r4   r   corrcoefr   r   cumsumr   interp)"r[   r   extr  r\   raterates_tor  freqsrq   rate_tot_toy_tos	y_resampsr0  updownmax_ratef_chalf_lenr  polyargsr   y_toy_resampr  corrr   r  y1_testy1_truer  y2_testy2_trues"                                     r`   test_resample_methodsz"TestResample.test_resample_methods  s    < IId"**I-d;

>*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ZZ/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(==;>1&	>R ii##A&J399T?33JJqM 	%G99WBJJ97%.HD99T1a(D!??1g6!//7D8?A::///::bkk$9$?@D$;$$;	% U?VV,-Boob!,Gjj!CDGGW59./Boob!,Gjj"b*GGW59 rb   n_in)r   r(  n_out)rK   rL   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)r&  s    r`   r  z0TestResample.test_resample_win_func.<locals>.win1  s    e,,,rb   r  rQ   r  r   N)r   ri  r   r  r4   )r[   r9  r:  x_inr  y0y1s          r`   test_resample_win_funcz#TestResample.test_resample_win_func*  sJ    
 wwt}	- __T5)__T55"bu-rb   )rN   rW   c                 ,   d\  }}t        j                  |      }t        j                  ||      }t        j                  |||||z   g      \  }}dt        j                  t        |            |z  |z  |z  z   }	t        ||       t        ||	d       y)zcVerify behavior for parameter `t`.

        Note that only `t[0]` and `t[1]` are utilized.
        )rR   rQ   )r  rR   r  r   N)r   ri  r   r  r   lenr5   r4   )
r[   r9  r:  t0dtr>  r?  r@  r   t_refs
             r`   test__resample_param_tz#TestResample.test__resample_param_t:  s     Bwwt}__T5)uRU<BRYYs2w'",t3e;;BE.rb   n1)rQ   rK   r   r   n0c                     t        ||      dz  d ||fD        }fd|D        \  }}t        j                  ||      }t        j                  |dz   |      }t        ||d       t        |j                  |d       y)zDTest behavior at Nyquist frequency to ensure issue #14569 is fixed. rQ   c              3   L   K   | ]  }t        j                  |      |z    y wr  )r   r   ).0n_s     r`   	<genexpr>z5TestResample.test_resample_nyquist.<locals>.<genexpr>R  s     4Rbiimb 4s   "$c              3   v   K   | ]0  }t        j                  d t         j                  z  z  |z         2 yw)rQ   N)r   r  r  )rL  t_f_nys     r`   rN  z5TestResample.test_resample_nyquist.<locals>.<genexpr>S  s,     =B"&&RUUT)B./=s   69r   r  r   N)minr   r  r4   r  )	r[   rI  rH  ttr  r  y1_ry1_crQ  s	           @r`   test_resample_nyquistz"TestResample.test_resample_nyquistL  sq    
 2r{a4B84="=Br2&rBw+bu-		2E2rb   down_factor)rQ   r  O   c                 P   t         j                  j                  d      }d}|j                  |      j	                  |      }|t         j
                  t         j                  fv r|d|j                  |      z  z  }d|d<   d|d<   t        j                  dd|z  d	      }t        |d|d
      d d |   }t        |t        j                  |            }	t        |j                  ||	|j                         f      \  }}	}t        j                  |d||		      }
t!        ||
dd       y )Nr   r  r   r   r   r   r  r  r  r  r  rP   r  gv!>r   r   )r   r   r   r   r   r   r   r   r  r   r   flipmaprY   r  r  r4   )r[   rW  r   r\   random_stater   rq   r/  yfhcrr   s              r`   test_poly_vs_filtfiltz"TestResample.test_poly_vs_filtfilt[  s
   
 yy,,R0t$++E2R\\2==11l((...A !"MM"b;.yAaa4]{]C
 a$ 

QBGGI$67	2r  A{2>ADt4rb   c           	         dD ]  }t        dd|      D ]  }dD ]  }t        j                  j                  |f      }t        j                  j                  |f      }t        |t        j                  |      d      }t        |j                  |||f      \  }}}t        j                  |d||      }t        |d d |   |          y )N)rQ   rL   rP   r8  )rU   ru  r  rf   )r+  r,  r  )
r   r   r   r   r[  r\  rY   r   r  r4   )	r[   r\   r,  r  nweightsrq   weightsy_gy_ss	            r`   test_correlate1dzTestResample.test_correlate1dz  s     		6DAr4( 6 ( 6H		(("/A ii..{;G%a)9
KC&)"**q'36G&HOAw ..ad7<C#C$K566		6rb   r   c                     t        ||      }|j                  g d|      }t        j                  |ddd      }t	        j
                  |      dkD  sJ y )N)r   rP   rQ   rK   rQ   rP   r   r   rQ   rP   smooth)r+  r,  r  r   )r  rY   r   r  r   count_nonzero)r[   r   r\   r  actuals        r`   test_gh_15620zTestResample.test_gh_15620  sY     E"zz/uz=%%d)*+,.68 '!+++rb   N)#r  r  r  r@   r   r  r  r  ra   r  r  r  r  r  r  r  padtype_optionsr  r  r  r  r   r8  rA  rG  rV  intr   r   r   rx  complexr`  rf  rk  r  rb   r`   r  r  [  s_   v(<(<=v&UV# W >#B [[X'89[[S(+[[U$67v' ( 8 , :. v' ( [[T?3[[T?3[[W&?@v'@ ( A 4 4@ f%GH[[Y8v++,- - 9 I- f%GHv++,[[Y8% 9 - I% [[Y8[[Wy)&<=f%GHv++," - I > 9" f%GH[[	
t}o
	
 v(<(<=M: > IM:^ [[VV,[[Wf-v'. ( . -. [[VW-[[Wf-v'/ ( . ./ [[T<0[[T<0v'
3 ( 1 1
3 [[]K8[[WsBJJeW&UVv++,5 - W 958 v++,
6 -
6 v++,[[Ww	&:;f%GH, I < -,rb   r  c                       e Zd Zd Zd Zy)TestCSpline1DEvalc                    t        j                  g d      }t        j                  |j                  d         }|d   |d   z
  }|j                  t	        j
                  |            }|j                  t        |      dz        dz  }t	        j                  ||||d         }t        |d d d   |j                  |      d       y )	N)	rP   rQ   rK   rL   rK   rQ   rP   rQ   rd  r   rP   r  )dxr  rR   rM   r  )	r   rY   r   r  r   	cspline1drC  cspline1d_evalr:   )r[   r\   rr   rq   rr  cjr  y2s           r`   ra   zTestCSpline1DEval.test_basic  s    JJ45IIaggaj!qTAaD[ZZ((+,YYs1v}%,""2rbQqT: 	""TrT(BJJqM1Erb   c                    t        j                  d      }t        j                  |j                  t         j                        }d}d|z  }t        j
                  dt         j                  z  |z  |z        }|j                  t        j                  |            }|j                  dg      }t        j                  ||      }|j                  |j                  |      j                  k(  sJ y )Nrb  r   r  r  rp   r  )r   r   r  r  r   expr  rY   r   rs  rt  r   )	r[   r\   rq   rr   Tr   cyxnewynews	            r`   rt   zTestCSpline1DEval.test_complex  s    IIcNHHQWWBLL1!GFF4"%%<!#a'( ZZ((+, zz3% $$R.zzRZZ]00000rb   N)r  r  r  ra   rt   r  rb   r`   rp  rp    s    	F1rb   rp  c                       e Zd Zd Zd Z edd       edd       eej                        d                      Z	d	 Z
y
)TestOrderFiltc                     t        j                  |j                  g d      |j                  g d      d      }|j                  g d      }t        ||       y )NrO   rP   r   rP   rP   )rQ   rK   rQ   )r   order_filterrY   r5   )r[   r\   rj  expects       r`   ra   zTestOrderFilt.test_basic  sA    $$RZZ	%:BJJy<QSTUI&'rb   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   rM   rM   rK   )r  r  r  r  r  )r  r  r  rb  r  )r  r  r        @r  )r  r        &@r  r  r   )r  r  r  r  re  )r  r  g      *@      ,@r  )g      0@g      1@g      2@      3@r  )      5@      6@      7@r  r  )r  r  r  r  r  rQ   r   rP   rQ   rK   r   )rM   rN   r   r   rK   )rR   r  rW      r   )ro  r   r   rk  r  r   ro  r   r   rk  rP   )r   r   r>   r  rY   r4   r   r  r[   r\   rq   r  r   s        r`   test_doc_examplezTestOrderFilt.test_doc_example  s   JJryy+;B+?y@&I!1"!56 ::!!!$!	#
 #2&  
 	++Avq98D ::!%&&&	(
 	++Avq98D :: ! 	"
 #2&  
 	++Avq98Drb   z
dask.arrayzrepeat requires an axisrH   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  )rP   rN   r   r   rL   )rN   r  rW   r  r(  )r  r   r   rk     )r   r   r   rk  r   rK   rv  rL   )r   r   rY   r4   r   r  r  ri  )r[   r\   rq   r   s       r`   test_medfilt_order_filterz'TestOrderFilt.test_medfilt_order_filter  s|     JJryy}f- ::!	!
 	q!,h72776?A6	
rb   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  )rP   rP   r   )r   rP   r   r   r   r   r   r   r   r   r   )r   r   rP   rQ   rK   )r   rM   rN   r   r   )r   rR   r  rW   r  r  r   )r   rP   rQ   rK   rL   )rM   rN   r   r   r(  )rR   r  rW   r  r  )ro  r   r   rk  rn  rP   )r   r   rY   r4   r   r  r  s        r`   test_order_filter_asymmetricz*TestOrderFilt.test_order_filter_asymmetric  s    JJryy}f-
 ::  	"
 	++Avq98D::!!	#
 	++Avq98Drb   N)r  r  r  ra   r  r  r@   r   r  r  r  r  rb   r`   r~  r~    sR    (
$EL |,EFw'=>v~~&
 ' ? G
&Erb   r~  c                      e Zd Zd Zd Z edd      d        Zd Zd Z edd	      d
        Z	 edd	      d        Z
d Zd Z edd	      d        Z edd	      d        Zd Z edd      d        Zd Z edd      d        Z edd	      d        Z edd	      d        Z edd	      d        Zd Z edd      d        Zd Z edd      ej6                  j9                  dddgg d d!d!gg d"fe#       ee      d$                      Z  ee      d%        Z! ed&d'       edd(       ee      d)                      Z" edd	      d*        Z# edd	      d+        Z$d, Z%d- Z& ed./      ej6                  j9                  dd0d0g e'jP                  d0      g      ej6                  j9                  d1d0d0g e'jP                  d0      g      d2                      Z)y3)4_TestLinearFilterc                     t        |t              r|nt        j                  |      }|j	                  d|dz
  |      }t        |t              s|j                  ||      }| j                  ||      S )Nr   rP   )r  rm  mathprodr  r   convert_dtype)r[   r  r\   	prodshaperq   s        r`   generatez_TestLinearFilter.generate  s^    's3E59I	KK9q=)4%%

1e$A!!!R((rb   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   rY   emptyr  nditertyper  strr  )r[   arrr\   r   iterrq   rr   r   s           r`   r  z_TestLinearFilter.convert_dtype  s    ::#&**S/C((399djj1C99c3Z)M)B${m46D *11R5)#*J #4::s3 R,**  ::c://rb   r   z/XXX https://github.com/scipy/scipy/issues/23539rH   c                 t   j                  dg      j                  dg      j                  ddg      }}}t        j                  t        d      5  t	        j                  d      ||       ddd       t        j                  t        d      5  t	        j                  g       ||       ddd       t        j                  t        d      5  t	        |j                  d      |       ddd       t        j                  t        d      5  t	        |j                  g       |       ddd       t        j                  t        d	      5  fd
|||fD        \  }}}t	        |||       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   rxY w# 1 sw Y   yxY w)z"Verify all exceptions are raised. rP   rQ   rK   rL   z^Parameter b is notrA  Nz^Parameter a is notz^Parameter's dtypes produced c              3   Z   K   | ]"  }j                  |j                  d        $ yw)Fr  N)r   r   )rL  v_r\   s     r`   rN  z8_TestLinearFilter.test_invalid_params.<locals>.<genexpr>8  s$     PryyRYYUy;Ps   (+)rY   r  r   r   r   r  NotImplementedError)r[   r\   r^   r]   rq   s    `   r`   r   z%_TestLinearFilter.test_invalid_params+  s_    **aS/2::qc?BJJ1v4Fa1]]:-BC 	%BFF1Iq!$	%]]:-BC 	*BJJrNAq)	*]]:-BC 	%Arvvay!$	%]]:-BC 	*Arzz"~q)	*]].6UV 	Pq!QiPGAq!Aq!	 		% 	%	* 	*	% 	%	* 	*	 	s<   E=F
FF" F.=F
FF"F+.F7c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g d|      }t        t        |||      |       y )NrN   rP   r   r        ࿩r   rQ   rL   rN   r   r  r  r  r:   r   r[   r\   rq   r^   r]   y_rs         r`   test_rank_1_IIRz!_TestLinearFilter.test_rank_1_IIR;  sd    MM$#2w+T{B/  !5r:!'!Q"2C8rb   c                     | j                  d|      }| j                  ddg|      }| j                  dg|      }| j                  g d|      }t        t        |||      |       y )Nr  rP   r   rP   rK   rM   r   r  r  r  s         r`   test_rank_1_FIRz!_TestLinearFilter.test_rank_1_FIRB  sb    MM$#1vr*sB'  !4b9!'!Q"2C8rb   z*XXX https://github.com/cupy/cupy/pull/8677c                 D   | j                  d|      }| j                  g d|      }| j                  ddg|      }| j                  ddg|      }| j                  g d|      }| j                  dd	g|      }t        ||||
      \  }}	t        ||       t        |	|       y )Nr  rP   r   r   r  r  rP   rQ   )rP   rM   r(  r  r   rf  r  zir  r  r   r:   
r[   r\   rq   r^   r]   r  r  zf_rrr   zfs
             r`   test_rank_1_IIR_init_condz+_TestLinearFilter.test_rank_1_IIR_init_condI  s    MM$#z2.T{B/A+  !6;!!2s)R01aB'2!!S)!"d+rb   c                 B   | j                  d|      }| j                  g d|      }| j                  dg|      }| j                  ddg|      }| j                  g d|      }| j                  ddg|      }t        ||||      \  }}	t        ||       t        |	|       y )Nr  r  rP   )rP   rQ   rK   rN   r(  r  r(  rM   r  r  r  s
             r`   test_rank_1_FIR_init_condz+_TestLinearFilter.test_rank_1_FIR_init_condU  s    MM$#y"-sB'A+  !5r:!!1a&"-1aB'2!!S)!"d+rb   c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g dg dg dg dg|      }t        |||d      }t        ||       y )	NrL   rK   rP   r   r  r   rQ   rL   rN   rL   rQ   r   r  r  )r[   r\   rq   r^   r]   y_r2_a0rr   s          r`   test_rank_2_IIR_axis_0z(_TestLinearFilter.test_rank_2_IIR_axis_0a  sy    MM&"%2w+Sz2.$$iI&/&1246Aq!!$!'1-rb   c                     | j                  d|      }| j                  ddg|      }| j                  ddg|      }| j                  g dg dg dg dg|      }t        |||d	      }t        ||       y )
Nr  rP   r   r  r   rQ   r   rN   r  rN   rW   r  rW   rk  irk  r  r  )r[   r\   rq   r^   r]   y_r2_a1rr   s          r`   test_rank_2_IIR_axis_1z(_TestLinearFilter.test_rank_2_IIR_axis_1j  sy    MM&"%2w+Sz2.$$i])&+,.0Aq!!$!'1-rb   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|      \  }}	t        ||       t        |	|       y )Nr  rP   r   r  )rL   rP   r  )r   r   )r  r  )rn  rn  )r  r  iir  r  )r  r  r   ri  r  r   r:   )
r[   r\   rq   r^   r]   r  	y_r2_a0_1r  rr   r  s
             r`    test_rank_2_IIR_axis_0_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_0_init_conds  s    MM&"%2w+Sz2.3&&	:}+(-.02	!!"5r:1bjj=I1aaB/2!)Q/!"d+rb   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	|
      \  }}	t        ||       t        |	|       y )Nr  rP   r   r  rP   rK   )rP   rK   rM   )rM   rK   rP   )r  r  r   r  )r  r  r   ri  r   r:   )
r[   r\   rq   r^   r]   r  	y_r2_a0_0r  rr   r  s
             r`    test_rank_2_IIR_axis_1_init_condz2_TestLinearFilter.test_rank_2_IIR_axis_1_init_cond  s    MM&"%2w+Sz2.4&&	9(19(>?AC	!!?"3R81aaB/2!)Q/!"d+rb   c                 f  	
 | j                  d|      }| j                  ddg|      }| j                  ddg|      }t        t        |||f      \  	
}t	        |j
                        D ]F  }t        ||||      }t        j                  	
fd||      }t        ||j                  |             H y )NrL   rK   rQ   rP   r   r  c                     t        |       S r  r   wrz  r  s    r`   <lambda>z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>      dA0F rb   r  r  r\  rC   r   ndimr   r   apply_along_axisr:   rY   r[   r\   rq   r^   r]   x_npr  rr   r  rz  r  s            @@r`   test_rank_3_IIRz!_TestLinearFilter.test_rank_3_IIR  s    MM)R(2w+Sz2.01a)<dD!&&M 	:D1a&A%%&FdSC%aC9	:rb   
inaccuratec                    | j                  d|      }| j                  ddg|      }| j                  ddg|      }t        |j                        D ]  }t	        |j
                        }d||<   | j                  |j                  |      |      }| j                  dg|      }t        |||||      \  }	}
t        t        |||f      \  fd}fd}t        j                  ||t        |            }t        j                  ||t        |            }t        |	|j                  |             t        |
|j                  |              y )Nr  rP   r   r  c                 (    t        |       d   S Nr  r   r  r  rz  r  zi1_nps    r`   lf0z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0      tT18;;rb   c                 (    t        |       d   S Nr  rP   r  r  s    r`   lf1z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1  r  rb   )r  r  r   r  r  r  ri  r   r\  rC   r   r  r:   rY   )r[   r\   rq   r^   r]   r  zi_shaper  zi1rr   r  r  r  r  r  rz  r  r  s                  @@@r`   test_rank_3_IIR_init_condz+_TestLinearFilter.test_rank_3_IIR_init_cond  s.   MM)R(2w+Sz2.!&&M 	<DAGG}HHTN##BGGH$5r:B$$aS"-CAq!T2.EAr!$%6As!DD$<<%%c41B11EFC&&sD2CA2FGD%aC9%b"**T*:;	<rb   c                 d  	
 | j                  d|      }| j                  g d|      }| j                  dg|      }t        t        |||f      \  	
}t	        |j
                        D ]F  }t        ||||      }t        j                  	
fd||      }t        ||j                  |             H y )Nr  r  rP   c                     t        |       S r  r  r  s    r`   r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>  r  rb   r  r  s            @@r`   test_rank_3_FIRz!_TestLinearFilter.test_rank_3_FIR  s    MM)R(z2.sB'01a)<dD!&&M 	:D1a&A%%&FdSC%aC9	:rb   c                    | j                  d|      }| j                  g d|      }| j                  dg|      }t        t        |||f      \  }t	        |j
                        D ]  }t        |j                        }d||<   | j                  |j                  |      |      }| j                  ddg|      }	t        |	      t        |||||      \  }
}t        t        |||	f      \  fd}fd}t        j                  |||      }t        j                  |||      }t        |
|j                  |             t        ||j                  |              y )Nr  r  rP   rQ   c                 (    t        |       d   S r  r  r  s    r`   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0  r  rb   c                 (    t        |       d   S r  r  r  s    r`   r  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1  r  rb   )r  r  r\  rC   r   r  r  r  ri  r   r   r  r:   rY   )r[   r\   rq   r^   r]   r  r  r  r  r  rr   r  r  r  r  r  rz  r  r  s                   @@@r`   test_rank_3_FIR_init_condz+_TestLinearFilter.test_rank_3_FIR_init_cond  sB   MM)R(z2.sB'01a)<dD!&&M 	<DAGG}HHTN##BGGH$5r:B$$aVR0C&s+FAq!T2.EAr!$%6As!DD$<<%%c46C&&sD$7D%aC9%b"**T*:;	<rb   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        ||||
      \  }
}t        |
|       t        |	|       t        t        t        |||d|j                  |             y )N)rL   rM   r	  r   r  bar  r   rP   rL   rM   r  r   )
r  r   r   r  r  ri  r   r:   r   r   )r[   r\   rq   r^   r]   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings               r`   test_zi_pseudobroadcastz)_TestLinearFilter.test_zi_pseudobroadcast  s    MM*b)}}QD11q"%q"%''!*q. $$RWWaG_%=rB$$RWWaG_%=rB!!Qg6!!Qg6!&&1!'73 	j'1aB8HIrb   c                     | j                  d|      }| j                  g d|      }| j                  dg|      }| j                  g d|      }t        ||d   |      }t        ||       y )NrN   r  rP   )r   rP   rQ   rQ   rQ   rQ   r   r  )r[   r\   rq   r^   r]   r  rr   s          r`   test_scalar_az_TestLinearFilter.test_scalar_a  si     MM!R z2.sB'  !3R8AqtQ!!S)rb   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|      \  }}	t        ||       t        |	|       t        ||d   |d|      \  }
}t        |
|       t        ||       y )N)rK   rQ   rM   r   rM   )rP   r   r   )rK   rP   rL   rP   rQ   rK   )rK   rQ   rL   rL   r   r   )r  r  r   ri  rY   r   r   r:   )r[   r\   rq   r^   r]   r  zf_expected
y_expectedy_iirzf_iiry_firzf_firs               r`   test_zi_some_singleton_dimsz-_TestLinearFilter.test_zi_some_singleton_dims  s   
 rxx	x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!%4!&+6  1Q4B3v!%4!&+6rb   c           	          | j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }t        t        t        |||||       y r  )r  r   r   r   )r[   r^   r]   rq   r  r  r\   s          r`   base_bad_size_ziz"_TestLinearFilter.base_bad_size_zi  s^    q"%q"%q"%B'j'1aD"=rb   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 )NrN   rP   r   r   r   rP   rQ   r  r   rP   rQ   rK   rW   r  rQ   )r   rP   rQ   rK   rL   rM   rd   rK   rL   rM   )rL   rM   rN   r   )r   rP   rQ   rK   rL   rM   rN   r   r   r   r(  )r   r  r   r   rY   )r[   r\   r  r  s       r`   test_bad_size_ziz"_TestLinearFilter.test_bad_size_zi  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rb   c                    | j                  d|      }| j                  dg|      }| j                  dg|      }| j                  g |      }t        ||||      \  }}t        ||       |j                  t        | j                  t              rt        || j                        n| j                  k(  sJ t        |      dk(  sJ y )N)rM   rP   r  r   )	r  r  r   r:   r   r  r  r  r=   )r[   r\   rq   r]   r^   r  rr   r  s           r`   test_empty_ziz_TestLinearFilter.test_empty_zi  s    MM$#sB'sB'B'1aB'2!!Q'xx)$**c: $B

3!%- 	- - r{arb   rF   z jax does not support inplace opsr]   rP   )rP   r        ?rQ   )rQ   rP   rK   )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                  |            }
t        |	|
       y )Nz0cupy does not supoprt scalar filter coefficientsrN   )r  r  r  rP   r  )r9   r  rm  rx  r  r  r  r  r=   r  r   r#   r[  r:   )r[   r]   r\   rq   r^   r  r  Kr@  zi_1zi_2s              r`   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!$-rb   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 )NrP   rQ   r   )r   r   r#   r  s    r`   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Krb   array_api_strictz-int64 and float64 cannot be promoted togetherzjax dtype defaults differc                 h   | j                  dg|      }| j                  dg|      }t        |||j                  ddg            }t        |||j                  ddg            }t        |||j                  ddg            }t        ||       | j                  t
        k(  ri nddi}t        ||fi | y )NrP   r  r   TFr  )r  r#   rY   r5   r   object)r[   r\   r]   r^   r  r%  r&  check_dtype_args           r`   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4O4rb   c                 B   | j                  dg|      }| j                  g d|      }| j                  ddg|      }| j                  dg|      }| j                  dg|      }| j                  ddg|      }t        ||||      \  }}	t        ||       t        |	|       y )	NrP   r  rQ   r   rl  rO  r  r  r   r:   
r[   r\   r]   r^   r  rq   yezferr   r  s
             r`   test_short_x_FIRz"_TestLinearFilter.test_short_x_FIR  s     sB'z2.A+tR(b)  !S2.1aB'2!!R(!"c*rb   c                 D   | j                  ddg|      }| j                  g d|      }| j                  ddg|      }| j                  dg|      }| j                  dg|      }| j                  ddg|      }t        ||||	      \  }}	t        ||       t        |	|       y )
NrP   r  rQ   r   rl  rO  ir0  r  r1  r2  s
             r`   test_short_x_IIRz"_TestLinearFilter.test_short_x_IIR  s     1vr*z2.A+tR(b)  #sR01aB'2!!R(!"c*rb   c                 6   | j                  d|      }| j                  ddg|      }t        ||      }| j                  ddg|      }t        ||      }| j                  g d|      }t        |||      }t	        ||       t        ||       t        ||       y )Nr  rP   r   r  r  r  r  r  r  r<   r   r:   r5   	r[   r\   rq   r^   b0r]   a0r  y_fs	            r`   test_do_not_modify_a_b_IIRz,_TestLinearFilter.test_do_not_modify_a_b_IIR  s    MM$#2w+Q2T{B/Q2  !5r:aA!#s+22rb   c                 4   | j                  d|      }| j                  g d|      }t        ||      }| j                  dg|      }t        ||      }| j                  g d|      }t        |||      }t	        ||       t        ||       t        ||       y )Nr  r  r  rQ   )r   r  rP   rQ   rK   re  r9  r:  s	            r`   test_do_not_modify_a_b_FIRz,_TestLinearFilter.test_do_not_modify_a_b_FIR  s    MM$#y"-Q2sB'Q2  !6;aA!#s+22rb   Tr  r  r^   c                     t         j                  j                  d      }|j                  |      }t	        t        |j                  dg      |j                  dg      |      t        |||             y )NrR   r  )r   r   r   rY   r4   r   )r[   r]   r^   r\   r  s        r`   test_scalar_inputz#_TestLinearFilter.test_scalar_input  sZ     yyr"zz$BJJu%rzz3%'8$?Aq$	
rb   N)*r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r@   r#   r'  r)  r.  r5  r7  r>  r@  r   r  rB  r  rb   r`   r  r    s   )0 f%VW X99 f%QR	, S	, f%QR	, S	,.. f%QR, S, f%QR, S,: vl3< 4<*	: vl3< 4<. f%QRJ SJ* f%QR* S* f%QR7 S7:> f%:;gL <gLR  k*LM[[S1qc<QC"K!$  &w.  & N.$ wL  L #R k*EFw5   G
5 f%QR+ S+ f%QR+ S+

 d#[[S3xrxx}"=>[[S3xrxx}"=>
 ? ? $
rb   r  c                       e Zd ZdZy)TestLinearFilterFloat32r   Nr  r  r  r   r  rb   r`   rD  rD        Erb   rD  c                       e Zd ZdZy)TestLinearFilterFloat64r   NrE  r  rb   r`   rH  rH  	  rF  rb   rH  r  c                   0    e Zd Z ej                  d      Zy)TestLinearFilterFloatExtendedr0  Nr  r  r  r   r   r  rb   r`   rJ  rJ  	      BHHSMErb   rJ  c                       e Zd ZdZy)TestLinearFilterComplex64r   NrE  r  rb   r`   rN  rN  	  s    Erb   rN  c                       e Zd ZdZy)TestLinearFilterComplex128r   NrE  r  rb   r`   rP  rP  	  s    Erb   rP  c                   0    e Zd Z ej                  d      Zy)TestLinearFilterComplexExtendedGNrK  r  rb   r`   rR  rR  	  rL  rb   rR  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  Nrb  r  rb  rd  )hasattrsysrU  r  r  r   r  r   r  s    r`   test_lfilter_bad_objectrY  	  sc     sJC3<<$7=>)WsecU4DE)WsedV_E)Wtfse_Erb   c                 >    t        t        t        ddgddgg d       y )NrQ   rK   rL   rM   )rP   rQ   rK   rL   rM   )r   r  r   r  s    r`   !test_lfilter_notimplemented_inputr[  $	  s     %w1!ukJrb   rE  r  rF   zfails all aroundrH   c                       e Zd Zd Zd Zd Z edd      d        Zd Zd	 Z	d
 Z
d Z edd      d        Z edd      d        Z edd      d        Zy)TestCorrelateRealc                     |j                  ddd|      }|j                  ddd|      }|j                  g d|      }|||fS )Nr   rK   rL   r   rP   rQ   )r   rQ   rM   r   rK   )r  rY   r[   rE  r\   r]   r^   r  s         r`   _setup_rank1zTestCorrelateReal._setup_rank13	  sL    KK1arK*KK1arK*jjj3!Syrb   c                     d}	 t        j                  |      }t        |d      r+t        dt        j                  |j
                        z        }|S # t        $ r Y |S w xY w)NrN   
resolutionr  )r   r  rW  rm  log10rb  	Exception)r[   res_dtr  dt_infos       r`   equal_tolerancez!TestCorrelateReal.equal_tolerance:	  sb    	hhv&Gw-d288G,>,>#??@   		s   AA 	AAc                     |t         j                  k(  r| j                  t         j                        S | j                  |      S r  )r   r  rg  r   )r[   re  s     r`   equal_tolerance_fftz%TestCorrelateReal.equal_tolerance_fftE	  s6     R]]"''

33''//rb   Tz	order='F'rx   c                 `   t        ||      }| j                  ||      \  }}}t        ||d      }t        ||d      }t        ||| j	                  |j
                               t        ||| j                  |j
                               |j
                  |k(  sJ |j
                  |k(  sJ y )Nr
   r   r   r  )r  _setup_rank3r   r:   ri  r   rg  )r[   rE  r\   r]   r^   r  y_ffty_directs           r`   test_methodzTestCorrelateReal.test_methodM	  s    R_%%b"-	1c!Qu-Q(3!#u*.*B*B5;;*O	R!#x*.*>*>x~~*N	Q{{b   ~~###rb   c                    t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  ||      \  }}}t        ||d      }t        ||dd        |j                  |k(  sJ t        ||d      }t        ||j                  |dd              |j                  |k(  sJ y )Nr  $torch does not support unsigned intsr   rP   rL   )r7   r  r  r  r  r  r`  r   r:   r   r[  r[   rE  r\   r]   r^   r  rr   s          r`   test_rank1_validz"TestCorrelateReal.test_rank1_valid\	  s    B<B"@@;;=> *2s 3WR_%%b"-	1caG$!!S1X.ww"}} aG$!!RWWS1X%67ww"}}rb   c                    t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  ||      \  }}}t        ||d      }t        ||d d        |j                  |k(  sJ y )Nr  rp  re   r   
r7   r  r  r  r  r  r`  r   r:   r   rq  s          r`   test_rank1_samez!TestCorrelateReal.test_rank1_samek	  sz    B<B"@@;;=> *2s 3WR_%%b"-	1caF#!!S"X.ww"}}rb   c                    t        |      r|dv rt        j                  d       t        |t              rt        ||      n|}| j                  ||      \  }}}t        ||d      }t        ||       |j                  |k(  sJ y )Nr  rp  r   rt  rq  s          r`   test_rank1_fullz!TestCorrelateReal.test_rank1_fullv	  st    B<B"@@;;=> *2s 3WR_%%b"-	1caF#!!S)ww"}}rb   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   rz  r8  )rQ   rL   rM   F)orderrV   r6  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     @r`  )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   r_  s         r`   rk  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rb   c           	      b   t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||d      }t        ||ddddddf          |j                  |k(  sJ t	        ||d      }t        ||ddddddf   d d dd d dd d df          |j                  |k(  sJ y )Nr   rP   rQ   rL   rK   rM   r   )r  r  r  rk  r   r:   r   rq  s          r`   test_rank3_validz"TestCorrelateReal.test_rank3_valid	  s     *2s 3WR_%%b"-	1caG$!!S1ac1Q3%78ww"}} aG$!!S1ac1Q3%7"ddDbD8H%IJww"}}rb   c                     t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||d      }t        ||ddddddf          |j                  |k(  sJ y )Nre   r   r   rP   r  r  r  r  rk  r   r4   r   rq  s          r`   test_rank3_samez!TestCorrelateReal.test_rank3_same	  sp     *2s 3WR_%%b"-	1caF#3qtQrT1R4/01ww"}}rb   c                     t        |t              rt        ||      n|}| j                  ||      \  }}}t	        ||      }t        ||       |j                  |k(  sJ y r  r  rq  s          r`   test_rank3_allz TestCorrelateReal.test_rank3_all	  sU     *2s 3WR_%%b"-	1caO3ww"}}rb   N)r  r  r  r`  rg  ri  r  rn  rr  ru  rw  rk  r  r  r  r  rb   r`   r]  r]  *	  s    	0 d;7$ 8$		< d;7
 8
 d;7 8 d;7 8rb   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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       r`   r   z!TestCorrelate.test_invalid_shapes	  ss     IIaO##F+IIb!$$V,j)Jq!fJ8IJj)Jq!fJ8IJrb   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       r`   r   z!TestCorrelate.test_invalid_params	  sd    j)Q?j)QuMj)QhOj)QwOj)QwOrb   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     r`   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!4rb   r   )cpu_only
exceptionsrF   zdtype differsrH   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 )NrO   rL   rM   re   rf   )rM   r  rV   r   )r   rU   rV   r   )rN   r   rU   rV   rW   r   rU   )rY   r4   r   r   s       r`   test_numpy_fastpathz!TestCorrelate.test_numpy_fastpath	  s     JJy!JJ1v	!QV4bjj6MNJJy!JJy!	!QV4bjj6NO	!QV4bjjAT6UV	!QW5rzz2$7GHrb   N)r  r  r  r  r   r   r  r  r  rb   r`   r  r  	  s     d#
K $
K d#P $P d#5 $5 t9k/:	I ; :	Irb   r  rg   r   re   r   behindF
input_sizer  ro  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   rR   rf   )r   r   r   r  rm  concatenater   r   r   argmaxr5   r  )rg   r  r  r\   r   in1offsetin2r   correlationlags	lag_indexs               r`   test_correlation_lagsr  	  s     ))


"C


j
)CBFnnc11&93?@7 &'lC40KCHHchhT:D		+&IDOX.::*****rb   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 invalidrA  r  asdfghrf   )r  r   r   r   r  s    r`   "test_correlation_lags_invalid_moder  
  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 )Nro  rN   )r9  rU   rQ   rK   )r6   r   r  cdoubler  bitsrm  )r[   rE  r\   precs       r`   r  zTestCorrelateComplex.decimal 
  sN    B<B"..0B Arxx|0011t8a<  rb   c                 @   t         j                  j                  d      }t         j                  j                  d      j	                  |      }|d|j                  d      j	                  |      z  z  }t         j                  j                  d      j	                  |      }|d|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 )Nr(  rR   r   r   rf   )
r   r   r  r   r   r  r   r  imagrY   )r[   rE  rg   r\   r   r]   r^   r  s           r`   r`  z!TestCorrelateComplex._setup_rank1(
  sH   ii##A&IIOOB&&r*	R#%%b)00444IIOOA%%b)	R#%%a(//333d3d345;VBZ 	riT::qvvqvvD9: ; 	; JJqM2::a="**S/c1!Syrb   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  )r`  r  r   r:   r  r   conjr[  r[   r  r\   r]   r^   r  rE  rr   s           r`   rr  z%TestCorrelateComplex.test_rank1_valid7
  s    %%gw;	1cR!aG$!!S$,,r22FGww"}} aG$!!RWWRWWS\%:*.,,r2*>	@ww"}}rb   c                     | j                  |d|      \  }}}t        ||      }t        ||d      }t        ||| j	                  ||             |j
                  |k(  sJ y )Nre   r  r`  r  r   r:   r  r   r  s           r`   ru  z$TestCorrelateComplex.test_rank1_sameD
  s]    %%gvr:	1cR!aF#!!S$,,r22FGww"}}rb   c                     | j                  |d|      \  }}}t        ||      }t        ||d      }t        ||| j	                  ||             |j
                  |k(  sJ y )Nr   r  r  r  s           r`   rw  z$TestCorrelateComplex.test_rank1_fullL
  s]    %%gvr:	1cR!aF#!!S$,,r22FGww"}}rb   c                     t        ||      }|j                  g d|      }|j                  g d|      }t        ||      }t        ||j                  g d      dd       y )Nr   rm   r  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      r   Fr  )r  rY   r   r4   )r[   r  r\   rE  r   krr   s          r`   test_swap_fullz#TestCorrelateComplex.test_swap_fullS
  s[    R!JJ/rJ:JJ7rJBaOrzzNO5	
rb   c                     |j                  g d      }|j                  g d      }t        ||d      }t        ||j                  g d             y )Nr  r  re   rf   )r  r  r  )rY   r   r4   )r[   r  r\   r   r  rr   s         r`   test_swap_samez#TestCorrelateComplex.test_swap_same]
  sB    JJ/0JJ78a(2::&ABCrb   r   notimplementederrorrH   c                    t        |      rt        dk7  rt        j                  d       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 )Ncpuz)error tolerances exceeded with JAX on gpurH   rR   r   rN   r   rL   r   rP   r  )r8   rB   r  xfailr   r   r   r   r   r  r  rY   r  r:   r  r   r  s           r`   
test_rank3zTestCorrelateComplex.test_rank3c
  s   ":,%/LL KL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"}}rb   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   rP   r  rp   F)check_shape              @rL   )r   r  r   r   r   r  r   r  r  rY   r:   r  r   r5   )r[   r  r\   r]   r^   rE  r  rr   s           r`   
test_rank0zTestCorrelateComplex.test_rank0w
  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$)	+rb   N)r  r  r  r  r`  rr  ru  rw  r  r  r  r  r  r  rb   r`   r  r  
  s[    !
D f%:; <& d#+ $+rb   r  c                       e Zd Z eej
                        d        Z ed       eej                        d               Z	 ed       eej                        d               Z
 eej                        d        Z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 NrM   r  r  rf   r   )r   r   r  rY   r   r;   r   )r[   r\   r]   r^   rg   a_xpb_xpnp_corr_results           r`    test_consistency_correlate_funcsz0TestCorrelate2d.test_consistency_correlate_funcs
  s     IIaLHH]#- 
	@DA

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

> :< w!#a!>#F$4$4T4d$K$&JJ~$>@
	@rb   Tr  c           
         t        j                  d      }t        j                  g d      }dD ]  }t        t        j                  t        j                  |g|g|            t        j                  |||             |dk(  sVt        t        j                  t        j                  |g|g|            t        j                  |||              y r  )r   r   r  r;   r  r   r   r   )r[   r\   r]   r^   rg   s        r`   "test_consistency_correlate_funcs_2z2TestCorrelate2d.test_consistency_correlate_funcs_2
  s     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rb   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       r`   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Srb   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 )
NrP   rp                 F)r  r  r  y      @        rL   y              (@)r5   r   r   rY   r  s     r`   test_complex_inputz"TestCorrelate2d.test_complex_input
  s    **2::se+<bjj2$>PQ

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

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

C5)u%	Qrb   N)r  r  r  r@   r   r   r  r  r   r  r   r  r  rb   r`   r  r  
  s    v''(@ )@  d#v))*G + $G  d#v))*
T + $
T v))*Q +Qrb   r  c                       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 specificrx   c                 b    |j                  ddg      }t        g dg d      }t        ||       y )Nr  rc  r  r  rb  r  rc  r  rY   r   r:   )r[   r\   zi_expectedr  s       r`   test_array_likezTestLFilterZI.test_array_like
  s+    jj#t-)9:!"k2rb   c                     |j                  g d      }|j                  g d      }|j                  ddg      }t        ||      }t        ||       y )Nr  r  r  rc  r  )r[   r\   r]   r^   r  r  s         r`   ra   zTestLFilterZI.test_basic
  sG    JJ'(JJ'jj#t-1!"k2rb   c                     |j                  g d      }|j                  g d      }t        ||      }t        d|z  d|z        }t        ||d       y )N)rb  r   rM   )r  rP   r   rQ   r  r   )rY   r   r4   )r[   r\   r^   r]   r  zi2s         r`   test_scale_invariancez#TestLFilterZI.test_scale_invariance
  sL     JJ{#JJ{#A1ac"Su-rb   r   r   r   c                     t        ||      }|j                  d|      }|j                  dg|      }t        j                  ||      j
                  |k(  sJ y )Nr   r   rP   )r  r  rY   r   r   r   )r[   r   r\   r^   r]   s        r`   r  zTestLFilterZI.test_types
  sU    E"HHaH&JJs%J(  A&,,555rb   N)r  r  r  r  r  ra   r  r  r  r  r  r  rb   r`   r  r  
  sS     d+KL3 M3
3. [[Wy)&<=6 >6rb   r  c                       e Zd ZdZ	 	 ddZ edd      d        Z edd      d        Z edd      d	        Z ed
d      d        Z	 ed
d      d        Z
 ed
d      d        Z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   rY   r   r   r&   )r[   zpkrq   r  r  padlenr   irlenr\   r^   r]   r  s               r`   r   zTestFiltFilt.filtfilt
  s    %3<DAq::a="**Q-qAAq!T7FFEJJ5(3-C**S/CsAtWf== )rb   r   negative stridesrH   c                 v   t        |      r%| j                  dk(  rt        j                  d       t	        |j                  g d      |j                  g d            }| j                  ||j                  d      |      }t        |      rdnd}t        ||j                  d|j                  	      |
       y )Nr  sosfilt works in-placerH   r  rW   r  g&.1>g6{=r   r   )r8   r  r  r  r(   rY   r   r   r9   r4   r   )r[   r\   r  r   r   s        r`   ra   zTestFiltFilt.test_basic   s    ":$,,5KK78RZZ
+RZZ
-CDmmC22m6bkdxRYYrY<4Hrb   c                 H   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
|j                  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  rH     r   r  rP   rR   i  r         ?r  r  r   )r  r\   r   r  r  r\   )r8   r  r  r  r  r  r   r  r   rY   r'  r  rm  ceillogr   vstackr  ry  r5   )r[   r\   r$  r  xlowxhighrq   r  repsr   rr   errx2dy2dy2dts                   r`   	test_sinezTestFiltFilt.test_sine
  s   ":$,,5KK78KK3q)vvebeema'(w*+5LQ

5)%8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$rb   c           
         t        |      r%| j                  dk(  rt        j                  d       t	        j
                  d      j                  ddd      }|j                  |      }t        d|j                  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  rH   g     @rR   r  rW   rK   r  r  r  r   r  rP   rQ   )r8   r  r  r  r   r   r   rY   r   r   r  r5   )r[   r\   rq   r  r?  r@  rv  s          r`   	test_axiszTestFiltFilt.test_axis0  s+   ":$,,5KK78 II()11"b"=JJqMQ

5)%8]]3!!];]]BKK1a01!!  
 	BJJr{{2q!'<=>]]BKK1a01!!  
 	BJJr{{2q!'<=>rb   Tz-python scalars in array_namespace are np-onlyrx   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  rP   rR   r   r   r   )r  r   r   rY   r   r   r4   )r[   r\   r   s      r`   test_acoeffzTestFiltFilt.test_acoeffC  si     %ooJJBx !RYYrY%D
 	RYYrY<5uUrb   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  rb  r  r  r   r  r  rP         ?r  )r  r  r  rY   r/   r4   )r[   r\   rq   r^   r]   rr   z1z2s           r`   test_gust_simplezTestFiltFilt.test_gust_simpleN  s%   %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	
rb   c                     | j                   dk7  rt        j                  d       |j                  d      }d}d}t	        |||d      }||z  dz  |z  }t        ||       y )	Nr  r  rW   rd  rb  gustr   rQ   )r  r  r  r   r   r4   )r[   r\   rq   r^   r]   rr   r   s          r`   test_gust_scalarszTestFiltFilt.test_gust_scalars_  sc     %KK>? IIbMQ1V,aC!8a<8$rb   )r   oddNry  NN)r  r  r  r  r   r  ra   r  r  r   r  r	  r  rb   r`   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%rb   r  c                   J    e Zd ZdZ edd       edd      d               Zy)	TestSOSFiltFiltr  rF   r  rH   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  rP   rN   ffffff?r  r  r  zorder=)r   err_msgN)r   r   r   r   rY   r   r   r   r   r   r\  r   r&   r4   )
r[   r\   rq   rz  r  r^   r]   r  rr   y_soss
             r`   test_equivalencez TestSOSFiltFilt.test_equivalences  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rb   N)r  r  r  r  r  r  r  rb   r`   r  r  o  s4    Mk*BCg&89L : DLrb   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.rP   Nr  r   r   rQ   )r  rC  r   r   sum)icsr^   r]   rq   mz0fz0br=  y_fby_by_bfvalues               r`   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'(rb   rP   Nr  r  r  TF)r   xtolftolmaxfunmaxiterfull_outputdispr   z3minimization failed in filtfilt_gust_opt: warnflag=r   r  )	r  rC  r   r   r  r  r   r"  r   )r^   r]   rq   r  r  r  r  rl  optfoptniterfuncallswarnflagr  r  r  rr   s                    r`   filtfilt_gust_optr)    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;rb   c                 X   t         j                  j                  d      }|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   rP   r   r  r   )r   r   r  r  r   r/   r  r  
empty_liker  rC  r  r   r   r)  r4   )r^   r]   r  r  r  r   rq   rr   ygzg1zg2xx	out_shaper  r  zo1zo2r   indxs                      r`   check_filtfilt_gustr4    s   
))


$CE"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   -F'rR   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  )rP   rQ   )r   rN   r   rf   T)rg   measure>   r
   r   r
   r   rR   
complex256
complex192r   l         @ )r   r   r   r   r  dictkeysrW  ri  r  r  r   )r\   rg   r  r   r  true_methodrq   r/  r   
method_trytimesnot_fft_conv_supps               r`   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>>>/?rb   c                     dD ]V  }d}dD ]M  }t        t        |      st        j                  ||      }|j                         }t	        |||      dk(  rMJ  X y )Nr  rR   r7  r   rf   r   )rW  r   ri  r  r   )r\   rg   r   r?  rq   r/  s         r`   test_choose_conv_method_2rB    sh    ) G!= 	Gr,-GGA%67FFH)!QT:hFFF		GGrb   c           	         t        j                  ddddd      \  }}}d}t        j                  t        j                  |            }t        t        j                  t        j                  |      t        j                  |      z              }t        |||      \  }}d |fD ]?  }	d|z  }
t        |||
fd	|	       t        d      D ]  }g d
}|
||<   t        |||||	        A d|z  dz
  }t        |||fd	|       y )NrK   {Gz?x   gffffff?r  r  r  rM   r   r   rQ   r
  )r   ellipr   r  r'  rm  r  r  r   r4  r   )r\   rs   pr  r  r  approx_impulse_lenr^   r]   r  
signal_lenr  r  lengths                 r`   test_filtfilt_gustrK    s    ll1dC>GAq! C
rvvayARWWRVVC[266!9%<=>!Q?DAq*+ 
:++
 	Aq:-E: !H 	:DE$E$K1eT59	:
: !!B&F1vi,>?rb   c                       e Zd Zd Zd Zd Zd Z edd      d        Z edd      d	        Z	 edd      d
        Z
 edd      d        Zd Zd Zd Zd Z edd      d        Z edd      d        Zy)TestDecimatec                     |j                  d      }t        t        t        j                  |dd       t        t        t        j                  |dd       y )NrW   r  rP   )qr   rQ   )r   r   r  r   decimater[   r\   rq   s      r`   test_bad_argszTestDecimate.test_bad_args  s7    IIbMi!sa@i!qC@rb   c                     |j                  d      }t        j                  |dddd      j                         }t	        ||d d d   j                  t                     y )NrW   rQ   rP   iirFr   ftype
zero_phaser   r   rP  roundr5   r   rx  r[   r\   rq   rr   s       r`   test_basic_IIRzTestDecimate.test_basic_IIR  I    IIbMOOAqAUuEKKM1SqS6==/0rb   c                     |j                  d      }t        j                  |dddd      j                         }t	        ||d d d   j                  t                     y )NrW   rQ   rP   firFrU  rX  rZ  s       r`   test_basic_FIRzTestDecimate.test_basic_FIR$  r\  rb   c                     |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   rQ   r   F)r  rW  )ro  r   rP   )r   ro  )r  r   rP  r  )r[   r\   rs   d0d1s        r`   
test_shapezTestDecimate.test_shape)  s\    HHX__Qe<xx8###__Qe<xx8###rb   Tztest code is NumPy specificrx   c                     t        j                         5  t        j                  ddt               | j	                  dd       d d d        y # 1 sw Y   y xY w)Nr@  Badly conditioned filterr^  Fr   rW  rE  rF  rG  r)   _test_phaseshiftr  s     r`   test_phaseshift_FIRz TestDecimate.test_phaseshift_FIR1  sQ    $$& 	B##4oG!!5!A	B 	B 	B   /AAc                     t        j                         5  t        j                  ddt               | j	                  dd       d d d        y # 1 sw Y   y xY w)Nr@  re  r^  Trf  rg  r  s     r`   test_zero_phase_FIRz TestDecimate.test_zero_phase_FIR8  sQ    $$& 	A##4oG!!4!@	A 	A 	Arj  c                 *    | j                  dd       y )NrT  Frf  rh  r  s     r`   test_phaseshift_IIRz TestDecimate.test_phaseshift_IIR?  s    Uu=rb   c                 *    | j                  dd       y )NrT  Trf  rn  r  s     r`   test_zero_phase_IIRz TestDecimate.test_zero_phase_IIRC  s    Ut<rb   c           	      ,   d}g d}d}t        j                  ||z  dz         t        |      z  }t        j                  |      dz  dz  }t        j                  dt         j
                  z  |d d t         j                  f   z  |z        t        j                  j                  |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 )NrE  )ro  r	  r   r8  r  rP   皙?rQ   rp   皙?r^  r   r  r  r  rT  r   g?FrV  rW  r   r  r  r   rZ  )r   r   rx  r  rx  r  r  r   windowstukeyr   dltir  cheby1freqzr  denr'  r=  rP  r  r  r  angler4   r  )r[   r   rW  r$  r%  t_totr  r&  r   r'  rO  r(  d_tosr   systemwc_h_respsr*  	h_resampssubnyqrl  s                         r`   rh  zTestDecimate._test_phaseshiftG  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#	2rb   c                    d}d}|j                  |      |z  }|j                  |j                  d|z        |j                  d|j                  z  |dz  z  |z        z        }t        |j                  |j                  |            |j                  d      dd	       t        j                  |d
d      }|j                  |j                  |            dk  sJ y )Ng      Y@r  rb  rQ   g      >@r  r   F)r   check_0dr   r^  )rV  rD  )	r   rY   sqrtr  r  r4   dotr   rP  )r[   r\   sfreqr   r  rq   x_outs          r`   test_auto_nzTestDecimate.test_auto_ny  s     IIaL5 JJrwwrAvBEE	US[0IA0M)NNO 	a)2::b>uU2U3wwuyy'(4///rb   c                     t        j                  |j                  d|j                        d      }t	        |j                  |            rJ y )Nr  r   rR   )r   rP  ri  r   r   isnanrQ  s      r`   test_long_float32zTestDecimate.test_long_float32  s>     OOBGGF"**G=rBrxx{####rb   c                     t        j                  t        j                  dt        j                        d      }|j
                  j                  t        j                  k(  sJ y )Nr  r   rR   )r   rP  r   ri  r   r   r  r   )r[   rq   s     r`   test_float16_upcastz TestDecimate.test_float16_upcast  s;    OOBGGCrzz:B?ww||rzz)))rb   rx  c                    d}d}d}t        j                  d|j                  d|j                  z  |z  dz        d|      \  }}}|j	                  t
              |j                  |j                  d|j                  z  |z  |z              z  }|j	                  t
              |j                  |j                  d|j                  z  |z  |z              z  }t        j                  |||      }|j                  d      |z  }	|j                  d|j                  z  |z  |	z        d	|j                  d
|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
  rM        @@rQ   r  )r  fsrp   r  r  r  Fru  Tr  vIh%<=r   )r   r   rY   r  r   rn  rx  rx  r   rP  r   r   r5   r   r4   )r[   r\   fcentrefwidthr  rs   rG  r  r  r  r   ynzpynzprefyzpyzprefs                  r`   test_complex_iir_dltiz"TestDecimate.test_complex_iir_dlti  s    --2::agfnQ.>#?',51aHHWrzz"ruu*w2Fr2I'J KKHHWrzz"ruu*w2Fr2I'J KK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<rb   c                    d}d}d}d}t        j                  ||dz  |      }t        j                  |      }|t        j                  dt        j
                  z  |z  |z        z  }|d   t        j                  |      z  }	t        j                  |	d	      }
t        j                  d
      |z  }t        j                  dt        j
                  z  |z  |z        dt        j                  dt        j
                  z  |z  |z        z  z   }t        j                  |d|
d      }t        j                  |	|d	d      d d }t        ||       t        j                  |d|
d      }t        j                  |d	d|	      }t        ||       y )Nr
  rM   r  r	  rQ   )r  rp   r   rP   r  r  r  Fru  )r+  r,  r  Tr  )r   r  r   rootsrx  r  polyrx  r   rP  upfirdnr5   r  )r[   r\   r  r  r  numtapsbbasezbasezrotbzr  r  r   r  r  r  r  s                    r`   test_complex_fir_dltiz"TestDecimate.test_complex_fir_dlti  sU     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$rb   N)r  r  r  rR  r[  r_  rc  r  ri  rl  ro  rq  rh  r  r  r  r  r  r  rb   r`   rM  rM    s    A
1
1
$ d+HIB JB d+HIA JA d+HI> J> d+HI= J=02d0$*
 d62= 3=B d62"% 3"%rb   rM  c                   l    e Zd 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  )rY   r   r   r   r   rQ  s      r`   rR  zTestHilbert.test_bad_args  s9    JJ
|$j'1-IIcNj'12rb   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   rQ   r  r   rP   r  rK   )r  r   r   r  r  r  r   r'  atan2r  r  r;   ri  r  )r[   r\   r  r  r  r<  a1a2a3r]   r/  h_absh_angleh_reals                 r`   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':rb   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 )Nrk  r   )rK   rN   r   r  r   r  r	  )r  r  )rK   r	  )r	  rK   )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)r  )r   r   r   r   r5   ry  r;   r  r   r  rY   )r[   r\   r]   aaaana0hilbs         r`   test_hilbert_axisNzTestHilbert.test_hilbert_axisN  s    JJryy2::y6?QR !,bdd3GAadG,bAh; a2B'yyG###qssbq)//7:::  F G( F#C1Ivr>Jrb   c                     |j                  |j                  d|j                        d      }t        |d      }dD ]?  }t        |j	                  |d|      |      }|j	                  ||d      }t        ||       A y )Ni   r   )rK   rM   r   r   r  r  )r   r   r   r   r  r5   )r[   r\   r]   r  r  aaps         r`   test_hilbert_axis_3dz TestHilbert.test_hilbert_axis_3d2  ss    JJryy"**y=yIQR  	%D"++aT2>C++c4,CB$	%rb   r   r   r   c                     t        ||      }|j                  d|      }|j                  t        |            j                  |k(  sJ y )Nr   r   )r  r  r  r   r   r  s       r`   test_hilbert_typeszTestHilbert.test_hilbert_types;  sB    E"88AU8+wwwx()//5888rb   N)r  r  r  rR  r  r  r  r  r  r  r  r  rb   r`   r  r    sC    3(;T$KL% [[Wy)&<=9 >9rb   r  c                      e Zd ZdZ edd      d        Zd Z edd	      d
        Zej                  j                  dddg      d        Zd Zd Zej                  j                  dg d       edd	      d               Zej                  j                  dg d      d        Z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        edd!	      d"                                    Z edd!	      d#        Zy$)%TestHilbert2z!Test function `signal.hilbert2`. Tlist inputs are numpy-specificrx   c                 &    t        g dg dg       y )NrO   r   )r   r  s     r`   r  zTestHilbert2.test_array_likeF  s    )Y'(rb   c                 L   |j                  |j                  d      d      }t        j                  t        d      5  t        |j                  dgg             ddd       t        j                  t        d      5  t        |d	       ddd       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   xxY w# 1 sw Y   SxY w# 1 sw Y   yxY w)z$Raise all exceptions in `hilbert2`. r   re  z^x must be real.rA  r   Nz^N must be positive.r   r  z#^When given as a tuple, N must holdr  r  )r   r   r  r   r   r   rY   rQ  s      r`   rR  zTestHilbert2.test_bad_argsJ  s    JJryy}f-]]:-?@ 	1RZZ*/0	1]]:-CD 	Q"	]]:-RS 	%Q)$	%]]:-RS 	"Q&!	" 	"	1 	1	 		% 	%	" 	"s/   C6=D.DD6C?DDD#r   z,CuPy's hilbert2 does not have axes= argumentrH   c                 :   |j                  |j                  d      d      }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   re  z!^axes must be a tuple of length 2rA  r  r  z"^axes must contain 2 distinct axesr  )r   r   r  r   r   r   rQ  s      r`   test_bad_args2zTestHilbert2.test_bad_args2V  s{    JJryy}f-]]:-PQ 	(QY'	(]]:-QR 	%QV$	% 	%	( 	(	% 	%s   B.BBBr   r   r   c                     t        ||      }|j                  d|      }|j                  t        j                  |            }|j
                  |k(  sJ y )N)rQ   rU   r   )r  r  r  r   r   r   )r[   r   r\   r  r   s        r`   test_hilbert2_typesz TestHilbert2.test_hilbert2_types^  sI    E"88G581ggfooh/0yyE!!!rb   c                     |j                  g d      }t        j                  |j                  |d            }t        j                  |j                  |d            }t	        ||j
                         y)zNeeded for 100% coverage )r  r  r  r  rc  rc  )rN   rP   rP   rN   N)rY   r   r   r   r4   ry  )r[   r\   rq   x0ax1as        r`   test_1d_inputzTestHilbert2.test_1d_inpute  sQ    JJ12oobjjF34oobjjF34SUU#rb   c                 r    |j                  d      }t        |d      }t        |d      }t        ||       y)z%Compare passing tuple to single int. r  rL   r  re  N)r  r   r5   )r[   r\   rq   x0_ax1_as        r`   test_parameter_NzTestHilbert2.test_parameter_Nl  s2    HHVQV$d#rb   r  ))rL   rM   )rM   rL   re  r  z)Bug in cupy implementation, see cupy#9396c                    |j                  ||j                        }|dxx   dz  cc<   |j                  t        j                  |            }t        |      }t        j                  |      }t        d|d   dz   dz        t        |d   dz   dz  d      }}t        d|d   dz   dz        t        |d   dz   dz  d      }
}	d}t        |||	f   |||	f   d	z  |
       t        |d|	f   |d|	f   dz  |
       t        ||df   ||df   dz  |
       t        |d   |d   |
       |||
f   }t        ||j                  |      |
       y)z8Compare desired and calculated values in Fourier space. r   r  r   rP   r   rQ   Nr  rL   r   )
ri  r   r  r  ifft2r   fft2r  r4   r  )r[   r  r\   x_frq   x_asx_as_ff0_posf0_negf1_posf1_negr   zz_as_fs                r`   test_quadrant_valuesz!TestHilbert2.test_quadrant_valuess  s`    gge2==g1E
a
GGFLL%&{T" q58a<A"56uQx!|PQ>QSW8Xq58a<A"56uQx!|PQ>QSW8Xvv~.FFN0Ca0GdSq&y)3q&y>A+=DIvqy)3vqy>A+=DItc$id;(w!7dCrb   c                    |d   dz  }|d   dz  }|j                  |      }d||dz
  |dz   f<   d||dz   |dz
  f<   t        j                  |      }|j                  t        j                  |            }|j                  t        |            dkD  sJ t        |      }t        ||j                  |      |j                  |j                        j                  dz         y)	zaTest that a real signal with Z[-p,-q] == np.conj(Z[p,q])
        produces a zero analytic signal.r   rQ   rP   r  r  r   r   N)r  r  	ifftshiftr  r  r  r'  r   r4   r  r  r   r  )r[   r  r\   c0c1r  rq   r  s           r`   test_zero_analytic_signalz&TestHilbert2.test_zero_analytic_signal  s     1X]1X]hhuo!BFBFN!BFBFNs#GGFLL%&vvc!f~###{bmmD18L8P8PQS8STrb   sh0rL   rM   sh1rN   r   sh2r   r(  not_axisr  z,cupy implementation does not have axes kwargc                 R   |j                  |j                  ||z  |z  |j                        |||f      }g d}|j                  |       t	        ||      }|j                  ||      }	|	D 
cg c]  }
t	        |
       }}
|j                  ||      }t        ||       yc c}
w )z?2d transform on 3d array is equal to 2d transform on 2d slices.r   r  r  r  N)r   r   r   popr   unstackr  r4   )r[   r  r  r  r  r\   rq   transform_axesx_as_3dpartsrG  x_as_2ds               r`   test_3d_vs_slicezTestHilbert2.test_3d_vs_slice  s     JJryysS

yCc3PS_U"8$1>2

18
,(-.18A;..((7(2) /s   0B$c                 p   |j                  |j                  d|j                        d      }t        |      }|j	                  |dd      }t        |d      }|j	                  |dd      }t        ||       |j	                  |dd      }t        |d	      }|j	                  |dd      }t        ||       y
)z72d transform on equal arrays with moved axis are equal.i;  r   )rM   r   r(  r   rP   )r   rQ   r  rQ   r  N)r   r   r   r   r  r4   )r[   r\   r  x0_asr  x1_asr  x2_ass           r`   test_3d_axis_orderzTestHilbert2.test_3d_axis_order  s     ZZ		)2::	>	J[[Q"&)E1a(u%[[Q"&)E1a(u%rb   N)r  r  r  __doc__r  r  rR  r  r  r  r  r  r  r  r  r  r  r  r  rb   r`   r  r  B  s   +d+KL) M)
" f%ST% U% [[Wy)&<=" >"$$ [[W&FGf%PQD R HD, [[W&FGU HU [[UQF+[[UQF+[[UQF+[[Z3f%ST	* U 4 , , ,
	* f%ST& U&rb   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  rZ  r   r  )r>   r   r4   )rj  r  rH  r\   a_r_tols        r`   assert_closezTestEnvelope.assert_close  sF     'r*bjj8 "51!%t4 	
 	H@7@C@rb   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=.*rA  rK   rQ   r  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rK   r   rP   )r  )r   rb  )Nrb  z, zbp_in=\(z\) isn't a 2-tuple of.*rL   )bp_inz)n_out=10.0 is not a positive integer or.*r  )r:  ))r   rK   r  )r   rR   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*	undefinedresidual)	r  r   r   r   r   ri  joinr\  r  )r[   r\   r  tss       r`    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?rF   zXXX: immutable arraysrH   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. )re  rQ   rQ   rK   r   r   )re  r   r   rN   r   r   r   r   r   r  allTr  squaredrL   rQ   r   r   r   Envelope calculation errorrH  r\   )rL   r   r   rK   r   Residual calculation errorFrQ   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrK   )r  r  r:  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorlowpassz/`residual='lowpass'` envelope calculation error)rL   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorr  rP   )r   zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)r>   r   r   r   rY   r  irfftr  r  r   r  rfftifftr  r   r
   )r[   r\   r  r  ZZr_ars   r   ze2_0zr_0ze_1zr_1ze2_2zr_2ze2_3zr_3ze2_4Z_az_aze2_azr_as                        r`   test_envelope_verify_parametersz,TestEnvelope.test_envelope_verify_parameters  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rb   z@               Z,        bp_in,     Ze2_desired,      Zr_desired)rP   r   rQ   rQ   r   )rP   Nr  rP   r   r   r   r   )rL   r   rQ   r   r   )r   Nr  )rL   r   r   rQ   r   NN)r   r   rQ   rQ   r   r  )rQ   r   r   r   r   )r   r   r   rQ   r   )rL   r   rQ   rQ   r   )rK   )rL   r   rK   rL   r   )NrP   )r   r   rK   rL   r   r  c                    |j                  ||j                        }|j                  ||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
  rL  z_s     r`   rN  z:TestEnvelope.test_envelope_real_signals.<locals>.<genexpr>:  s     !Ub&++b/!U   !z+Envelope calculation error (residual='all')r  z+Residual calculation error (residual='all')rP   Nr   z/Envelope calculation error (residual='lowpass')z/Residual calculation error (residual='lowpass'))rY   r   r  r	  r  r   r   r  )r[   r  r  Ze2_desired
Zr_desiredr\   rs   ze2zrze2_lpzr_lpZe2ZrZe2_lpZr_lps                  r`   test_envelope_real_signalsz'TestEnvelope.test_envelope_real_signals  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rb   zG               Z,        bp_in,         Ze2_desired,         Zr_desired)r   rM   r   rM   r   rM   r   rR   r   rM   )rP   rM   r   rM   rQ   r   rQ   rP   r   r   r   rQ   )rP   rQ   rN   r   rN   rK   )r   rN   r   rW   r   rN   )rP   rQ   r   r   r   rK   c                    |j                  ||j                        }|j                  ||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     r`   rN  z=TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>]  s!     Gr6??6::b>2Gs   24r  r  r  N)	rY   r   r   r  r  r  r  r   r  )r[   r  r  r%  r&  r\   rs   r'  r(  r+  r,  s              r`   test_envelope_complex_signalsz*TestEnvelope.test_envelope_complex_signalsJ  s     JJq

J+jjBMMjBZZ
"--Z@
KK((+,**XaMNRGc2YGR#{:r 	 	C"j:r 	 	Crb   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   rQ   rQ   r   )r   r   rL   rL   r   r   r  )r   r   r   r   r   r  )r   r   r   r   r   TrP   )r  r  r   c              3   F   K   | ]  }t        j                  |        y wr  r!  r"  s     r`   rN  zCTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>q  s     OFKKOOr$  2d envelope calculation errorr  2d residual calculation error"Transposed 2d envelope calc. error"Transposed 2d residual calc. errorN)r>   r   r   r   r  r	  rY   r  r   ry  r  )r[   r\   r  r  rs   r%  r&  r'  r(  ye2TyrTr+  Ye2r,  Yrs                  r`   #test_envelope_verify_axis_parameterz0TestEnvelope.test_envelope_verify_axis_parameterd  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 	 	
rb   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  rM   r   rM   rQ   )rP   rR   r   rR   rQ   r   rP   r  r0  )r	  r   r8  r   r	  r2  r1  r  T)r  r  r  r  r   c              3   p   K   | ].  }t        j                  t        j                  |      d        0 yw)rP   r  Nr5  r"  s     r`   rN  zKTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>  s0      @ " #OOFJJrNCC @s   46r:  r  r;  r<  r=  N)r>   r   r   r   rY   r  r  r  r:  r  r   ry  r  )r[   r\   r  r  inprs   Ze2_desZr_deskwr'  r(  r>  r?  r+  r@  r,  rA  s                    r`   +test_envelope_verify_axis_parameter_complexz8TestEnvelope.test_envelope_verify_axis_parameter_complex|  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Wrb   X)rL   r   r   rP   rQ   )rL   r   r   rQ   rP   rQ   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  )rY   r   r  r	  r'  r   r   r  )r[   rJ  r\   rq   e_hile_envs         r`   test_compare_envelope_hilbertz*TestEnvelope.test_compare_envelope_hilbert  s`     JJq

J+LLOwqz"L48%,OTVWrb   c                    t        j                  g d      }t        j                  |d      }t	        |dd      \  }}t	        |dz   dd      \  }}t        |t        j                  d      d       t        ||d       t        |t        j                  d|j                  	      d       t        ||j                  |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   rN   )r  r  )r:  r  r   r  r   r   N)
r  r	  r   r  r   r4   r   r  r   r   )r[   x4x6y6y6_resz6z6_ress          r`   test_nyquistzTestEnvelope.test_nyquist  s     \\)$__RQ'bE:
Fb2gQ?
FBHHQKe4/BHHQbhh7eD		"(( 3%@rb   N)r  r  r  r  staticmethodr  r  r  r  r  r  r  r/  r7  rB  rI  rN  rV  r  rb   r`   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rb   r  c                      e Zd Zedd       Z ed      d        Z ed      d        Z ee	      d        Z
 ee	      d        Z ee	      d        Z ee      d	        Z ee      d
        Z ee      d        Z eee      d        Z eee      d        Z eee      d        Z ee      d        Z ee      d        Z ee      d        Z ed       eee      d               Zy)TestPartialFractionExpansionc                 N   t        | |      }|j                  |      }|j                  |      }|j                  t        |d d d f   |z
        t        | d d d f   |z
              }t	        t        |            \  }}t        ||   ||   |       t        | |   ||   |       y )Nr  )r?   rY   hypotr'  r   rC   r;   )	r  rG  r_truep_truer  r\   distancerowscolss	            r`   assert_rp_almost_equalz3TestPartialFractionExpansion.assert_rp_almost_equal  s    Q"F#F#88C!T'
V 34!T'
V 346 ++<X+FG
dAdGVD\7CAdGVD\7Crb   Tr  c                    t        g dg d      \  }}t        |      dk(  sJ t        |d   t        j                  g d             t        |d   t        j                  g d             t        |d   t        j                  g d	             t        |t        j                  g d
             t        g dg dd      \  }}t        |      dk(  sJ t        |d   t        j                  g d             t        |d   t        j                  g d             t        |d   t        j                  g d             t        |d   t        j                  g d             t        |d   t        j                  g d             t        |d   t        j                  g d	             t        |t        j                  g d
             y )NrO   r  rK   r   )rQ   rQ   rK   rP   )rP   rP   rP   rK   rQ   )rP   rP   rP   rQ   rQ   )rP   rP   rP   rQ   rQ   rK   T)include_powersrN   )rP   rP   rQ   rQ   rK   )rP   rQ   rQ   rK   )rP   rP   rP   rQ   rK   rL   rM   )r0   rC  r;   r   r  )r[   r\   factorsr  s       r`   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"''*<"=>rb   c                 `    t        g ddd      \  }}t        |g d       t        |g d       y )N)r  gjt?g?5^I?rb  g/$ @rd  rt  rR  rV  r  )r1   r4   r[   r\   uniquemultiplicitys       r`   test_group_polesz-TestPartialFractionExpansion.test_group_poles  s,    +0#u >0i0rb   c                    t        |j                  g d      |j                  g d            \  }}}t        ||j                  g d      d       t        ||j                  g d      d       t        ||j                  dg      d       t        |j                  dd	g      |j                  g d
            \  }}}t        ||j                  d	dg             t        ||j                  ddg             |j                  dk(  sJ t        |j                  ddg      |j                  g d            \  }}}t        ||j                  ddg             t        ||j                  ddg             |j                  dk(  sJ t        |j                  ddg      |j                  g d            \  }}}| j	                  ||g dg d       |j                  dk(  sJ t        |j                  ddg      |j                  g d            \  }}}| j	                  ||g dg d       |j                  dk(  sJ t        |j                  g d      |j                  g d            \  }}}t        ||j                  g d             t        ||j                  g d             t        ||j                  ddg             t        |j                  dg      |j                  g d            \  }}}t        ||j                  ddg             t        ||j                  dd g             |j                  dk(  sJ t        |j                  g d!      |j                  g d"            \  }}}| j	                  ||g d#g d$       |j                  dk(  sJ t        |j                  g d%      |j                  g d&            \  }}}| j	                  ||g d'g d(       |j                  dk(  sJ t        |j                  ddg      |j                  g d)            \  }}}t        ||j                  dd*g             t        ||j                  ddg             |j                  dk(  sJ t        |j                  g d+      |j                  g d)            \  }}}t        ||j                  dd,g             t        ||j                  ddg             t        ||j                  dg             t        |j                  g d-      |j                  g d)            \  }}}t        ||j                  d.d/g             t        ||j                  ddg             t        ||j                  d0d1g             t        |j                  g d+      |j                  g d2            \  }}}| j	                  ||g d3g d4       |j                  dk(  sJ y )5NrM   rK   r  r   r  r   r   rK   )gZd;O?g9#Jg&䃞ͪrL   r  )g-1ڿgeagvq-?g      r  r   rP   rN   r   ir  r   rP   )rP   r   r  rK   r   rQ   )rQ   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rP   rM   r   rL   )r   rP   rK   )r   r  r  )rK   gg)\(?g^I+g rh?)rP   gffffffgQg~jt?)r  rL   rP   )r  g333333ӿrs  )rP   rQ   r  r        пr  )rP   r   r  )rP   r   r   r   r   )rP   y              ?y             r   )r                r   rP   )rK   r   rN   rP   rK   rK   rP   rO   r   r   r   )rP   r  rQ   rM   )rQ   rK   r   r  )r   rQ   rK   r   r  E   r   rV   )rP   r  rL   r  )rL   y            @y            )rP         ?      rm   )r,   rY   r;   r   ra  r[   r\   r  rG  r  s        r`   test_residue_generalz1TestPartialFractionExpansion.test_residue_general  s    "**]3RZZ5NO1aArzz*DEqQArzz*DEqQArzz7)4a@"**b!W-rzz)/DE1aArzz1c(34Arzz2r(34vv{{"**aV,bjj.EF1aArzz1a&12Arzz2q'23vv{{"**aV,**%<=?1a##q?)	+ vv{{"**aV,bjj.FG1a##Aq*$0	2vv{{"**%CD**%<=?1aArzz*56Arzz*:;<Arzz1a&12"**aS/2::j+AB1aArzz4-89Arzz1b'23vv{{"**Z0"**=M2NO1a##Aq$8$4	6 vv{{"**Y/L1IJ1a##Aq)$0	2vv{{"**aW-rzz*/EF1aArzz2q'23Arzz1a&12vv{{"**Z0"**Z2HI1aArzz2r(34Arzz1a&12Arzz1#/"**]3RZZ
5KL1aArzz3)45Arzz1a&12Arzz1b'23"**Z0"**^2LM1a##Aq*C$7	9vv{{rb   c                 l   t        |j                  g d      |j                  g d            \  }}}t        |j                  g d      |j                  g d            \  }}}t        |j                  g d      |j                  g d            \  }}	}
t        |j                  g d      |j                  g d            \  }}}t        ||       t        ||       t        ||       t        ||       t        ||	       t        ||       t        ||       t        ||
       t        ||       y )Nrl  rm  )r   rM   rK   r  r   )r   r  r   r   rK   )r   r   rM   rK   r  r   )r   r   r   r  r   r   rK   )r,   rY   r;   r[   r\   r0p0k0r1p1k1r2p2k2r3p3k3s                 r`   test_residue_leading_zerosz7TestPartialFractionExpansion.test_residue_leading_zeros$  s     RZZ6

=8QR
BRZZ(892::m;TU
BRZZ6

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

:0FG1aArzz2q'23Arzz1a&12vv{{2::i0"**\2JK1a##Aq*lCvv{{2::o6

;8OP1aArzz3+67Arzz2q'23Arzz3)452::rd+RZZ-HI1a##Aq$57H	Jvv{{2::q!f-::bjj!TQH&EFH1aArzz5$-89Arzz5#,78vv{{2::j12::q"g3FG1aArzz1#/Arzz1#/Arzz1b'232::a="**aX*>?1aArzz1#/Arzz2$/0vv{{2::a="**]*CD1aArzz1a&12Arzz3*56vv{{2::a="**5E*FG1aArzz2q'23Arzz4+67vv{{2::i0"**Z2HI1aArzz3(34Arzz1a&12Arzz1#/2::q!f-rzz*/EF1aArzz2q'23Arzz1a&12vv{{2::l3RZZ
5KL1aArzz3)45Arzz1a&12Arzz2q'232::i0"**=P2QR1a##Aq%N%N,- 	$ 	/ vv{{rb   c                 l   t        |j                  g d      |j                  g d            \  }}}t        |j                  g d      |j                  g d            \  }}}t        |j                  g d      |j                  g d            \  }}	}
t        |j                  g d      |j                  g d            \  }}}t        ||       t        ||       t        ||       t        ||       t        ||	       t        ||       t        ||       t        ||
       t        ||       y )Nrl  rm  )rM   rK   r  r   r   )r  r   r   rK   r   )rM   rK   r  r   r   r   )r  r   r   rK   r   r   r   )r-   rY   r;   rx  s                 r`   test_residuez_trailing_zerosz9TestPartialFractionExpansion.test_residuez_trailing_zeros  s     bjj7 jj79
Bbjj)9: jj79
Bbjj7 jj)9:<
Bbjj)<= jj)?@B
BB#B#B#B#B#B#B#B#B#rb   c                 ,   t        |j                  ddg      |j                  g d            \  }}}t        ||j                  ddg             t        ||j                  ddg             |j                  dk(  sJ t        |j                  d      |j                  d            \  }}}|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ t	        j
                  t        d      5  t        |j                  d      |j                  d             d d d        t	        j
                  t        d      5  t        |j                  d      |j                  g d	             d d d        y # 1 sw Y   ZxY w# 1 sw Y   y xY w)
Nr   rn  r  r  rP   r  rA  z6First coefficient of determinant `a` must be non-zero.r  )r-   rY   r;   r   r  r   r   ru  s        r`   test_residuez_degeneratez5TestPartialFractionExpansion.test_residuez_degenerate  sD   2::q!f-rzz)/DE1aArzz1a&12Arzz2r(34vv{{2::a="**Q-81avv{{vv{{vv{{]]:-GH 	3RZZ]BJJqM2	3 ]]:"01 	> RZZ]BJJ|$<=	> 	>	3 	3	> 	>s   :+E>-F
>F
Fc                    |j                  g d      }|j                  g d      }|j                  g       }|j                  g d      }|j                  g d      }dD ]`  }t        ||||      \  }}	t        ||d       t        |	|d	d
       t        ||||      \  }}	t        ||d       t        |	|d	d
       b y )N)r  UUUUUUſg)r   r  r  )r  rP   rK   )rP   r   rR   r   avgr  rR  r  r  r  rtypegV瞯<r   F)r  r   rY   r    r4   r!   )
r[   r\   r  rG  r  
b_expected
a_expectedr  r^   r]   s
             r`   *test_inverse_unique_roots_different_rtypeszGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypes  s     JJ01JJ{#JJrNZZ,
ZZ.
 I 	JE!Q/DAqAz6Azu5I1a%0DAqAz6Azu5I	Jrb   c                    |j                  g d      }|j                  g d      }|j                  g       }|j                  g d      }|j                  g d      }|j                  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   rP   rK   )r  gUUUUUUgUUUUUU?rK   )rP   r(  r6  r	  r   r  r  r   r   Fr  r  )r[   r\   r  rG  r  r  b_expected_zr  r  r^   r]   s              r`   ,test_inverse_repeated_roots_different_rtypeszITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypes  s    JJ89JJ'JJrNZZ/
zz"78ZZ 12
H 	>E!Q/DAqAz6Azu=1a%0DAqA|%8Azu=	>rb   c                 n   |j                  g d      }|j                  g d      }|j                  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 ofrA  r  r  )rY   r  r   r   r    r!   ru  s        r`   test_inverse_bad_rtypez3TestPartialFractionExpansion.test_inverse_bad_rtype  s    JJ89JJ'JJrN]]:-EF 	,1a(+	,]]:-EF 	-Aq!8,	- 	-	, 	,	- 	-s   BB+B(+B4c                    |j                  dg      }|j                  dg      }|j                  dg      }t        |||      \  }}t        ||j                  dg             t        ||j                  ddg             y )NrP   rQ   r   r  g       )rY   r!   r4   )r[   r\   r  rG  r  r^   r]   s          r`    test_invresz_one_coefficient_bugz=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  sn     JJsOJJsOJJsOq!Q12::qc?+2::sDk23rb   c                    t        |j                  dg      |j                  dg      |j                  g             \  }}t        ||j                  dg             t        ||j                  ddg             t        |j                  g d      |j                  g d      |j                  g             \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  ddg      |j                  dd	g      |j                  g d
            \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  g d      |j                  g d      |j                  g             \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  ddg      |j                  ddg      |j                  ddg            \  }}t        ||j                  g d             t        ||j                  g d             y )NrP   r   rt  rQ         ?      rP   r   rm   y      @      y      !      ?y      @      
@rP   y             y      ?       @y      ?      r  rt  r  rO   )rP                     ?       r  rR   rP               rL   r   rQ   r   r  rL   r  r   r   r   rK   rK   rK   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prP   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rQ   )rP   r   r  ro   r  )r    rY   r;   r[   r\   r^   r]   s       r`   test_invresz(TestPartialFractionExpansion.test_invres  s   bjj!orzz1#

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

Aq6@RS1Arzz*<=>Arzz*56rb   c                    t        |j                  dg      |j                  dg      |j                  g             \  }}t        ||j                  dg             t        ||j                  ddg             t        |j                  g d      |j                  g d      |j                  g             \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  ddg      |j                  dd	g      |j                  g d
            \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  g d      |j                  g d      |j                  g             \  }}t        ||j                  g d             t        ||j                  g d             t        |j                  ddg      |j                  ddg      |j                  ddg            \  }}t        ||j                  g d             t        ||j                  g d             y )NrP   r   r  r  r  r  r  rt  r  rO   )g      @r  r  y            rW   r  r  r  )rN   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rQ   )r   rP   r  rQ   r  )r!   rY   r;   r  s       r`   test_invreszz)TestPartialFractionExpansion.test_invresz  s   rzz1#

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

B4!8,ZZ.
(8%}}!!!zzQ!(M:E1ruu9z#9:rb   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  rQ   r  r  r   r  r  r  r  s           r`   test_equal_1dperiodz&TestVectorstrength.test_equal_1dperiodg  s    :;
(8%}}!!!zzQ||HmVDDD||E1tww;#;VLLLrb   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  rP   rQ   r  r  r  rY   r"   r  r;   r  r  s           r`   test_equal_2dperiodz&TestVectorstrength.test_equal_2dperiodu  s    :;QH%

B4!8,ZZd,
(8%}}!!!zzQHm4E1ruu9z#9:rb   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rt  g?g @gffffff@g333333$@rP   r  rt  r   r  r  rQ   r  r  r  s           r`   test_spaced_1dperiodz'TestVectorstrength.test_spaced_1dperiod  s    56
(8%}}!!!zzQ||HmVDDD||E1tww;#;VLLLrb   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  rP   r  r  rQ   rt  r  r   g>)rY   r"   r  r;   r>   r   r4   r  )	r[   r\   r  r  r  r  r  r  rtol_kws	            r`   test_spaced_2dperiodz'TestVectorstrength.test_spaced_2dperiod  s    56QG$

B4!8,ZZR)
(8%}}!!!zzQHm4$4R$8BJJ$F64.Bq255y:5AArb   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        ?rP   UUUUUU?r  r   rQ   r  r  s           r`   test_partial_1dperiodz(TestVectorstrength.test_partial_1dperiod  s    N+
(8%}}!!!zzQ||Hm444||E1tww;#;<<<rb   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  rL   )r  r  r  r  rP   rQ   r  r  s           r`   test_partial_2dperiodz(TestVectorstrength.test_partial_2dperiod  s    N+,-

G9q=1ZZ 01
(8%}}!!!zzQHm4E1ruu9z#9:rb   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  )rY   r"   r  r  r  r[   r\   r  r  r  r  r  s          r`   test_opposite_1dperiodz)TestVectorstrength.test_opposite_1dperiod  sc    -.(8%}}!!!zzQ||HmVDDDrb   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  rR   r  rP   )rY   r"   r  r;   r  s          r`   test_opposite_2dperiodz)TestVectorstrength.test_opposite_2dperiod  su    -.RD2I&

B4"9-(8%}}!!!zzQHm4rb   c                 \    |j                  ddgg      }d}t        t        t        ||       y )NrP   rQ   r  rY   r   r   r"   r[   r\   r  r  s       r`   test_2d_events_ValueErrorz,TestVectorstrength.test_2d_events_ValueError  s)    aVH%j.&&Arb   c                 Z    d}|j                  dgg      }t        t        t        ||       y )Nr  rP   r  r  s       r`   test_2d_period_ValueErrorz,TestVectorstrength.test_2d_period_ValueError  s'    aSE"j.&&Arb   c                 8    d}d}t        t        t        ||       y )Nr  r   r   r   r"   r  s       r`   test_zero_period_ValueErrorz.TestVectorstrength.test_zero_period_ValueError  s    j.&&Arb   c                 8    d}d}t        t        t        ||       y )Nr  r   r  r  s       r`   test_negative_period_ValueErrorz2TestVectorstrength.test_negative_period_ValueError  s    j.&&Arb   N)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb   r`   r  r  H  s    M w':;; <;M;MB= w':;; <;	E	5B
B
B
Brb   r  )r  )r   r   r   r   c                   d   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y)TestSOSFiltrF   zbuffer array is read-onlyrH   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   rM   rN   r   rP   r   r  r  r  r  )r  rP   r   )r  r   r   r   r  )r  rQ   rQ   rQ   rQ   rQ   rQ   rQ   )r  r  rY   r\  r   r$   r:   r%   ri  concatr   r4   )r[   rE  r\   rq   r^   r]   r  bbr  r  rr   s              r`   
test_rank1zTestSOSFilt.test_rank1  s   R_KK1arK*JJ2wbJ)JJT{"J- jj-Rj8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Brb   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   rP   r   r   r  r  r  r  r  r  r  r  )r  r  r  r  r   rY   r\  r   r$   r%   r:   )r[   rE  r\   r  r  rq   r^   r]   r  r  r  r  r  rr   s                 r`   
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-rb   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   rP   r   r   r  .)r  r  r  r  r   rY   r\  r   r$   r%   r   r  r:   r   )r[   rE  r\   r  r  rq   r^   r]   r  r  r  rr   r   js                 r`   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rb   c                 ,   t        j                  ddd      \  }}t        j                  ddd      \  }}t        j                  ddd      \  }}t        j                  t        j                  ||      |      }t        j                  t        j                  ||      |      }	t        j                  t        j
                  ||f   t        j
                  ||f   t        j
                  ||f   f      }
t        |j                  |	||
f      \  }	}}
|	||
fS )NrQ   r  lowr  )r   r   r   r   r  r_r\  rY   )r[   r\   b1r  b2r  b3r  r^   r]   r  s              r`   _get_ab_soszTestSOSFilt._get_ab_sosC  s    q$.Bq$.Bq$.BKKB+R0KKB+R0hhb"fruuRV}beeBFmDE

Q3K0	1c!Syrb   z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	  rN   r  r   r   r   r   Fr  )r  r   r   r  r   rY   r  r   r  r  r4   r%   r'   ri  )r[   rE  r\   r]   r^   r  rq   y_truer  r  rr   r  s               r`   test_initial_conditionsz#TestSOSFilt.test_initial_conditionsN  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2rb   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   rP   r   )r   rP   rP   r  Fr  )r  ri  r  r'   r   r  r  r   r   r%   r<   r4   )
r[   rE  r\   rq   r  r  r  zi_ndrr   r  s
             r`   test_initial_conditions_2z%TestSOSFilt.test_initial_conditions_2h  s>    R_GGARG $$R(	1c_ JJq&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   rM   )rQ   ro  rK   r   rN   r  r  r  rP   rQ   r  r  r  r  r   )r   r   r   r  r   rY   r   r   r   r  r  r   r  r%   r  r4   r'   r   r   r   r=   r   )r[   rE  r\   rq   r  r  	nsectionsr  shpz0r^  r  r@  r  rv  r  rr   r  r^   r]   y_tfs                        r`    test_initial_conditions_3d_axis1z,TestSOSFilt.test_initial_conditions_3d_axis1  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%8rb   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)rK   ro  rK   r   )rL   rN   )rL   rK   rK   rQ   zshould be all onesrA  rP   )r  r  r  rK   zInvalid zi shape)r  r  r  r  r   r   r%   )r[   rE  r\   rq   r  r  s         r`   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 )NrN   r  r  r  r8  r   r  r  Fr   r  rK   r   r  r   )r  r   r   rY   r'   r%   ri  r4   r  r  r=  )r[   rE  r\   r  r  rr   r  sss           r`   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<rb   Tr  c                    t        ||      }t        j                  ddd      }|j                  |      }t	        |      }t        ||j                  d|      |j                               \  }}t        ||dd	
       y )NrN   r  r  r  r8  r   r  r  Fr  )	r  r   r   rY   r'   r%   ri  r   r4   )r[   rE  r\   r  r  r  r  s          r`   test_sosfilt_zi_2zTestSOSFilt.test_sosfilt_zi_2  sj     R_mmAs51jjo_RWWRrW2ryy{C2BU>rb   N)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb   r`   r  r    s,    k*EF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#? $?rb   r  c                   x    e Zd Z edd      d        Zd Z edd      d	        Z edd      d
        Zd Z	y)TestDeconvolveTr  rx   c                     g d}ddg}|j                  g d      }t        j                  ||      \  }}t        ||       y )Nr  rP   r   r   rP   rP   r   r   rQ   rP   	r  rQ   rP   r   rQ   rK   rP   r   r   )rY   r   
deconvolver4   r[   r\   originalimpulse_responserecorded	recovered	remainders          r`   r  zTestDeconvolve.test_array_like  sD     .q6::;<%00;KL	9	8,rb   c                     |j                  g d|j                        }|j                  ddg      }|j                  g d      }t        j                  ||      \  }}t	        ||       y )Nr  r   rQ   rP   r  )rY   r   r   r  r4   r  s          r`   ra   zTestDeconvolve.test_basic  s]    ::8

:K::q!f-::;<%00;KL	9	8,rb   r   zdifferent error messagerH   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#^Parameter signal must be non-emptyrA  rY   r  r   r   r   r  r[   r\   r  r  quotientr   s         r`   test_n_dimensional_signalz(TestDeconvolve.test_n_dimensional_signal  sp    ::1v1v./::q!f-]]:-RS 	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$^Parameter divisor must be non-emptyrA  r#  r$  s         r`   test_n_dimensional_divisorz)TestDeconvolve.test_n_dimensional_divisor  sp    ::q!f%::1v1v&67]]:-ST 	P"("3"3H>N"OHi	P 	P 	Pr'  c                     |j                  g d      |j                  g d      }}t        j                  ||      \  }}t        ||       t	        |j                  |            dk(  sJ y)zCReturn signal as `remainder` when ``len(divisior) > len(signal)``. r  )r   rP   rQ   rL   rM   r   N)rY   r   r  r5   r=   )r[   r\   r  divr%  r   s         r`   test_divisor_greater_signalz*TestDeconvolve.test_divisor_greater_signal  sZ    ::i("**_*ES$//S9)	3'rzz(+,111rb   N)
r  r  r  r  r  ra   r  r&  r)  r,  r  rb   r`   r  r    sg     d+KL- M-- v&?@P AP v&?@P AP2rb   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 )NrO   r  )r*   rY   r:   )r[   r\   	detrendeddetrended_exacts       r`   ra   zTestDetrend.test_basic
  s-    BJJy12	**Y/!)_=rb   rF   zoverwrite_data not implementedrH   c                 v    |j                  g d      }t        |d      }t        |d      }t        ||       y )N)rP   333333?r!  g?g333333@F)overwrite_dataT)rY   r*   r:   )r[   r\   rq   
copy_arrayinplaces        r`   	test_copyzTestDetrend.test_copy  s3    JJ./Qu5
!D1!*g6rb   r   linearr  r  r  c                     |j                  |j                  d      d      }t        |||      }|j                  |j                  k(  sJ y )N   )rM   rN   r   )r  r  )r   r   r*   r  )r[   r  r   r\   r  r0  s         r`   r  zTestDetrend.test_axis  sA     zz"))E*I6Dt$7	$**,,,rb   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  )rM   r   r  r  r8  rK   )r  bpr   r   rP   )r  r<  r  )rY   r*   r4   r  r   r   )r[   r\   r  r0  s       r`   test_bpzTestDetrend.test_bp  s    ?*zz$DxA6		2==#;%H zz$a.DxAA>		2==#;%H :& 	/DxA.	/ 	/ 	/s   B22B;r<  r   rQ   c                    t         j                  j                  d      }|j                  d      }|j	                  |t        |            }t        |t         j                        rt        |      s|j	                  |      }n+t        |      s t        |      st        j                  d       t        ||      }|j	                  g d      }t        |      |j                  k(  rdnd}t        |||	       y )
Ni90  rR   r   z'list bp is currently numpy and jax only)r<  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr  r   r   )r   r   r   r  rY   r>   r  ndarrayr8   r6   r  r  r*   r   r4   )r[   r<  r\   r   rq   rg  res_scipy_191r   s           r`   test_detrend_array_bpz!TestDetrend.test_detrend_array_bp-  s     ii##E*HHRLJJq 0 4J5b"**%fRj BBRLF2JEFaB

 $O P (+rzz9tu]6rb   N)r  r  r  ra   r  r7  r  r  r  r  r=  r   r  rA  r  rb   r`   r.  r.    s    >
 k*JK7 L7 [[Vh
%;<[[VY/- 0 =-
/  [[THBHHaV$4q!f#=>7 ?7rb   r.  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestUniqueRootsc                     |j                  g d      }t        |      \  }}t        ||d       t        ||j	                  t        |      t                     y )N)rc  r  r  r3  r  ro  r  r   rY   r+   r;   r5   ri  rC  rm  r[   r\   rG  rh  ri  s        r`   test_real_no_repeatz#TestUniqueRoots.test_real_no_repeatF  sF    JJ34+AFAr2bggc!fCg&@Arb   c                    |j                  g d      }t        |dd      \  }}t        ||j                  g d      d       t        ||j                  g d             t        |dd	      \  }}t        ||j                  g d
      d       t        ||j                  g d             t        |dd      \  }}t        ||j                  g d      d       t        ||j                  g d             y )N)rc  ffffff{Gz皙r  r  ?rt  rR  tolr  )rc  rJ  r  r  ro  r  rQ   rQ   rP   rQ   r  )rI  rK  r  rL  r  )g333333g
ףp=
r  gffffff?rY   r+   r;   r5   rF  s        r`   test_real_repeatz TestUniqueRoots.test_real_repeatL  s    JJAB+A4uEFBJJ/F$GQSTbjj&>?+A4uEFBJJ/G$HRTUbjj&>?+A4uEFBJJ/K$L$&	(bjj&>?rb   c                     |j                  g d      }t        |      \  }}t        ||d       t        ||j	                  t        |      t                     y )N)rc  r         ?      ?r  r  ro  r  r   rE  rF  s        r`   test_complex_no_repeatz&TestUniqueRoots.test_complex_no_repeat\  sF    JJHI+AFAr2bggc!fCg&@Arb   c                    |j                  g d      }t        |dd      \  }}t        ||j                  g d      d       t        ||j                  g d             t        |dd	      \  }}t        ||j                  g d
      d       t        ||j                  g d             t        |dd      \  }}t        ||j                  g d      d       t        ||j                  g d             y )N)rc        𿚙?ffffff333333?333333?r  rS  ??rt  rR  rM  )rc  rW  r  rY  ro  r  rO  r  )rV  rX  r  rS  r  )y      𿚙?y333333?r  yffffff??rP  rF  s        r`   test_complex_repeatz#TestUniqueRoots.test_complex_repeatb  s    JJ ' (  ,A4uEFJJ'OP$&	( 	bjj&>?+A4uEJJ> 	
 	bjj&>?+A4uEJJKL	

 	bjj&>?rb   c           
         |j                  t        j                  t        j                  t        j                  d      t        j                  d                        }|j                  g d      }t        |      \  }}|j                  |      }t        |j                  |      |d       t        ||j                  g d             y )NrM   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r   r  )rQ   rQ   rQ   rQ   )	rY   r   r  r   ri  r+   sortr;   r5   )r[   r\   rG  
true_rootsrh  ri  s         r`   test_gh_4915zTestUniqueRoots.test_gh_4915~  s    JJrxxBGGAJ
 CDEZZB

  ,ABGGFOZCbjj&>?rb   c                 t   t        |j                  g d            \  }}t        ||j                  ddg      d       t        ||j                  ddg             t        |j                  g d      d	
      \  }}t        ||j                  ddg      d       t        ||j                  ddg             y )N)r  r   r  r  r   ro  r  rQ   rP   )rP   g_p   ?&.>      ?rt  )rN  r`  )r+   rY   r;   r5   rg  s       r`   test_complex_roots_extraz(TestUniqueRoots.test_complex_roots_extra  s    +BJJ7G,HIFBJJT{$;RHbjj!Q&89+JJ/0c 
 	FBJJ[/A$BBObjj!Q&89rb   c                 ^   |j                  t        j                  j                  d      dt        j                  j                  d      z  z         }t	        |d      \  }}t        ||j                  t        j                  |      g      d       t        ||j                  dg             y )Nr  r   rQ   ro  r  )rY   r   r   r  r+   r;   rR  r5   rF  s        r`   test_single_unique_rootz'TestUniqueRoots.test_single_unique_root  sy    JJryy~~c*R"))..2E-EEF+Aq1FBJJq	{$;RHbjj#&78rb   N)
r  r  r  rG  rQ  rT  rZ  r^  ra  rc  r  rb   r`   rC  rC  D  s*    B@ B@8
@	:9rb   rC  c                      t        j                  t        j                  dt        j                        dd      } | j
                  t        j                  k(  sJ y )Nr  r   rN   rL   )r   r  r   r   r   r   )rj  s    r`   test_gh_22684re    s;    !!"))D"Eq!LF<<2<<'''rb   r  )rX  r  rE  concurrent.futuresr   r   	itertoolsr   r   r  r   r   numpyr   numpy.exceptionsr	   scipyr
   r  rq  r   scipy.optimizer   r   r   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   scipy.signal.windowsr.   scipy.signal._signaltoolsr/   r0   r1   scipy.signal._upfirdnr2   
scipy._libr3   scipy._lib._array_apir4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r  r  r  lazy_xp_modulesrE   r!  r  r#  r*  r5  r7  r9  r  rZ  rG  r  r  rh  rj  r  r  rl  r  rt  rp  r  r~  r  rD  rH  rJ  rN  rP  rR  rY  r[  r]  r  paramr  r  r  r  r  r  r  r  r)  r4  	fail_slowr@  rB  rK  rP  rM  r  r  r  rY  r  r  r  r  r.  rC  re  r  rb   r`   <module>ru     sp   
   ?    *  +  % 6          & T T 0 !     ;;// KK11 ( 8o4 o4 o4d :[" [" ["| ;mL mL  mL`3

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