
    doi"                     N   S SK r S SKrS SKrS SKJrJr  S SKJr  S SKJr  S SK	r	S SK	J
r  S SKrS SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJr  S SKJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  S SK9J:r:  S SK;J<r<J=r=J>r>  S SK?J@r@  S SKAJBrB  S SKCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrS  \	R                  R                  rU\	R                  R                  rV\/rW\P" \5       " S S5      5       rX\P" \5       " S S5      5       rY\P" \5       " S S5      5       rZS r[S r\S r]S r^\P" \ 5       " S S5      5       r_\U" SSS9\	R                  R                  S \Q" \5      \Q" \ 5      /5       " S! S"5      5       5       ra\U" SSS9\	R                  R                  S#5      \	R                  R                  S$\R                  \R                  /5      \P" \\5      S% 5       5       5       5       re " S& S'5      rf\P" \R                  5       " S( S)5      5       rh/ S*Qri\i\@-  ri " S+ S,5      rj\P" \R                  5       " S- S.5      5       rl\P" \R                  5       " S/ S05      5       rn\P" \%5       " S1 S25      5       ro " S3 S4\o5      rp " S5 S6\o5      rq\U" SS79 " S8 S9\o5      5       rr " S: S;\o5      rs " S< S=\o5      rt\U" SS79 " S> S?\o5      5       ru\P" \%5      S@ 5       rv\P" \%5      SA 5       rw\	R                  R                  SB/ SCQ5      \V" SDSESF9\P" \5       " SG SH5      5       5       5       rx\P" \5       " SI SJ5      5       ry\P" \5      \	R                  R                  SK/ SLQ5      \	R                  R                  SMSSN/5      \	R                  R                  SOSPSQSRSS\	R                  " ST\	R                  R                  /SU9\	R                  " SV\	R                  R                  /SU9/5      SW 5       5       5       5       r|\P" \5      SX 5       r}\P" \5      \	R                  R                  SYSZS[/5       " S\ S]5      5       5       r~ " S^ S_5      r\P" \&5       " S` Sa5      5       r\P" \'\15       " Sb Sc5      5       r\P" \1\'5       " Sd Se\5      5       rSf rSSg jr\P" \!5      \	R                  GR                  Sh5      Si 5       5       r\P" \!5      Sj 5       r\U" SS79\	R                  GR                  Sh5      Sk 5       5       r\P" \GR                  5       " Sl Sm5      5       r\P" \#5       " Sn So5      5       r\P" \$5       " Sp Sq5      5       r\P" \"5       " Sr Ss5      5       r " St Su5      r\P" \-5       " Sv Sw5      5       r\U" SSx9\P" \05      \	R                  R                  SB/ SyQ5       " Sz S{5      5       5       5       r\P" \GR"                  5       " S| S}5      5       r\P" \55       " S~ S5      5       r\P" \65       " S S5      5       rS rg)    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                      \ rS rSr\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       rS r\	" SS	S9S
 5       r
\" SSS9S 5       r\	" SSS9S 5       r\	" SS	S9S 5       r\" S5      \" S5      S 5       5       r\" S5      \" S5      S 5       5       rS r\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       r\" SSS9S#S j5       r\" SSS9S 5       r\" SS9S  5       rS!rg")$TestConvolve*   	jax.numpy2jax returns floats; scipy returns ints; cf gh-6076reasonc                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      n[        XAR                  / SQ5      5        g )N)            rN   rM         rL   )rL   
             rV         asarrayr   r5   selfxpabcs        _/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/signal/tests/test_signaltools.py
test_basicTestConvolve.test_basic-   s<     JJ)*JJy!QN::&EFG    c                     UR                  / SQ5      nUR                  / SQ5      n[        X#SS9n[        XAR                  / SQ5      5        g )NrL   rM   rN   )rQ   rR   rL   rM   samemode)rS   rT   "   rY   r[   s        ra   	test_sameTestConvolve.test_same5   s=     JJy!JJ|$Q'::l34rd   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#SS9n[        XAR                  / SQ5      5        g )Nrf   rP   rg   rh   )rS   rT   rT   rY   r[   s        ra   test_same_eqTestConvolve.test_same_eq=   s=     JJy!JJy!Q'::l34rd   c                     UR                  / SQ5      nUR                  SS/5      n[        X#5      n[        XAR                  / SQ5      5        g )N)      ?      ?       @      ?      @      ?rq   rr   )               @y       @      @y      @       @y      @      @rY   )r\   r]   xyzs        ra   test_complexTestConvolve.test_complexE   s?    JJ/0JJ'(QN::&BCDrd   zwrong output dtypec                 z    UR                  S5      nUR                  S5      n[        X#5      n[        XBU-  5        g Ni	  i  rY   r[   s        ra   test_zero_rankTestConvolve.test_zero_rankK   s3    JJtJJtQNq5!rd   Tzpure pythonnp_onlyrJ   c                 6    SnSn[        X#5      nXBU-  :X  d   eg r{   )r   r[   s        ra   test_zero_rank_python_scalars*TestConvolve.test_zero_rank_python_scalarsR   s#    QNEzzrd   zdisagreement between methodsc           
      @   UR                  UR                  S5      S5      nUR                  S5      n[        S5       H]  nS/S-  nSXT'   [        X!R                  U[	        U5      5      SS9n[        X!R                  U[	        U5      5      SS9n[        XgSS	9  M_     g )
N   rL   rL   rL   rL   rQ   directmethodr
   +=atol)reshapearangeranger   tupler4   )r\   r]   r^   r_   ib_shaperu   rv   s           ra   test_broadcastableTestConvolve.test_broadcastableY   s    JJryy}i0IIaLqAc!eGGJJJq%.9(KAJJq%.9%HAAu- rd   c                 ~    UR                  S/5      nUR                  S/5      n[        X#5      n[        XBU-  5        g Ng  P  rY   r[   s        ra   test_single_element TestConvolve.test_single_elemente   s7    JJvJJvQNq5!rd   cupyc                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      n[        X#5      nUR                  / SQ/ SQ/ SQ/5      n[        XE5        g NrP   rf   rR   rL   rM   rM   rN   rO   )rR            rX   )rS      >   :   &   )rX      r   1   r   rY   r\   r]   r^   r_   r`   ds         ra   test_2d_arraysTestConvolve.test_2d_arraysl   sY     JJ	9-.JJ	9-.QNJJ*'') * 	rd   torchc           
         UR                  UR                  S5      S5      nSUR                  UR                  SUR                  S9S5      -  nX1R                  UR                  SUR                  S9S S S2   S5      -  nUR                  / SQ/ S	Q/ S
Q/ SQ// SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ//5      n[	        [        X#S5      U5        [	        [        X2S5      U5        [	        [        X#S5      USS2SS2SS24   5        [	        [        X2S5      USS2SS2SS24   5        [	        [        X#S5      USS2SS2SS24   5        [	        [        X2S5      USS2SS2SS24   5        g )N   rR   rR   rR                 ?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@fullrg   rQ   rL   r   valid)r   r   
complex128rZ   r5   r   )r\   r]   smallbig	out_arrays        ra   test_input_swapping TestConvolve.test_input_swappingw   s    

299Q<32::bii"--i@)LLzz"))Bbmm)<TrTBINNJJ16768
 :;==?
 ;>><>
 :<:8:;<	* 	V4i@V4i@V4$QqS!A#qs]3	5V4$QqS!A#qs]3	5W5$QqS!A#qs]3	5W5$QqS!A#qs]3	5rd   c           	          UR                  / SQ5      nUR                  / SQ5      n[        [        [        X#SS9  [        [        [        X#SSS9  [        [        [        X#SS	S9  [        [        [        X#S
SS9  [        [        [        X#SSS9  g Nrf   rP   spamrh   eggsr
   ri   r   hamr   r   baconrg   )rZ   assert_raises
ValueErrorr   r\   r]   r^   r_   s       ra   test_invalid_params TestConvolve.test_invalid_params   sl    JJy!JJy!j(Av>j(AveLj(AuXNj(AvgNj(AvgNrd   dtypes do not matchc                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      n[        X#S5      n[        XT5        [        X2S5      n[        XT5        UR                  / SQ5      nUR                  SS/5      nUR                  SS/5      n[        X#S5      n[        XT5        [        X2S5      n[        XT5        g )	N)rQ   rR   rL   rO   rN   rL   )	rR   rL   rM   rN   rL   rM   rR   rR   rQ   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $rY   r\   r]   r^   r_   expectedouts         ra   test_valid_mode2TestConvolve.test_valid_mode2   s     JJ)*JJ23::./qW%&qW%&JJ/0JJ'(::vw/0qW%&qW%&rd   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#S5      nUR                  / SQ5      n[        XE5        g )N)rQ   rR   rL   rL   rQ   rR   )rQ   rM   rL   rM   rN   rO   r   rM   rL   rR   rQ   rQ   rL   rg   )9   =   ?   r   -   $   rY   r   s         ra   test_same_modeTestConvolve.test_same_mode   sC    JJ)*JJ>?Q6"JJ/0rd   zdifferent exceptionc                     UR                  UR                  SS5      S5      nUR                  UR                  SS5      S5      n[        [        [        /X#4Q70 SS0D6  [        [        [        /X24Q70 SS0D6  g 	NrQ   r   rR   rL   r   rL   rR   ri   r   )r   r   r   r   r   r   s       ra   test_invalid_shapes TestConvolve.test_invalid_shapes   so     JJryyA/JJryyQ'0j(IaVI7HIj(IaVI7HIrd   zTODO: convert this testc                    1 SknU VVVs/ s H  oC  H  nS  H  nXEU4PM	     M     M     nnnn[         R                  R                  S5      nUR                  SS/US9UR	                  U5      S.n	U	S   =U	S	'   U	S
'   U	S   SU	S   -  -   U	S'   U GH  u  pEnU	[         R
                  " U5      R                     R                  U5      n
U	[         R
                  " U5      R                     R                  U5      nS Vs0 s H  nU[        XXS9_M     nnUS   R
                  US   R
                  :X  d   eSU;   a  SU;   a  [        X5      S:X  d   eM  [        XE4 Vs/ s H  oS;   PM	     sn5      (       a  SSS.nOSXE4;   a  SSS.nOSSS.n[        US   US   40 UD6  GM     g s  snnnf s  snf s  snf )N>   boolint8int16int32int64uint8uint16uint32uint64float16float32float64	complex64r   )r   r   rg   rF   r   rQ   size)r   fr   r_   ur                 ?r`   )r
   r   )r   ri   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t2ri   argsrngarray_typesx1x2keyresultstkwargss                   ra   test_convolve_method!TestConvolve.test_convolve_method   s   4 */ F22+D4 +D  F
 ii##B'JJ1vAJ6IIaL*.9#.>>C;s+&s+d;s3C.CCC LBDRXXb\../66r:BRXXb\../66r:B #45"33 HRCCC"3  5 5>''78+<+B+BBBB|")"1X=== B8D8a118DEE"($7rh&"&5 #'5GENGH,=HH1 !F5 Es   !F/F6$F;
c                     S Ht  nUR                  SU-  /UR                  S9n[        X3SS9n[        X3SS9nUS:  d  M=  UR                  SSU-  -  /5      n[        XE5        [        XFSS	9  [        XVSS	9  Mv     g )
N)	rS      2   3   4   5   6   <   r   rR   r   r
   r   r   r  Fcheck_dtype)rZ   r   r   r5   )r\   r]   r  rw   r
   r   vals          ra    test_convolve_method_large_input-TestConvolve.test_convolve_method_large_input   s     6A

AqD6
2A1.Ca84F
 2vjj!ac(,,e<? 6rd   r   c                    [        [        [        S/SSS9  [        [        [        SS/SS9  [        [        [        S/SSS9  [        [        [        SS/SS9  [        [        [        S/S//5        [        [        [        S/S5        g NrQ   rR   r   r   r
   rL   )r   r   r   r\   r]   s     ra   test_mismatched_dims!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3rd    N)d   )__name__
__module____qualname____firstlineno__skip_xp_backendsrb   rk   rn   rx   xfail_xp_backendsr|   r   r   r   r   r   r   r   r   r   r  r"  r(  __static_attributes__r*  rd   ra   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 $4rd   rE   c            	          \ rS rSr\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       r\" SS	S9S
 5       rS r	S r
\" SSS9S 5       r\" SSS9S 5       r\" SSS9\R                  R                  S\\/5      \R                  R                  SS/ SQ/4S/ SQ/4/5      S 5       5       5       r\" SSS9S 5       r\" SSS9S 5       rS r\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       rS r\R                  R4                  \R                  R7                  S 5      \" S!S"S#9S$ 5       5       5       rS%rg&)'TestConvolve2di  rG   r   rI   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      n[        X#5      n[        XT5        g r   rZ   r   r5   )r\   r]   r^   r_   r   es         ra   r   TestConvolve2d.test_2d_arrays   sX    JJ	9-.JJ	9-.JJ*'') * qrd   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      nUR                  / SQ/5      n[        X#S5      n[        XT5        [        X2S5      n[        XT5        g )NrR   rL   rM   rN   rO   r   r   rM   rN   rO   r   r   	   rS   rP   rf   r   P   b   t      r   r6  r\   r]   r7  r   hgs         ra   test_valid_modeTestConvolve2d.test_valid_mode*  sf    JJ-/EFGJJ	9-.JJ./0qW% qW%rd   r   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/UR                  S9S-   nUR                  / SQ/5      n[        X#S5      n[        XT5        [        X2S5      n[	        XT5        g )	Nr:  r;  rP   rf   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rZ   r   r   r4   r5   rB  s         ra   test_valid_mode_complx%TestConvolve2d.test_valid_mode_complx7  ss    JJ-/EFGJJ	9-R]]JCbHJJLMNqW% qW%rd   zjax only allows fillvalue=0c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      nSn[        X#SSU5      nUR                  / SQ/ S	Q/ S
Q/5      n[        XV5        g )NrP   rf   r   r   rQ   r   fill)      r   rj   rV   )rU   (   r   @   r  )rV   .   C   r   0   r6  )r\   r]   r^   r_   fillvalr`   r   s          ra   test_fillvalueTestConvolve2d.test_fillvalueD  sc    JJ	9-.JJ	9-.qVVW5JJ,'') * 	rd   c                    Sn[         R                  " 5          [         R                  " SS[        5        [	        [
        US9   [        S//SS//SS9  S S S 5        S S S 5        S	n[	        [
        US9   [        S//SS//SS/S9  S S S 5        g ! , (       d  f       NB= f! , (       d  f       NK= f! , (       d  f       g = f)
Nz2could not cast `fillvalue` directly to the output ignorezCasting complex valuesmatchrQ   rR   r   	fillvaluez,`fillvalue` must be scalar or an array with )warningscatch_warningsfilterwarningsr	   r   r   r   )r\   r]   msgs      ra   test_fillvalue_errors$TestConvolve2d.test_fillvalue_errorsO  s    B$$&##H.FWz5QC5Aq6(b9 6 '
 =:S1u1vh1a&9 21	 65 '& 21s/   +B!BB!4B2
B	B!!
B/2
C c                 8    [        [        [        S//SS/// S9  g )NrQ   rR   rZ  r   r   r   r'  s     ra   test_fillvalue_empty#TestConvolve2d.test_fillvalue_emptyZ  s    j*seq!fX "	$rd   z!jax only supports boundary='fill'c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      n[        X#SS5      nUR                  / SQ/ SQ/ SQ/5      n[        XE5        g )	NrP   rf   r   r   r   wrap)r>  r>  J   r>  r>  )D   ri  r   ri  ri  r6  r   s         ra   test_wrap_boundary!TestConvolve2d.test_wrap_boundary_  s\    JJ	9-.JJ	9-.qVV,JJ,'') * 	rd   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      n[        X#SS5      nUR                  / SQ/ SQ/ S	Q/5      n[        XE5        g )
NrP   rf   r   r   r   symm)rj   r   ,   r   B   )r  rR  r   r>  T   )R   r   \   n   r   r6  r   s         ra   test_sym_boundary TestConvolve2d.test_sym_boundaryi  s\    JJ	9-.JJ	9-.qVV,JJ,')+ , 	rd   funczboundary, expectedrm  )g     B@      E@      F@g     F@rg  )     E@ry  rx       C@c                     UR                  / SQ/5      nUR                  S5      nU" XVSUS9n[        XtR                  U5      5        g )N)       @            @      @)rQ      rg   ri   boundary)rZ   onesr5   )r\   rw  r  r   r]   imagekernelresults           ra   test_same_with_boundary&TestConvolve2d.test_same_with_boundarys  sE     

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

8 45rd   c           
         SS K Jn  UR                  UR                  SSUR                  S9S5      nUR                  UR                  SSUR                  S9S5      n[        X4SS	S
9n[        XRR                  X4S	SS95        g )Nr   rQ   r   r   )rS   rL   e   )rS   rS   rg   rg  r  )r   r   )ri   origin)scipy.ndimagendimager   r   r   r   r5   r   )r\   r]   ndir^   r_   r`   s         ra   test_boundary_extension_same+TestConvolve2d.test_boundary_extension_same  sr    
 	$JJryyF"**y=wGJJryyG2::y>Iq&6:<<6(<KLrd   c                    SS K Jn  UR                  UR                  SSUR                  S9S5      nUR                  UR                  SSUR                  S9S5      n[        X4SS	S
9n[        R                  " SS[        S9R                  SS5      n[        R                  " USS	5      nUR                  U5      n[        XQR                  UR                  XS	S9S S2S S24   5      5        g )Nr   rQ   rS   r   rL   rL   %   )rO   rO   r   rg  r  rL   )r  r  rh   r   )r  r  r   r   r   r   r   floatpadrZ   r5   r   )	r\   r]   r  r^   r_   r`   a_npapad_npapads	            ra   test_boundary_extension_full+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'"::cll4l&H"crc&RSTrd   c                     UR                  UR                  SS5      S5      nUR                  UR                  SS5      S5      n[        [        [        /X#4Q70 SS0D6  [        [        [        /X24Q70 SS0D6  g r   )r   r   r   r   r   r   s       ra   r   "TestConvolve2d.test_invalid_shapes  so     JJryyA/JJryyQ'0j*KvK&'9JKj*KvK&'9JKrd   rH   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      n[        X#S5      nUR                  / SQ/ SQ/5      n[        XE5        g )NrP   rf   r:  r;  rg   )rT   rU   rj   )r>  r?  r@  r6  )r\   r]   r7  r   rD  rC  s         ra   r   TestConvolve2d.test_same_mode  sX     JJ	9-.JJ-/EFGqV$JJ " #rd   c                    UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/5      nUR                  / SQ/5      n[        X#S5      n[        XT5        [        X2S5      n[        XT5        UR                  SS/S	S
//5      nUR                  / SQ/ SQ/5      nUR                  SS//5      n[        X#S5      n[        XT5        [        X2S5      n[        XT5        g )NrP   rf   r:  r;  r=  r   rq   r   rs         @        )r         @       @r  )r  y      @      ?y      @      y      ;@      y      G@       @r6  )r\   r]   r7  r   r   r   s         ra   r   TestConvolve2d.test_valid_mode2  s     JJ	9-.JJ-/EFG::567w'&w'&JJ(66*:;<JJ02JKL::234w'& w'&rd   z9only integer tensors of a single element can be convertedc                    UR                  S5      nUR                  / SQ5      n[        U5      n[        U5      nS H  n[        UR                  [        R
                  " XEUS95      [        R
                  " X#US95        [        UR                  [        R                  " US S S 24   US S S 24   US9SS9[        R
                  " X#US95        M     g )NrN   g	@gffffff?rL   r   r   rg   rh   r   axis)	r   rZ   rC   r4   r   r   r   squeezer   )r\   r]   r^   r_   r  b_npri   s          ra   test_consistency_convolve_funcs.TestConvolve2d.test_consistency_convolve_funcs  s    
 IIaLJJ}% # #-D

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

%%aaj!D!G*4H   40 .rd   c                     [        [        [        SS5        [        [        [        S/S/5        [        [        [        S///S///5        g )NrL   rM   rc  r'  s     ra   test_invalid_dims TestConvolve2d.test_invalid_dims  s<    j*a3j*qcA37j*ug!w?rd   z!Can't create large array for testTstride_tricksr~   c                    SSUR                  5       R                  -  -  n[        R                  " SU-  S-  [        R                   " 5       R                  -  S-  5        UR                  SU-  UR                   S9nSUS S S2'   [        R                  R                  R                  X2S4SS	9n[        R                  " USS//5      n[        R                  " US:  5      nUS
   R                  S
:X  d   eg )Nl          rR     g    .Ar   rQ   )iH  r   )shapestridesr   )r   itemsizer3   check_free_memoryr   zeroslibr  
as_stridedr   r   wherer   )r\   r]   r  r^   countfailss         ra   test_large_arrayTestConvolve2d.test_large_array  s    
 dRXXZ0001$$QUT\BHHJ4G4G%G#%MN HHTAXRXXH.#A#FF  ++AY	+R!!!q!fX.#Qx}}!!!rd   r*  N)r,  r-  r.  r/  r0  r   rE  rH  rT  r`  rd  rj  ru  pytestmarkparametrizer   r   r  r  r  r   r   r   r  r  slowxfail_on_32bitr  r2  r*  rd   ra   r4  r4    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 "rd   r4  c                      \ rS rSr\" SSS9\R                  R                  SSSSS/S	S	//5      S
 5       5       r\" SSS9\R                  R                  SSS/S	S	//5      S 5       5       r	\R                  R                  SSSSS/S	S	//5      S 5       r
\R                  R                  SSS/S	S	//5      S 5       r\R                  R                  SSSSS/SS/SS	/S	S/SS/SS/SS	/S	S//
5      S 5       r\R                  R                  SSS/SS/SS	/S	S/SS/SS/SS	/S	S//5      S 5       r\R                  R                  SSSSS/SS/SS	/S	S/SS/SS/SS	/S	S//
5      S 5       r\R                  R                  SSS/SS/SS	/S	S/SS/SS/SS	/S	S//5      S 5       r\" SSS9\R                  R                  SSSSS/S	S	//5      S 5       5       r\" SSS9\R                  R                  SSS	S/S	//5      S 5       5       r\" SSS9\R                  R                  SSSSS/S	S	//5      S 5       5       r\" SSS9\R                  R                  SSS//5      S 5       5       r\R                  R                  SSSSS/S	S	//5      S 5       r\R                  R                  SSS/S	S	//5      S 5       r\" SSS9\" SSS9S 5       5       r\" SSS9\" SSS9\R                  R                  S / / 4S!S"// 4/ S#/4/5      S$ 5       5       5       r\" SS%S9S& 5       rS' r\R                  R                  SSSSS/S	S	//5      S( 5       r\R                  R                  SSS/S	S	//5      S) 5       r\" S*S+S,9\R                  R                  SSS-/S-S/SS	/S	S/S.S-/S-S./S.S	/S	S.//5      S/ 5       5       r\R                  R<                  \R                  R                  S0\" \ " SS15      5      \" \ " S2S35      5      -   \!RD                  RG                  S45      RI                  S5S6S!5      RK                  5       -   5      S7 5       5       r&\" S*S89S9 5       r'S:r(g);TestFFTConvolvei  r   r   rI   axes Nr   r   c                     UR                  / SQ5      nUR                  / SQ5      nUS:X  a  [        X35      nO*[        U[        5      (       a  [	        U5      n[        X3US9n[        XTSS9  g )NrP   rQ   rM   rS   rX         "@r  r  Tqs*>r   rZ   r   
isinstancelistr   r4   r\   r  r]   r^   r   r   s         ra   	test_realTestFFTConvolve.test_real  s^     JJy!::012:a#C$%%T{a.CF3rd   rQ   c                 X   UR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        U[        5      (       a  [        U5      n[        X3US9n[        XTSS9  g )NrP   r  rR   rQ   r  r  r   rZ   r   tiler  r  r   r   r4   r  s         ra   test_real_axesTestFFTConvolve.test_real_axes  s     JJy!::01JJrwwq1a&)*::bgghA78dD!!;D!T*F3rd   c                     UR                  / SQ5      nUR                  / SQ5      nUS:X  a  [        X35      nO*[        U[        5      (       a  [	        U5      n[        X3US9n[        XTSS9  g )Nrq          @       @y      @      @rt   y               @y              4@y              8@y              2@r  r  r  r   r  r  s         ra   rx   TestFFTConvolve.test_complex  s]    JJ/0::IJ2:a#C$%%T{a.CF3rd   c                 X   UR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        U[        5      (       a  [        U5      n[        X3US9n[        XTSS9  g )Nr  r  rR   rQ   r  r  r   r  r  s         ra   test_complex_axes!TestFFTConvolve.test_complex_axes*  s    JJ/0::IJJJrwwq1a&)*::bgghA78dD!!;D!T*F3rd   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nUS:X  a  [        X35      nO*[        U[        5      (       a  [	        U5      n[        X3US9n[        XT5        g )N      ?rR   rL   r   )r  rM   rS   rX   r<  r   rM  8   r  r   r   rN  r   r  r   r  r  r  r  s         ra   test_2d_real_same!TestFFTConvolve.test_2d_real_same8  su     JJ!# $::2235 6 2:a#C$%%T{a.C&rd   rR   c                 p   UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nUR                  [        R                  " U/ SQ5      5      nUR                  [        R                  " U/ SQ5      5      n[        U[        5      (       a  [        U5      n[        X3US9n[        XTSS	S
9  g )NrP   r   )rQ   rM   rS   rX   r<  r  r  rR   rQ   rQ   r  r  Fr   r   r  r  s         ra   test_2d_real_same_axes&TestFFTConvolve.test_2d_real_same_axesQ  s     JJ	 ::0-.0 1 JJrwwq),-::bggh	:;dD!!;D!T*FFrd   c                     UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nUS:X  a  [        X35      nO*[        U[        5      (       a  [	        U5      n[        X3US9n[        XTSS	9  g )
N      ?       @      @      @y      @      @rr   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@r  y      $@      4@y      5@      L@y      2@      S@y      &@      N@r  r  r  r   r  r  s         ra   test_2d_complex_same$TestFFTConvolve.test_2d_complex_samei  sx     JJ0+- .::A(<  2:a#C$%%T{a.CF3rd   c                 n   UR                  / SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nUR                  [        R                  " U/ SQ5      5      nUR                  [        R                  " U/ SQ5      5      n[        U[        5      (       a  [        U5      n[        X3US9n[        XTSS	9  g )
Nr  r  r  r  r  r  r  r  r   r  r  s         ra   test_2d_complex_same_axes)TestFFTConvolve.test_2d_complex_same_axes  s     JJ0+- .::A(<  JJrwwq),-::bggh	:;dD!!;D!T*F3rd   c                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUS:X  a  [        X4S5      nO+[        U[        5      (       a  [	        U5      n[        X4SUS9n[        Xu5        US:X  a  [        XCS5      nO+[        U[        5      (       a  [	        U5      n[        XCSUS9n[        XvSS	9  g )
NrP   	rL   rL   rN   rO   r   r   r<  r   rQ        A@     D@     G@	r        4@      9@r  r   r  r{  g      <@r}  r  rg   r  r  r   r  r\   r  r]   r^   r_   
expected_1
expected_2r   s           ra   test_real_same_mode#TestFFTConvolve.test_real_same_mode  s     JJy!JJ23ZZ0
ZZ KL
2:aF+C$%%T{aF6C(2:aF+C$%%T{aF6Cf5rd   c                 p   UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        U[        5      (       a  [        U5      n[        X4SUS9n[        XuS	S
9  [        XCSUS9n[        XvS	S
9  g )NrP   r  r  r  rR   rQ   rg   r  r  r   r  r  s           ra   test_real_same_mode_axes(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!T2f5!T2f5rd   c                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUS:X  a  [        X4S5      nO+[        U[        5      (       a  [	        U5      n[        X4SUS9n[        XeSS9  US:X  a  [        XCS5      nO+[        U[        5      (       a  [	        U5      n[        XCSUS9n[        XeSS9  g )	NrL   rR   rQ   r        8@g      ?@r   rz  g     H@r        (@r  r   r  r  r   r  r\   r  r]   r^   r_   r   r   s          ra   test_valid_mode_real$TestFFTConvolve.test_valid_mode_real  s     JJy!JJ23::AB2:aG,C$%%T{aG$7CF32:aG,C$%%T{aG$7CF3rd   c                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        U[        5      (       a  [        U5      n[        X4SUS9n[        XeSS	9  g 
Nr  r  r  rR   rQ   r   r  r  r   r  r  s          ra   test_valid_mode_real_axes)TestFFTConvolve.test_valid_mode_real_axes  s     JJy!JJ23::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78dD!!;D!d3F3rd   c                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUS:X  a  [        X4S5      nO+[        U[        5      (       a  [	        U5      n[        X4SUS9n[        XeSS9  US:X  a  [        XCS5      nO+[        U[        5      (       a  [	        U5      n[        XCSUS9n[        XeSS9  g )	N      @      y       @      @r   r  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r  r   r  r  r   r  r  s          ra   test_valid_mode_complex'TestFFTConvolve.test_valid_mode_complex  s    JJ/0JJ?@::AB2:aG,C$%%T{aG$7CF32:aG,C$%%T{aG$7CF3rd   c                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        U[        5      (       a  [        U5      n[        X4SUS9n[        XeSS	9  [        XCSUS9n[        XeSS	9  g )
Nr  r  r  rR   rQ   r   r  r  r   r  r  s          ra   test_valid_mode_complex_axes,TestFFTConvolve.test_valid_mode_complex_axes  s    JJ/0JJ?@::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78dD!!;D!d3F3!d3F3rd   rG   z mapped axes must have same shapec                    UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      nUR                  [        R                  " USS/5      5      n[        X#SSS9n[	        XTSS	9  g r  )rZ   r   r  r   r4   r   s         ra   test_valid_mode_ignore_nonaxes.TestFFTConvolve.test_valid_mode_ignore_nonaxes   s     JJy!JJ23::ABJJrwwq1a&)*JJrwwq1a&)*::bgghA78!a0F3rd   r   zassorted error messagesa,brN   rO   r   c                     [        [        UR                  U5      UR                  U5      5      UR                  / 5      5        g N)r5   r   rZ   r\   r^   r_   r]   s       ra   
test_emptyTestFFTConvolve.test_empty/  s1    
 	

1rzz!}5JJrN	
rd   zjnp.pad: pad_width with nd=0c                 z    UR                  S5      nUR                  S5      n[        X#5      n[        XBU-  5        g r   )rZ   r   r5   r\   r]   r^   r_   r   s        ra   r|   TestFFTConvolve.test_zero_rank9  s4    JJtJJt!U#rd   c                     UR                  S/5      nUR                  S/5      n[        X#5      n[        UUR                  X#-  UR                  S95        g )Nr   r   r   )rZ   r   r5   r   r-  s        ra   r   #TestFFTConvolve.test_single_element@  sL    JJvJJv!

15		
:	<rd   c                 2   [         R                  R                  S5      n[         R                  R                  S5      SUR                  S5      -  -   n[         R                  R                  S5      SUR                  S5      -  -   nUR	                  [         R
                  " XES5      5      nUR	                  U5      nUR	                  U5      nUS:X  a  [        XxS5      n	O+[        U[        5      (       a  [        U5      n[        XxSUS9n	[        XSS	9  g )
N    r   )  r   r  r  绽|=r   )r   r  default_rngrandrZ   r   r   r  r  r   r4   
r\   r  r]   r  r  r  r   r^   r_   r   s
             ra   test_random_data TestFFTConvolve.test_random_dataG  s    ii##D)yy~~d#b3::d+;&;;yy~~d#b3::d+;&;;::bkk$f=>JJtJJt2:aF+C$%%T{aF6CE2rd   c                    [         R                  R                  S5      n[         R                  R                  S5      SUR                  S5      -  -   n[         R                  R                  S5      SUR                  S5      -  -   n[         R                  " XES5      n[         R
                  " USS/5      n[         R
                  " USS/5      nUR                  [         R
                  " USS/5      5      nUR                  U5      nUR                  U5      n[        U[        5      (       a  [        U5      n[        XxSUS9n	[        XS	S
9  g )Nr2  r3  r   r4  r   rR   rQ   r  r5  r6  )r   r  r7  r8  r   r  rZ   r  r  r   r   r4   r9  s
             ra   test_random_data_axes%TestFFTConvolve.test_random_data_axesX  s    ii##D)yy~~d#b3::d+;&;;yy~~d#b3::d+;&;;;;t62wwtaV$wwtaV$::bgghA78JJtJJtdD!!;D!T2E2rd   TzTODO: swapaxesr~   rM   c                    Su  p4[         R                  R                  S5      nUR                  [         R                  R                  " U6 SUR                  U5      -  -   5      nUR                  [         R                  R                  " U6 SUR                  U5      -  -   5      n[        XgS5      nUS S 2S S 2S S S 4   nUS S 2S S 2S S S 4   nUS S 2S S 2S S S 4   nUR                  UR                  SS5      SS5      nUR                  UR                  SS5      SS5      nUR                  UR                  SS5      SS5      nUR                  [         R                  " U/ S	Q5      5      nUR                  [         R                  " U/ S
Q5      5      nUR                  [         R                  " U/ SQ5      5      n[        XgSUS9n	[        XSSS9  g )N)){   rT   )      r2  r   r   r   rR   rQ   rM   )rR   rQ   rL   rQ   rQ   )rR   rQ   rQ   rM   rQ   )rR   rQ   rL   rM   rQ   r  r5  r   )r   r  r7  rZ   r8  r   moveaxisswapaxesr  r   r4   )
r\   r  r]   a_shaper   r  r^   r_   r   r   s
             ra   test_random_data_multidim_axes.TestFFTConvolve.test_random_data_multidim_axesk  s    0ii##D)JJryy~~w/"szz'7J2JJKJJryy~~w/"szz'7J2JJKaF+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!T2E>rd   r  r+  r  i  r2  r  '  c                    [         R                  R                  U5      S[         R                  R                  U5      -  -   n[         R                  R                  U5      S[         R                  R                  U5      -  -   nUR                  [         R                  " X4S5      5      nUR                  U5      nUR                  U5      n[        XgS5      n[        XSS9  [        XgSSS9n[        XSS9  g )Nr   r   r5  r   )r   r  )r   r  r8  rZ   r   r   r4   )	r\   r  r]   r  r  r   r^   r_   r   s	            ra   test_many_sizesTestFFTConvolve.test_many_sizes  s     yy~~a 2		q(9#99yy~~a 2		q(9#99::bkk$f=>JJtJJt!'E2!T2E2rd   r$  c           	         Sn[         R                  R                  S5      nUR                  UR	                  U5      5      n[         R
                  [         R                  4 Hg  nXTS'   UR                  [        R                  " SS5      5      nSn[        R                  " [        US9   [        R                  " XFSS	S
9  S S S 5        Mi     g ! , (       d  f       M{  = f)Nr  l   [<zn( r+     皙?z4Use of fft convolution.*|invalid value encountered.*rX  rg   r
   r   )r   r  r7  rZ   standard_normalnaninfr   firwinr  warnsRuntimeWarningr   )r\   r]   r  r  sig_nanr!  coeffsr_  s           ra   test_fft_nanTestFFTConvolve.test_fft_nan  s    ii##K0**S0034FFBFF#CCLZZc3 78FHCnC8fUK 98 $
 98s   *C
C	r*  ))r,  r-  r.  r/  r0  r  r  r  r  r  rx   r  r  r  r  r  r  r  r  r  r  r!  r$  r1  r*  r|   r   r:  r=  rG  r  r  r   r   r  r  randinttolistrK  rX  r2  r*  rd   ra   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rd   r  c                      [        S5      e)NzFell back to fftconvolve)RuntimeError)r  r  s     ra   fftconvolve_errr^    s    
1
22rd   c                 t    [        U SS9 VVs/ s H  u  p[        X-
  5      S:  d  M  X4PM     snn$ s  snnf )NrR   repeatrL   )r   abssizesr^   r_   s      ra   gen_oa_shapesre    sA    &uQ7 7tq15zA~ QF7   s   44c                 J   [        U 5      n[        U 5      n[        X5       VVs/ s H	  u  p4X4-   PM     nnn/ SQn[        XV5       VVs/ s HD  u  pxUS:w  d4  US   US   :  a  US   US   :  d  US   US   :  d  M1  US   US   :  d  M?  Xx4-   PMF     snn$ s  snnf s  snnf )Nr  r   r   rQ   rR   rL   )re  zipr   )	rd  shapes0shapes1ishapes0ishapes1shapesmodesishapesimodes	            ra   gen_oa_shapes_2drp    s    E"GE"G'#%# %7Hh#  % &E3:63I C3IQZ'!*$gaj)@QZ'!*$  *1gaj)@ GH3I C C	%Cs   B
0B>
B	Bc                 \    [        U SS9 VVs/ s H  u  pX:  d  M  X4PM     snn$ s  snnf )NrR   r`  r   rc  s      ra   gen_oa_shapes_eqrr    s9    &uQ7 7tqv QF7   s   ((c                      \ rS rSr\R
                  R                  5       \R
                  R                  S\" \	" \
" SSS5      5      \	" \
" SSS5      5      -   5      5      S 5       5       r\R
                  R                  S\" / SQ5      5      \R
                  R                  S	S
S/5      \R
                  R                  S/ SQ5      S 5       5       5       r\R
                  R                  SSS/5      \R
                  R                  S\" / SQ5      5      \R
                  R                  SSS/5      \R
                  R                  SSS/5      \R
                  R                  S	S
S/5      \R
                  R                  S/ SQ5      S 5       5       5       5       5       5       r\R
                  R                  S\" / SQ5      5      \R
                  R                  S	S
S/5      S 5       5       r\R
                  R                  SSS/SS/SS//5      \R
                  R                  S\" / SQ5      5      \R
                  R                  SSS/5      \R
                  R                  SSS/5      \R
                  R                  S	S
S/5      S 5       5       5       5       5       r\" SSS9\R
                  R                  S/ / 4SS// 4/ S /4/5      S! 5       5       rS" rS# rS$rg%)&TestOAConvolvei  zshape_a_0, shape_b_0rQ   r+  r  rW   c                 $   [         R                  R                  U5      n[         R                  R                  U5      nUR                  [	        XE5      5      nUR                  U5      nUR                  U5      n[        XE5      n[        Xv5        g r(  )r   r  r8  rZ   r   r   r:   )r\   	shape_a_0	shape_b_0r]   r^   r_   r   r   s           ra   test_real_manylens!TestOAConvolve.test_real_manylens  sg     IINN9%IINN9%::k!/0JJqMJJqM!#0rd   )r  /   rO   rM   rQ   
is_complexTFri   r  c                    [         R                  R                  U5      n[         R                  R                  U5      nU(       aJ  US[         R                  R                  U5      -  -   nUS[         R                  R                  U5      -  -   nUR                  [	        XxUS95      n	UR                  U5      nUR                  U5      nUR                  [        R                  S[        5        [        XxUS9n
[        X5        g Nr   rh   r   r   r  r8  rZ   r   setattrr   _signaltoolsr^  r   r:   )r\   rv  rw  r{  ri   monkeypatchr]   r^   r_   r   r   s              ra   test_1d_noaxesTestOAConvolve.test_1d_noaxes  s     IINN9%IINN9%Bryy~~i000ABryy~~i000A::k!T:;JJqMJJqMF//+	-D)!#0rd   r  r   )r  rz  rO   rM   shape_a_extrarL   shape_b_extrac
           	      $   U/S-  n
U/S-  nX*U'   X;U'   [         R                  R                  " U
6 n[         R                  R                  " U6 nU(       aF  US[         R                  R                  " U
6 -  -   nUS[         R                  R                  " U6 -  -   nU	R                  [	        XXqS95      nU	R                  U5      nU	R                  U5      nUR                  [        R                  S[        5        [        XXqS9n[        X5        g )NrR   r   ri   r  r   r~  )r\   r  rv  rw  r  r  r{  ri   r  r]   ax_aax_br^   r_   r   r   s                   ra   test_1d_axesTestOAConvolve.test_1d_axes  s     q q T
T
IINND!IINND!Bryy~~t,,,ABryy~~t,,,A::k!TEFJJqMJJqMF//+	-D4!#0rd   z0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec	                    [         R                  R                  X5      n	[         R                  R                  X$5      n
U(       aJ  U	S[         R                  R                  X5      -  -   n	U
S[         R                  R                  X$5      -  -   n
UR                  [	        XUS95      nUR                  U	5      n	UR                  U
5      n
UR                  [        R                  S[        5        [        XUS9n[        X5        g r}  r~  )r\   rv  rw  	shape_a_1	shape_b_1ri   r{  r  r]   r^   r_   r   r   s                ra   test_2d_noaxesTestOAConvolve.test_2d_noaxes  s     IINN90IINN90Bryy~~i;;;ABryy~~i;;;A::k!T:;JJqMJJqMF//+	-D)!#0rd   rR   c           	      d   U/S-  nU/S-  nX,US   '   X=US   '   XLUS   '   X]US   '   [         R                  R                  " U6 n[         R                  R                  " U6 nU	(       aF  US[         R                  R                  " U6 -  -   nUS[         R                  R                  " U6 -  -   n[        U5      nUR	                  [        XXaS95      nUR	                  U5      nUR	                  U5      nU
R                  [        R                  S[        5        [        XXaS9n[        UU5        g )NrL   r   rQ   r   r  r   )r   r  r8  r   rZ   r   r  r   r  r^  r   r:   )r\   r  rv  rw  r  r  ri   r  r  r{  r  r]   r  r  r^   r_   r   r   s                     ra   test_2d_axes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!TEFJJqMJJqMF//+	-D4!#x0rd   r   z*ValueError: Target length must be positiverI   r&  rN   rO   r   c                     [        [        UR                  U5      UR                  U5      5      UR                  / 5      SS9  g )NFr  )r5   r   rZ   r)  s       ra   r*  TestOAConvolve.test_emptyH  s3     	rzz!}bjjm4JJrN	
rd   c                 z    UR                  S5      nUR                  S5      n[        X#5      n[        XBU-  5        g r   rZ   r   r5   r-  s        ra   r|   TestOAConvolve.test_zero_rankQ  s4    JJtJJtU#rd   c                 ~    UR                  S/5      nUR                  S/5      n[        X#5      n[        XBU-  5        g r   r  r-  s        ra   r   "TestOAConvolve.test_single_elementW  s8    JJvJJvU#rd   r*  N)r,  r-  r.  r/  r  r  r  r  rr  r  r   rx  re  r  r  rp  r  r  r1  r*  r|   r   r2  r*  rd   ra   rt  rt    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
$$rd   rt  Tz!assertions may differ on backendsr~   convapproachc                       \ rS rSrS rS r\R                  R                  SS/S4SS/4S/S//4/5      S 5       r	S	 r
S
rg)TestAllFreqConvolvesi^  c                     [         R                  " SS5      R                  S5      n[         R                  " SS5      R                  S5      n[        [        SS9   U" X4S	S
9  S S S 5        g ! , (       d  f       g = f)NrQ   r   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionrX  r   rh   )r   r   r   r   r   r\   r  r]   r^   r_   s        ra   r   (TestAllFreqConvolves.test_invalid_shapesd  sg    IIaO##F+IIb!$$V,:"FG G,G G Gs   A,,
A:c                     [         R                  " / SQ5      n[         R                  " / SQ5      n[        [        SS9   U" X4SS/S9  S S S 5        g ! , (       d  f       g = f)N)rN   rO   rR   rQ   )rN   rO   rL   rQ   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)rX  r   rQ   r  )r   r  r   r   r  s        ra   test_invalid_shapes_axes-TestAllFreqConvolves.test_invalid_shapes_axesl  sM    HH\"HH\":"67 QF+	7 7 7s   
A
A r&  rQ   rR   rL   c                 d    [        [        SS9   U" X5        S S S 5        g ! , (       d  f       g = f)Nz/in1 and in2 should have the same dimensionalityrX  r   r   )r\   r^   r_   r  r]   s        ra   r(  )TestAllFreqConvolves.test_mismatched_dimsu  s-    
 :"-. . . .s   	!
/c                    [        [        SS9   U" S/S/SS9  S S S 5        [        [        SS9   U" S/S// S9  S S S 5        [        [        S	S9   U" S/S/SS/S
S//S9  S S S 5        [        [        S	S9   U" S/S// SQS9  S S S 5        [        [        SS9   U" S/S/S/S9  S S S 5        [        [        SS9   U" S/S/S/S9  S S S 5        [        [        SS9   U" S/S/SS/S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nz4acceptable mode flags are 'valid', 'same', or 'full'rX  rQ   rR   chipsrh   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrL   rM   )r  r}  r  r  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   r  )r\   r  r]   s      ra   test_invalid_flags'TestAllFreqConvolves.test_invalid_flags  sx   :"01 !qc01
 :!FH!qc+H : .2 3!qc!Q!Q(893 : .2 3!qc(893 :!GI!qc,I :!GI!qc-I :!:<!qcA/< <31 1
H H3 33 3I II I< <sR   C5DD8D(D9=E
E5
D
D
D%(
D69
E

E
E)r*  N)r,  r-  r.  r/  r   r  r  r  r  r(  r  r2  r*  rd   ra   r  r  ^  sZ    -, [[U !sAh 1#h !saSEl,-	-0rd   r  zignore::DeprecationWarningr   c           	      r   [         R                  R                  S5      R                  U 5      n[         R                  R                  S5      R                  U 5      n[         R                  " U " 5       5      (       a
  US-  nUS-  n[	        X#5      n[        U[        X#SS95        UR                  U :X  d   eg )N)r   r   rM   rM   y        ?r   r   )r   r  r  iscomplexobjr   r4   r   r   )r   r]   ru   rv   ress        ra   test_convolve_longdtype_inputr    s    
 			"))%0A
		 ''.A	uw	S	S
a
CC!x8999rd   c                      \ rS rSr/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/
r/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
rSS/r\" \R                  \R                  5      S 5       r\R                  R                  S/ SQ5      \" \R                  \R                  5      S 5       5       r\" SSS9\R                  R                  S\R$                  \R&                  \R(                  \R*                  \R,                  SS /5      \" \R                  \R                  5      S! 5       5       5       r\" SS"S9\" \R                  5      S# 5       5       r\" SS$S9\" \R                  5      S% 5       5       r\" S&S'S(9\R                  R                  S/ S)Q5      \" \R                  5      S* 5       5       5       rS+rg,)-TestMedFilti  )
r  r  r  r  r  rr     r   r   rP  )
r  r  r  r  r  r   H   M   ri  ro  )
r  r  r  r  r  rP  rz     rO  r  )
r  r  r  r  r  rF         _   #   )
r  r  r  r  r  rP  rj   r<  r  ro  )
r   a   rU   ri  r   r  r   r   G   rF   )
rO  r  rn  r  ri  rV   r  ri  rL  rp  )
rL   !   r  rQ  rQ   r   rh  7   rX   S   )
r   rC  rP  r   r  rz  rL  +   r   rM  )
rV   r   X   r   '   rM   rr  rO  r   r   )
r   r  r  r  rF   r  r  r  r   r   )
r   r  r  r  r  rF   r  r  r  r   )
r  r  r  r  r  rz  rj   rj   rP  r  )
r  r  r  r  r  r  rF   rz  rO  rF   )
r  r  r  r  r  r  rP  r  rO  r  )
r  r  r  r  r  rz  rP  r  r  rM  )
rV   r  r  r  r  rz  rP  r   r  rM  )
r   rP  r  r  rz  rP  rP  r  r   r  )
r   rV   r  r  rV   rV   r  r  r  r   )
r   r   rC  r   rM   rM   r  r  rL  r   r   rL   c                 X   UR                  U R                  5      nUR                  U R                  5      nUR                  U R                  5      n[        R
                  " X$5      n[        R                  " UR                  X!R                  S9U5      n[        XS5        [        XVSS9  g )Nr   Fr  )	rZ   INOUTKERNEL_SIZEr   medfilt	medfilt2dr   r5   )r\   r]   in_out_kernel_sizer   r7  s          ra   rb   TestMedFilt.test_basic  s}     jj!zz$((#jj!1!12NN3,RZZ::Z>L %0rd   r   
r   r   r   r   r   r   r   r   r   r   c                 >   [        U5      (       a  US;   a  [        R                  " S5        [        X!5      nUR	                  U R
                  US9n[        R                  " U5      R                  U:X  d   e[        R                  " U5      R                  U:X  d   eg )Nr   r   r   z%torch does not support unisigned intsr   )
r7   r  skipgetattrrZ   r  r   r  r   r  r\   r   r]   in_typeds       ra   
test_typesTestMedFilt.test_types  s~     B<<E%CCKK?@"::dggU:3~~h'--666)//5888rd   Tzassertions may differr~   float96float128c                    US;   aK  [         R                  " [         R                  5      R                  U:w  a  [        R
                  " SU 35        [         R                  " U R                  US9n[        R                  " [        SS9   [        R                  " U5        S S S 5        [        R                  " [        SS9   [        R                  " U5        S S S 5        g ! , (       d  f       NG= f! , (       d  f       g = f)N)r  r  zPlatform does not support r   znot supportedrX  )r   finfo
longdoubler   r  r  arrayr  r   r   r   r  r  r  s       ra   test_invalid_dtypesTestMedFilt.test_invalid_dtypes  s     ,,HHR]]+11U:KK4UG<=88DGG51]]:_=NN8$ > ]]:_=X& >= >= >=s   
C"C3"
C03
Dzobject arraysc                     [        [        [        45         [        R                  " S 5        S S S 5        g ! , (       d  f       g = fr(  )r   r   	TypeErrorr   r  r'  s     ra   	test_noneTestMedFilt.test_none  s)     J	23NN4  433s	   6
Az#strides are only writeable in NumPyc                     UR                  SUR                  S9nUSS n[        R                  R                  R                  USS9n[        [        R                  " US5      UR                  S/5      5        g )	NrS   r   rN   rO   )r   )r  rQ         @)
r   r   r   r  r  r  r4   r   r  rZ   )r\   r]   dummyr^   s       ra   test_odd_stridesTestMedFilt.test_odd_strides  sd     		"BJJ	/!AJFF  ++Au+=q!,rzz2$/?@rd   rG   z6chunk assignment does not work on jax immutable arraysrI   )r   r   r   c                   ^ ^^^^^ [        X!5      nUR                  T R                  US9mUR                  T R                  US9nTR                  UR                  :X  d   eUR                  S   S-  mUR                  S   S-  mT R
                  S   S-  S-   mT R
                  S   S-  S-   mUUUUUU 4S jnUR                  U5      n[        SS9 n1 SknU Vs1 s H  oR                  XH5      iM     n	n[        U	5       H  n
U
R                  5       u  pnXX4'   M     S S S 5        [        XS5        g s  snf ! , (       d  f       N= f)	Nr   r   rR   rQ   c                   > U u  pUS:X  a)  [        STT-   5      n[        ST* 5      n[        ST5      nO'[        TT-
  S 5      n[        TS 5      n[        TS 5      nUS:X  a)  [        STT-   5      n[        ST* 5      n[        ST5      nO'[        TT-
  S 5      n[        TS 5      n[        TS 5      nTX64   n	[        R                  " U	TR                  5      n
XU4   XX4$ Nr   )slicer   r  r  )chunkMNMinMselMoutNinNselNout
chunk_datamedM1N1r  offMoffNr\   s              ra   apply2TestMedFilt.test_medfilt2d_parallel.<locals>.apply  s     DAAvArDy)QQ|BIt,T4(RAvArDy)QQ|BIt,T4(R "#(+J"":t/?/?@CTz?D..rd   rM   )max_workers>   r   r   r   rQ   rQ   rQ   rQ   r   )r  rZ   r  r  r  r  
zeros_liker   submitr   r  r5   )r\   r   r]   r   r  outputpoolchunksr  futuresfuturedataMsliceNslicer  r  r  r  r  s   `             @@@@@ra   test_medfilt2d_parallel#TestMedFilt.test_medfilt2d_parallel  s<    "::dggU:3::dhhe:4 ~~///
 ^^A!#^^A!#"a'!+"a'!+	/ 	/8 x(A.$5F>DEfU{{50fGE 'w/'-}}$f)-v~& 0 / 	) F /.s   	D=D88,D=8D==
Er*  N)r,  r-  r.  r/  r  r  r  r@   r   r  r  rb   r  r  r  r  r0  r   bool_r   r   clongdoubler   r  r  r  r
  r2  r*  rd   ra   r  r    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*rd   r  c                   .    \ rS rSr\" SSS9S 5       rSrg)
TestWieneriF  r   zXXX: can_cast in cupy <= 13.2rI   c                    UR                  / SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ S	Q/5      n[        [        R                  " U5      US
S9  [        [        R                  " USS9US
S9  g )N)rN   rO   rM   rL   )rL   rN   rO   rR   )rR   rL   rN   rO   )rQ   rO   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@_)@rO   decimalrL   )mysize)rZ   r   r:   r   wiener)r\   r]   rD  rC  s       ra   rb   TestWiener.test_basicI  s    JJ$$$& .0ZZ  9 JJNQQRT U 	"&--"2AqA!&--!"<aKrd   r*  N)r,  r-  r.  r/  r0  rb   r2  r*  rd   ra   r  r  F  s!     f%DE
L F
Lrd   r  )meanmedianminimummaximumlinec                      \ rS rSr\" \R                  \R                  5      \" SSS9S 5       5       r	\
R                  R                  SS5      \
R                  R                  SS	5      \
R                  R                  S
S5      \" \R                  5      S 5       5       5       5       r\" \R                  5      S 5       r\
R                  R                  SS5      \
R                  R                  SS5      \
R                  R                  SS5      \" \R                  5      S 5       5       5       5       r\" SSS9\
R                  R                  S\5      \" \R                  5      S 5       5       5       r\" SSS9\" \R                  5      \
R                  R                  S\5      S 5       5       5       r\
R                  R                  S\5      \
R                  R                  SSS/5      \" SSS9\" \R                  5      S 5       5       5       5       r\" SSS9\
R                  R                  SS/\" \" S/SS/\5      5      -   5      \" \R                  \R                  5      S  5       5       5       r\
R                  R                  S!S"5      \
R                  R                  S#S$5      \" \R                  5      S% 5       5       5       r\
R                  R                  S!S&5      \
R                  R                  S#S$5      \" \R                  5      S' 5       5       5       r\
R                  R                  S(S)5      \
R                  R                  S*S)5      \" \R                  5      S+ 5       5       5       r\
R                  R                  S,/ S-Q5      \
R                  R                  S\\R:                  \R<                  \\ /5      \" \R                  5      S. 5       5       5       r!\" \R                  5      S/ 5       r"\" \R                  5      \
R                  R                  SS0S/5      \" SSS9S1 5       5       5       r#S2r$g3)4TestResamplei[  r   z-does not raise with non-int upsampling factorrI   c           
      &   UR                  SUR                  S9nSn[        R                  " SSUS9n[	        [
        [        R                  X#US9  [	        [
        [        R                  X#SS	9  [	        [
        [        R                  US
S5        [	        [
        [        R                  USS5        [	        [
        [        R                  USS5        [	        [
        [        R                  USS5        [	        [
        [        R                  USSSS9  [	        [
        [        R                  USSSSS9  [	        [
        [        R                  USSUR                  S5      S9  UR                  UR                  SUR                  S9S5      n[        R                  " XSSUS9  UR                  S:X  d   e[        R                  " USS5      n[        R                  " USSSS9n[        R                  " USSSSS9n[        X5        [        Xv5        g )N   r      )kaiser       @   r]   windowINVALIDdomainyorQ   r   g?rR   r  padtyper  rS   )r+  cval)rR   rQ   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	            ra   rb   TestResample.test_basic]  s    ii2::i.<j&//3CHj&//3I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@37yyF""" $$S!Q/!!#q!Z@!!#q!ZaH""rd   r%  )Nhammingr  )r  r  r4  )r+  r  rS   rC  c           	         [        U5      nXTR                  :X  a  UR                  OUR                  nUR	                  SSUSS9nUR                  US-  * S-  5      n[        R                  " UR                  X5      X#S9n	[        [        R                  " XUS9UR                  U	5      5        UR                  UR                  US-  * S-  5      UR                  US-  * S-  5      /5      nUR                  X5      n
[        R                  " XSUS	9nXTR                  :X  a  S
OSn[        [        R                  " XSUS	9UR                  U5      US9  g )Nr   rS   F)endpointrR         @r$  rQ   r-  &.>v!>r   )r>   r   r   r   linspacecosr   r0  r  r4   realstacksinr   )r\   r  r4  r%  r]   dt_rdt_cru   rv   desired	y_complex	resampledr   s                ra   	test_rfftTestResample.test_rfft  s      ##zz1r||r}}KK2q5K1FFAqD59//"))A"4cIv>(	* HHbffadU3Y'Ac	):;<IIa&	OOI6J	zz)ttOOA6:GGI	rd   c           	          UR                  UR                  S5      UR                  5      n[        R                  " U5      nSn[        [        R                  " X4SS9[        R                  " X$SS9SS9  g )Nr  freqr'  timer>  r   )r  r   r   sp_fftr
   r4   r   r0  )r\   r]   tsigfsigr4  s        ra   test_input_domainTestResample.test_input_domain  sZ     yy37zz$OODf5OODf5	rd   nx)rQ   rR   rL   rN   r   nyr   )r   r   c                     [        XC5      nUR                  S/U-  US9n[        R                  " XR5      n[	        XdR                  S/U-  UR
                  S95        g )NrQ   r   )r  rZ   r   r0  r4   r   )r\   rT  rU  r   r]   ru   rv   s          ra   test_dcTestResample.test_dc  sS    
 "JJsRxuJ-OOA"::qcBhagg:>?rd   z padtype not supported by upfirdnr+  c                    UR                  S5      nUR                  [        R                  R	                  S5      R                  S5      5      nUR                  USS9n[        R                  " USSXAS9  [        XE5        g )	NrL   r   rR   TcopyrN   rQ   r%  r+  )	r  rZ   r   r  r  r  r   r1  r5   )r\   r+  r]   impulser%  window_origs         ra   test_mutable_window TestResample.test_mutable_window  sg    
 ((1+BII11!4::1=>jjdj3Wa6K,rd   c                     UR                  SUR                  S9nUR                  / SQUR                  S9n[        R                  " USSXAS9nUR
                  UR                  :X  d   eg )NrS   r   rQ   rQ   rQ   rQ   rR   r\  )r   r   rZ   r   r1  r   )r\   r+  r]   ru   rC  rv   s         ra   test_output_float32 TestResample.test_output_float32  s\    
 IIb

I+JJy

J3  AqDww"**$$$rd   r   r   c                     [        X25      nUR                  SUS9n[        R                  " USSUS9nUR                  UR                  :X  d   eg )NrS   r   rQ   rR   r*  )r  r   r   r1  r   )r\   r+  r   r]   ru   rv   s         ra   test_output_match_dtype$TestResample.test_output_match_dtype  sL     "IIbI&  Aq':ww!''!!!rd   zmethod, ext, padtype)r
   FN	polyphaseFTc                    Sn/ SQnUR                  XTR                  S9[        U5      -  nUR                  S5      S S 2UR                  4   nUR                  SUR                  -  U-  U-  5      [        XTS9-  n	U GH  n
UR                  XR                  S9[        U
5      -  nUR                  SUR                  -  U-  U-  5      [        XS9-  nUS:X  a  [        R                  " XSS	9nOU(       aa  X:w  a\  [        X5      nX-  nX^-  n[        UU5      nS
U-  nSU-  n[        R                  " SU-  S-   USS9nUR                  U5      nUUS.nOSU0n[        R                  " XU4SS0UD6n[        UR                  S   5       H  nUUS S 24   nUUS S 24   n[        UUS4   5      nUSU
-  :  a1  UR!                  U5      nUS;   a  [#        UUSS9  MR  [#        UUSS9  M_  UR                  UR                  :X  d   e[$        R&                  " UU5      S   nUS:  a  M   UXZ45       e   GM     [$        R(                  R+                  S5      n[        U5      [$        R,                  " UR/                  U5      5      -  n	UR                  U	5      n	U H  n
UR                  XR                  S9[        U
5      -  n[$        R0                  " XU	5      nUS:X  a  [        R                  " X5      nO[        R                  " XUUS9nUR                  UR                  :X  d   eUR                  [$        R&                  " UU5      S   5      nUS:  a  M   U5       e   US:X  a  UR                  SS/5      n[        R                  " US5      nUR                  / SQ5      n[#        UUSS9  UR                  / S Q5      n[        R                  " US5      n UR                  S
S!/5      n![#        U U!SS9  g g )"Nr+  )	r   r  r  c   r+  r     rN     r   )r        $@g      D@rR   r#  r
   r   r  r  rS   rQ   )r   r  r$  r\  r+  r  r         ?)r  r  333333?r   r   r  gGz?r*  r   r   rM   )r         ?        r   rp  -q=)r  rn          rn  rr  )r   r   r  rZ   newaxisrD  pir.   r   r0  r   maxrS  r1  r   r  r   r4   r   corrcoefr  r  cumsumr  interp)"r\   r   extr+  r]   raterates_tor  freqsru   rate_tot_toy_tos	y_resampsrD  updownmax_ratef_chalf_lenr%  polyargsr   y_toy_resamprM  corrr  r  y1_testy1_truer  y2_testy2_trues"                                     ra   test_resample_methods"TestResample.test_resample_methods  s    < IId**I-d;

>*1bjj=9FF1ruu9u$q()D,==G99WJJ97%.HDFF1ruu9u,t34tG7KKE"OOAR@	7?G*A B9D"2t}Hx-C!H}H#]]1x<!+;S2ACFZZ/F*0WEH )73H"00T = =3;=	 5;;q>*QT{$QT?U1a4[)3=(==.D"88'$TB'$TB::777;;tX6t<D$;=t(==; +1  R ii##A&J399T?33JJqMG99WJJ97%.HD99Ta(D!??16!//D8?A::///::bkk$9$?@D$;$$;   U?VV,-Boob!,Gjj!CDGGW59./Boob!,Gjj"b*GGW59 rd   n_in)r   r<  n_out)rL   rM   c                     [         R                  " U5      nS n[        R                  " X25      n[        R                  " X2US9n[	        SU-  USS9  g)zTest callable window function. c                 4    S[         R                  " U 5      -  $ )zScale input by 1/2rn  )r   	ones_like)r|  s    ra   r5  0TestResample.test_resample_win_func.<locals>.win1  s    e,,,rd   r$  rR   rq  r   N)r   r  r   r0  r4   )r\   r  r  x_inr5  y0y1s          ra   test_resample_win_func#TestResample.test_resample_win_func*  sF    
 wwt}	- __T)__T5"bu-rd   )rO   rX   c                    Su  p4[         R                  " U5      n[        R                  " XR5      n[        R                  " XRX3U-   /S9u  pxS[         R                  " [        U5      5      U-  U-  U-  -   n	[        Xv5        [        XSS9  g)zSVerify behavior for parameter `t`.

Note that only `t[0]` and `t[1]` are utilized.
)rS   rR   )r  rS   rq  r   N)r   r  r   r0  r   lenr5   r4   )
r\   r  r  t0dtr  r  r  r
  t_refs
             ra   test__resample_param_t#TestResample.test__resample_param_t:  sv     wwt}__T)U<RYYs2w'",t3e;;.rd   n1)rR   rL   r   r   n0c                    ^ [        X5      S-  mS X4 5       nU4S jU 5       u  pE[        R                  " XB5      n[        R                  " US-   U5      n[        XeSS9  [        UR                  USS9  g)zDTest behavior at Nyquist frequency to ensure issue #14569 is fixed. rR   c              3   T   #    U  H  n[         R                  " U5      U-  v   M      g 7fr(  )r   r   ).0n_s     ra   	<genexpr>5TestResample.test_resample_nyquist.<locals>.<genexpr>R  s     48Rbiimb 8s   &(c              3   ~   >#    U  H2  n[         R                  " S [         R                  -  T-  U-  5      v   M4     g7f)rR   N)r   rA  rt  )r  t_f_nys     ra   r  r  S  s/     ="B"&&RUUT)B.//"s   :=r   rq  r   N)minr   r0  r4   rB  )	r\   r  r  ttr8  r  y1_ry1_cr  s	           @ra   test_resample_nyquist"TestResample.test_resample_nyquistL  sg    
 2{a4B84="=r&rBw+u-		2E2rd   down_factor)rR   rC  O   c                 :   [         R                  R                  S5      nSnUR                  U5      R	                  U5      nU[         R
                  [         R                  4;   a  USUR                  U5      -  -  nSUS'   SUS'   [        R                  " SSU-  SS	9n[        USUS
S9S S U2   n[        U[         R                  " U5      5      n	[        UR                  XiUR                  5       45      u  pin[        R                  " USXS	9n
[!        XSSS9  g )Nr   rI  r   r   r   r   r  r:  r$  r.  r*  rQ   r?  gv!>r   r   )r   r  r  r  r  r   r   r   rS  r   r   flipmaprZ   r[  r1  r4   )r\   r  r   r]   random_stater   ru   rC  yfhcrv   s              ra   test_poly_vs_filtfilt"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$ 

QBGGI$67	r  A{>Dt4rd   c           
         S H  n[        SSU5       H  nS H  n[        R                  R                  U45      n[        R                  R                  U45      n[        U[        R                  " U5      SS9n[        UR                  XVU45      u  pVn[        R                  " USX&S9n[        US S U2   U5        M     M     M     g )N)rR   rM   rQ   rN  )rV   r  r.  rh   )r  r  r%  )
r   r   r  r   r  r  rZ   r   r1  r4   )	r\   r]   r  rT  nweightsru   weightsy_gy_ss	            ra   test_correlate1dTestResample.test_correlate1dz  s    DAr4( (H		(("/A ii..{;G%a)9
KC&)"**q36G&HOA ..ad<C#C$K5 !) ) rd   r   c                     [        X!5      nUR                  / SQUS9n[        R                  " USSSS9n[        R
                  " U5      S:  d   eg )N)r   rQ   rR   rL   rR   rQ   r   r   rR   rQ   smooth)r  r  r+  r   )r  rZ   r   r1  r   count_nonzero)r\   r   r]   r  actuals        ra   test_gh_15620TestResample.test_gh_15620  sW     "zz/uz=%%d)*+,.68 '!+++rd   r*  N)%r,  r-  r.  r/  r@   r   r0  r1  r1  rb   r  r  r  rJ  rR  rW  r0  padtype_optionsr_  rc  rf  r  r   r  r  r  r  intr   r   r   r  complexr  r  r  r2  r*  rd   ra   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 < -,rd   r  c                        \ rS rSrS rS rSrg)TestCSpline1DEvali  c                    [         R                  " / SQ5      n[         R                  " UR                  S   5      nUS   US   -
  nUR                  [        R
                  " U5      5      nUR                  [        U5      S-  5      S-  n[        R                  " XVXCS   S9n[        US S S2   UR                  U5      SS9  g )	N)	rQ   rR   rL   rM   rL   rR   rQ   rR   r  r   rQ   rm  )dxr8  rS   rN   r  )	r   rZ   r   r  r   	cspline1dr  cspline1d_evalr:   )r\   r]   rv   ru   r  cjr  y2s           ra   rb   TestCSpline1DEval.test_basic  s    JJ45IIaggaj!qTAaD[ZZ((+,YYs1v}%,""2bqT: 	""TrT(BJJqM1Erd   c                    [         R                  " S5      n[         R                  " UR                  [         R                  S9nSnSU-  n[         R
                  " S[         R                  -  U-  U-  5      nUR                  [        R                  " U5      5      nUR                  S/5      n[        R                  " Xg5      nUR                  UR                  U5      R                  :X  d   eg )Nr}  r   rm  r  rt   rn  )r   r   r  r  r   exprt  rZ   r   r  r  r   )	r\   r]   ru   rv   Tr   cyxnewynews	            ra   rx   TestCSpline1DEval.test_complex  s    IIcNHHQWWBLL1!GFF4"%%<!#a'( ZZ((+, zz3% $$R.zzRZZ]00000rd   r*  N)r,  r-  r.  r/  rb   rx   r2  r*  rd   ra   r  r    s    	F1rd   r  c                   ~    \ rS rSrS rS r\" SSS9\" SSS9\" \R                  5      S	 5       5       5       r
S
 rSrg)TestOrderFilti  c                     [         R                  " UR                  / SQ5      UR                  / SQ5      S5      nUR                  / SQ5      n[        X#5        g )NrP   rQ   r   rQ   rQ   )rR   rL   rR   )r   order_filterrZ   r5   )r\   r]   r  expects       ra   rb   TestOrderFilt.test_basic  s?    $$RZZ	%:BJJy<QSTUI&'rd   c                 .   UR                  UR                  S[        U5      S9S5      nUR                  S[        U5      S9nUR	                  / SQ/ SQ/ SQ/ SQ/ SQ/[        U5      S9n[        [        R                  " X#S	5      U5        UR	                  / S
Q/ SQ/ SQ/ SQ/ SQ/5      n[        [        R                  " X#S5      U5        UR	                  / SQ/ SQ/ SQ/ SQ/ SQ/[        U5      S9n[        [        R                  " X#S5      U5        g )N   r   rN   rN   rL   )rr  rr  rr  rr  rr  )rr  rr  r  r}  rr  )rr  r  r=        @rr  )rr  rm        &@r  rr  r   )r=  r  r!  r  r  )r  r  g      *@      ,@r  )g      0@g      1@g      2@      3@r  )      5@      6@      7@r  r  )r  r  r  r  r  rR   r   rQ   rR   rL   r   )rN   rO   r   r   rL   )rS   rC  rX      r   )r  r   r   r  r  r   r  r   r   r  rQ   )r   r   r>   r2  rZ   r4   r   r  r\   r]   ru   r(  r   s        ra   test_doc_exampleTestOrderFilt.test_doc_example  s   JJryy+;B+?y@&I!1"!56 ::!!!$!	#
 #2&  
 	++Aq98D ::!%&&&	(
 	++Aq98D :: ! 	"
 #2&  
 	++Aq98Drd   z
dask.arrayzrepeat requires an axisrI   r   zarray-api-compat#292c                 (   UR                  UR                  S5      S5      nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        [        R
                  " US5      U5        [        [        R                  " X!R                  S	5      S
5      U5        g )Nr  r  r  )rQ   rO   r   r   rM   )rO   rC  rX   r  r<  )rC  r   r   r     )r   r   r   r  r   rL   r  rM   )r   r   rZ   r4   r   r  r  r  )r\   r]   ru   r   s       ra   test_medfilt_order_filter'TestOrderFilt.test_medfilt_order_filter  sz     JJryy}f- ::!	!
 	q!,h7776?A6	
rd   c                 ~   UR                  UR                  S5      S5      nUR                  / SQ/ SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/ S	Q/ S
Q/5      n[        [        R
                  " X#S5      U5        UR                  / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        [        R
                  " X#S5      U5        g )Nr  r  )rQ   rQ   r   )r   rQ   r   r   r   r   r   r   r   r   r   )r   r   rQ   rR   rL   )r   rN   rO   r   r   )r   rS   rC  rX   r  r  r   )r   rQ   rR   rL   rM   )rN   rO   r   r   r<  )rS   rC  rX   r  r  )r  r   r   r  r  rQ   )r   r   rZ   r4   r   r  r  s        ra   test_order_filter_asymmetric*TestOrderFilt.test_order_filter_asymmetric  s    JJryy}f-
 ::  	"
 	++Aq98D::!!	#
 	++Aq98Drd   r*  N)r,  r-  r.  r/  rb   r  r1  r@   r   r  r  r  r2  r*  rd   ra   r  r    sR    (
$EL |,EFw'=>v~~&
 ' ? G
&Erd   r  c                   v   \ rS rSrS rS r\" SSS9S 5       rS rS	 r	\" SS
S9S 5       r
\" SS
S9S 5       rS rS r\" SS
S9S 5       r\" SS
S9S 5       rS r\" SSS9S 5       rS r\" SSS9S 5       r\" SS
S9S 5       r\" SS
S9S 5       r\" SS
S9S 5       rS r\" SSS9S 5       rS r\" SSS9\R8                  R;                  SS S // S!QS"S"// S#Q4\S$9\" \ 5      S% 5       5       5       r!\" \ 5      S& 5       r"\" S'S(S9\" SS)S9\" \ 5      S* 5       5       5       r#\" SS
S9S+ 5       r$\" SS
S9S, 5       r%S- r&S. r'\" S/S09\R8                  R;                  SS1S1/\(RR                  " S15      /5      \R8                  R;                  S2S1S1/\(RR                  " S15      /5      S3 5       5       5       r*S4r+g5)6_TestLinearFilteri  c                     [        U[        5      (       a  UO[        R                  " U5      nUR	                  SUS-
  U5      n[        U[        5      (       d  UR                  XA5      nU R                  XB5      $ )Nr   rQ   )r  r  mathprodr@  r   convert_dtype)r\   r  r]   	prodshaperu   s        ra   generate_TestLinearFilter.generate  s`    's33E59I	KK9q=)4%%%

1$A!!!((rd   c                    U R                   [        R                   " S5      :X  a  [        R                  " U5      n[        R                  " UR                  U R                   5      n[        R
                  " X/SS/S/S//5      nU H  u  pVU R                  US   5      US'   M     U$ [        U R                   [        5      (       a  [        X R                   5      OU R                   nUR                  XS9$ )	NOrefs_okzerosize_okreadonly	writeonlyr*  .r   )
r   r   rZ   emptyr  nditertyper  strr  )r\   arrr]   r   iterru   rv   r   s           ra   r  _TestLinearFilter.convert_dtype  s    ::#&**S/C((399djj1C99cZ)M)B${m46D1R5)# J #4::s33 R,**  ::c://rd   r   z/XXX https://github.com/scipy/scipy/issues/23539rI   c                   ^ TR                  S/5      TR                  S/5      TR                  SS/5      pCn[        R                  " [        SS9   [	        TR                  S5      X45        SSS5        [        R                  " [        SS9   [	        TR                  / 5      X45        SSS5        [        R                  " [        SS9   [	        UTR                  S5      U5        SSS5        [        R                  " [        SS9   [	        UTR                  / 5      U5        SSS5        [        R                  " [        S	S9   U4S
 jX#U4 5       u  p#n[	        X#U5        SSS5        g! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z"Verify all exceptions are raised. rQ   rR   rL   rM   z^Parameter b is notrX  Nz^Parameter a is notz^Parameter's dtypes produced c              3   Z   >#    U  H   nTR                  UTR                  S S9v   M"     g7f)FrZ  N)r  r   )r  v_r]   s     ra   r  8_TestLinearFilter.test_invalid_params.<locals>.<genexpr>8  s$     PiryyRYYUy;is   (+)rZ   r  r   r   r   r2  NotImplementedError)r\   r]   r_   r^   ru   s    `   ra   r   %_TestLinearFilter.test_invalid_params+  s,    **aS/2::qc?BJJ1v4Fa]]:-BCBFF1Iq$ D]]:-BCBJJrNA) D]]:-BCArvvay!$ D]]:-BCArzz"~q) D]].6UVPqQiPGA!A! WV DCCCCCCCVVs<   E.F F	F"F3.
E= 
F
F"
F03
Gc                     U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  / SQU5      n[        [        X4U5      U5        g )NrO   rQ   r   rn        ࿩r   rR   rM   rO   r   rm  r  r  r:   r   r\   r]   ru   r_   r^   y_rs         ra   test_rank_1_IIR!_TestLinearFilter.test_rank_1_IIR;  sb    MM$#2w+T{B/  !5r:!'!"2C8rd   c                     U R                  SU5      nU R                  SS/U5      nU R                  S/U5      nU R                  / SQU5      n[        [        X4U5      U5        g )Nr  rQ   r   rQ   rL   rN   r   r  r  r  s         ra   test_rank_1_FIR!_TestLinearFilter.test_rank_1_FIRB  s`    MM$#1vr*sB'  !4b9!'!"2C8rd   z*XXX https://github.com/cupy/cupy/pull/8677c                 4   U R                  SU5      nU R                  / SQU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  / SQU5      nU R                  SS	/U5      n[        X4X%S
9u  p[        X5        [        X5        g )Nr  rQ   r   r   rn  r  rQ   rR   )rQ   rN   r<  r  r   r  r  zir  r  r   r:   
r\   r]   ru   r_   r^   r+  r   zf_rrv   zfs
             ra   test_rank_1_IIR_init_cond+_TestLinearFilter.test_rank_1_IIR_init_condI  s    MM$#z2.T{B/A+  !6;!!2s)R0a'!!)!"+rd   c                 2   U R                  SU5      nU R                  / SQU5      nU R                  S/U5      nU R                  SS/U5      nU R                  / SQU5      nU R                  SS/U5      n[        X4X%S9u  p[        X5        [        X5        g )Nr  rb  rQ   )rQ   rR   rL   rO   r<  r  r<  rN   r*  r,  r-  s
             ra   test_rank_1_FIR_init_cond+_TestLinearFilter.test_rank_1_FIR_init_condU  s    MM$#y"-sB'A+  !5r:!!1a&"-a'!!)!"+rd   c                     U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  / SQ/ SQ/ SQ/ SQ/U5      n[        X4USS9n[        XV5        g )	NrM   rL   rQ   r   rn  r   rR   rM   rO   rM   rR   r   r  r,  )r\   r]   ru   r_   r^   y_r2_a0rv   s          ra   test_rank_2_IIR_axis_0(_TestLinearFilter.test_rank_2_IIR_axis_0a  su    MM&"%2w+Sz2.$$iI&/&1246A!!$!'-rd   c                     U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  / SQ/ SQ/ SQ/ SQ/U5      n[        X4USS	9n[        XV5        g )
Nr6  rQ   r   rn  r   rR   r   rO   r?  rO   rX   r)  rX   r  ir  r  r,  )r\   r]   ru   r_   r^   y_r2_a1rv   s          ra   test_rank_2_IIR_axis_1(_TestLinearFilter.test_rank_2_IIR_axis_1j  su    MM&"%2w+Sz2.$$i])&+,.0A!!$!'-rd   c                    U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  [        R                  " S5      U5      nU R                  / SQ/ SQ/ SQ/ S	Q/U5      nU R                  / S
QU5      S S 2[        R                  4   n[        X4USUS9u  p[        Xh5        [        X5        g )Nr6  rQ   r   rn  )rM   rQ   rb  )r   r   )r  r  )r  r  )rE  rG  iir  r+  )r  r  r   r  rs  r   r:   )
r\   r]   ru   r_   r^   r+  	y_r2_a0_1r.  rv   r/  s
             ra    test_rank_2_IIR_axis_0_init_cond2_TestLinearFilter.test_rank_2_IIR_axis_0_init_conds  s    MM&"%2w+Sz2.3&&	:}+(-.02	!!"5r:1bjj=IaaB/!)/!"+rd   c                 r   U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      nU R                  [        R                  " S5      U5      nU R                  / SQ/ SQ/ SQ/ SQ/U5      nU R                  / SQ/U5      n[	        X4US	US
9u  p[        Xh5        [        X5        g )Nr6  rQ   r   rn  rQ   rL   )rQ   rL   rN   )rN   rL   rQ   )rN  rN  r   rH  )r  r  r   r  r   r:   )
r\   r]   ru   r_   r^   r+  	y_r2_a0_0r.  rv   r/  s
             ra    test_rank_2_IIR_axis_1_init_cond2_TestLinearFilter.test_rank_2_IIR_axis_1_init_cond  s    MM&"%2w+Sz2.4&&	9(19(>?AC	!!?"3R8aaB/!)/!"+rd   c                 d  ^	^
 U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      n[        [        XCU45      u  m	m
n[	        UR
                  5       HE  n[        X4X&5      n[        R                  " U	U
4S jXe5      n[        XqR                  U5      5        MG     g )NrM   rL   rR   rQ   r   rn  c                    > [        TTU 5      $ r(  r   wr  r  s    ra   <lambda>3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>      dA0Frd   r  r  r  rC   r   ndimr   r   apply_along_axisr:   rZ   r\   r]   ru   r_   r^   x_npr  rv   r   r  r  s            @@ra   test_rank_3_IIR!_TestLinearFilter.test_rank_3_IIR  s    MM)R(2w+Sz2.01)<dD!&&MDa&A%%&FSC%aC9 "rd   
inaccuratec                   ^^^ U R                  SU5      nU R                  SS/U5      nU R                  SS/U5      n[        UR                  5       H  n[	        UR
                  5      nSXe'   U R                  UR                  U5      U5      nU R                  S/U5      n[        X4X%U5      u  p[        [        X4U45      u  mmmUUU4S jnUUU4S jn[        R                  " X[        U5      5      n[        R                  " X[        U5      5      n[        XR                  U5      5        [        XR                  U5      5        M     g )NrS  rQ   r   rn  c                 "   > [        TTU TS9S   $ Nr*  r   rU  rW  r  r  zi1_nps    ra   lf08_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0      tT18;;rd   c                 "   > [        TTU TS9S   $ Nr*  rQ   rU  rf  s    ra   lf18_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1  rj  rd   )r  r  r   r\  r  r  r  r   r  rC   r   r]  r:   rZ   )r\   r]   ru   r_   r^   r  zi_shaper+  zi1rv   r/  rh  rm  r   r.  r  r  rg  s                  @@@ra   test_rank_3_IIR_init_cond+_TestLinearFilter.test_rank_3_IIR_init_cond  s   MM)R(2w+Sz2.!&&MDAGG}HHN##BGGH$5r:B$$aS"-CA!2.EA!$%6s!DD$<<%%c1B11EFC&&s2CA2FGD%aC9%b**T*:; "rd   c                 b  ^	^
 U R                  SU5      nU R                  / SQU5      nU R                  S/U5      n[        [        XCU45      u  m	m
n[	        UR
                  5       HE  n[        X4X&5      n[        R                  " U	U
4S jXe5      n[        XqR                  U5      5        MG     g )NrS  r(  rQ   c                    > [        TTU 5      $ r(  rU  rV  s    ra   rX  3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>  rZ  rd   r[  r^  s            @@ra   test_rank_3_FIR!_TestLinearFilter.test_rank_3_FIR  s    MM)R(z2.sB'01)<dD!&&MDa&A%%&FSC%aC9 "rd   c                   ^^^ U R                  SU5      nU R                  / SQU5      nU R                  S/U5      n[        [        X#U45      u  nmm[	        UR
                  5       H  n[        UR                  5      nSXv'   U R                  UR                  U5      U5      nU R                  SS/U5      n	[        U	5      m[        X4X&U5      u  p[        [        X4U	45      u  mmmUUU4S jnUUU4S jn[        R                  " XU5      n[        R                  " XU5      n[        XR                  U5      5        [        XR                  U5      5        M     g )NrS  r(  rQ   rR   c                 "   > [        TTU TS9S   $ re  rU  rf  s    ra   rh  8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0  rj  rd   c                 "   > [        TTU TS9S   $ rl  rU  rf  s    ra   rm  8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1  rj  rd   )r  r  r  rC   r   r\  r  r  r  r   r   r]  r:   rZ   )r\   r]   ru   r_   r^   r_  r  ro  r+  rp  rv   r/  rh  rm  r   r.  r  r  rg  s                   @@@ra   test_rank_3_FIR_init_cond+_TestLinearFilter.test_rank_3_FIR_init_cond  s)   MM)R(z2.sB'01)<dD!&&MDAGG}HHN##BGGH$5r:B$$aVR0C&s+FA!2.EA!$%6s!DD$<<%%c6C&&s$7D%aC9%b**T*:; "rd   c                    U R                  SU5      n[        R                  " SSSS9u  p4U R                  X15      nU R                  XA5      nUR                  S   S-
  nU R                  UR                  SS	U45      U5      nU R                  UR                  SSU45      U5      n[        X4X&S
9u  p[        X4X'S
9u  p[        X5        [        X5        [        [        [        X4USUR                  U5      5        g )N)rM   rN   r  r   rO  bar  r   rQ   rM   rN   r*  r   )
r  r   r   r  r  r  r   r:   r   r   )r\   r]   ru   r_   r^   zi_sizezi_fullzi_singy_fullzf_fully_singzf_sings               ra   test_zi_pseudobroadcast)_TestLinearFilter.test_zi_pseudobroadcast  s    MM*b)}}QD1q%q%''!*q. $$RWWaG_%=rB$$RWWaG_%=rB!!6!!6!&1!'3 	j'1B8HIrd   c                     U R                  SU5      nU R                  / SQU5      nU R                  S/U5      nU R                  / SQU5      n[        X4S   U5      n[        Xe5        g )NrO   r(  rQ   )r   rQ   rR   rR   rR   rR   r   r,  )r\   r]   ru   r_   r^   r   rv   s          ra   test_scalar_a_TestLinearFilter.test_scalar_a  se     MM!R z2.sB'  !3R8AtQ!!)rd   c                 v   U R                  UR                  SUR                  S9U5      nU R                  UR                  SUR                  S9U5      nU R                  UR	                  / SQ5      U5      n[
        R                  " S[
        R                  S9nUSS S 2S S 24==   S-  ss'   USS S 2S S 24==   S-  ss'   UR	                  U5      nU R                  XQ5      nU R                  UR                  S	UR                  S9U5      n[
        R                  " S[
        R                  S9nS//S//S///US S 2S S 2S S
24'   UR	                  U5      nU R                  Xq5      n[        X4USU5      u  p[        X5        [        X5        [        X4S   USU5      u  p[        X5        [        X5        g )N)rL   rR   rN   r   rN   )rQ   r   r   )rL   rQ   rM   rQ   rR   rL   )rL   rR   rM   rM   r   r   )r  r  r   r  rZ   r   r   r:   )r\   r]   ru   r_   r^   r+  zf_expected
y_expectedy_iirzf_iiry_firzf_firs               ra   test_zi_some_singleton_dims-_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^'(()288)LbQXXirxx8
"#use4
1a!8ZZ
+
''
7
  aR0!%4!&6  Q4B3!%4!&6rd   c           	          U R                  X5      nU R                  X&5      nU R                  X65      nU R                  XV5      n[        [        [        XX4U5        g r(  )r  r   r   r   )r\   r_   r^   ru   r  r+  r]   s          ra   base_bad_size_zi"_TestLinearFilter.base_bad_size_zi  sR    q%q%q%'j'1"=rd   zcupy does not raisec                    UR                  S5      nU R                  S/S/USS/U5        U R                  SS/S/USSS/U5        U R                  SS/S/USS//U5        U R                  SS/S/US/ SQU5        U R                  / SQS/USS//U5        U R                  / SQS/US/ SQU5        U R                  S/SS/USSS/U5        U R                  S/SS/USS//U5        U R                  S/SS/US/ SQU5        U R                  / SQSS/USS/U5        U R                  / SQSS/USS/S//U5        U R                  / SQSS/US/ SQU5        U R                  / SQSS/US/ SQU5        U R                  SS// SQUSS/U5        U R                  SS// SQUSS/S//U5        U R                  SS// SQUS/ SQU5        U R                  SS// SQUS/ SQU5        [        R                   " S5      R                  S	5      nUR	                  U5      nU R                  S/S/USS/U5        U R                  SS/S/US/ SQU5        U R                  SS/S/US/ SQ//U5        U R                  SS/S/USS/S/S
//U5        U R                  SS/S/USSS//U5        U R                  SS/S/US/ SQ/U5        U R                  / SQS/US/ SQU5        U R                  / SQS/US/ SQ/ SQ//U5        U R                  / SQS/USSS/S
S/SS//U5        U R                  / SQS/USSS/S
S//U5        U R                  / SQS/US/ SQ/ SQ/U5        U R                  S/SS/US/ SQU5        U R                  S/SS/US/ SQ//U5        U R                  S/SS/USS/S/S
//U5        U R                  S/SS/USSS//U5        U R                  S/SS/US/ SQ/U5        U R                  S// SQUS/ SQU5        U R                  S// SQUS/ SQ/ SQ//U5        U R                  S// SQUSSS/S
S/SS//U5        U R                  S// SQUSSS/S
S//U5        U R                  S// SQUS/ SQ/ SQ/U5        U R                  / SQSS/US/ SQU5        U R                  / SQSS/US/ SQ/ SQ//U5        U R                  / SQSS/USSS/S
S/SS//U5        U R                  / SQSS/USSS/S
S//U5        U R                  / SQSS/US/ SQ/ SQ/U5        U R                  S/S/USS/U5        U R                  SS/S/US/ SQU5        U R                  SS/S/USS/S/S
/S///U5        U R                  SS/S/US/ SQ/U5        U R                  SS/S/USS/S/S
//U5        U R                  SS/S/USS/S/S
/S/S//U5        U R                  / SQS/US/ SQU5        U R                  / SQS/USSS/S
S/SS/SS///U5        U R                  / SQS/US/ SQ/ SQ/U5        U R                  / SQS/USSS/S
S/SS//U5        U R                  / SQS/USSS/S
S/SS/SS/SS//U5        U R                  S/SS/US/ SQU5        U R                  S/SS/USS/S/S
/S///U5        U R                  S/SS/US/ SQ/U5        U R                  S/SS/USS/S/S
//U5        U R                  S/SS/USS/S/S
/S/S//U5        U R                  S// SQUS/ SQU5        U R                  S// SQUSSS/S
S/SS/SS///U5        U R                  S// SQUS/ SQ/ SQ/U5        U R                  S// SQUSSS/S
S/SS//U5        U R                  S// SQUSSS/S
S/SS/SS/SS//U5        U R                  / SQSS/US/ SQU5        U R                  / SQSS/USSS/S
S/SS/SS///U5        U R                  / SQSS/US/ SQ/ SQ/U5        U R                  / SQSS/USSS/S
S/SS//U5        U R                  / SQSS/USSS/S
S/SS/SS/SS//U5        g )NrO   rQ   r   r   r   rQ   rR   rb  r   rQ   rR   rL   rX   r6  rR   )r   rQ   rR   rL   rM   rN   rf   rL   rM   rN   )rM   rN   rO   r   )r   rQ   rR   rL   rM   rN   rO   r   r   r   r<  )r   r  r   r   rZ   )r\   r]   r  r  s       ra   test_bad_size_zi"_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rd   c                    U R                  SU5      nU R                  S/U5      nU R                  S/U5      nU R                  / U5      n[        XCX%S9u  pg[        Xb5        UR                  [        U R                  [        5      (       a  [        XR                  5      OU R                  :X  d   e[        U5      S:X  d   eg )N)rN   rQ   r*  r   )	r  r  r   r:   r   r  r  r  r=   )r\   r]   ru   r^   r_   r+  rv   r/  s           ra   test_empty_zi_TestLinearFilter.test_empty_zi  s    MM$#sB'sB'B'a'!!'xx)$**c:: $B

3!%- 	- - r{ard   rG   z jax does not support inplace opsr^   rQ   )rQ   rn        ?rR   )rR   rQ   rL   )idsc           	         [        U5      (       a2  [        U[        [        -  5      (       a  [        R
                  " S5        U R                  SU5      nU R                  / SQU5      nU R                  X5      n[        U5      S-
  n[        U5      S-
  n[        U5      (       a  Xe-   O
[        XV5      n[        XAX0R                  Xr5      S9u  p[        XAUR                  U5      UR                  U5      5      n
[        X5        g )Nz0cupy does not supoprt scalar filter coefficientsrO   )rn  r  rO  rQ   r*  )r9   r  r  r  r  r  r  r  r=   ru  r   r#   r  r:   )r\   r^   r]   ru   r_   r  r  Kr  zi_1zi_2s              ra   test_lfiltic_TestLinearFilter.test_lfiltic  s     2;;:au55KKJKMM!R |R0q%AJNAJNR[[AEc!i1}}Q';<qRWWR["''!*5!$-rd   c           	         [        [        [        SS// SS/SS/5        [        [        [        SS/SS/SS/SS/5        [        [        [        SS/S/S//SS/SS/5        [        [        [        S/S//S/SS/SS/5        g )NrQ   rR   r   )r   r   r#   r#  s    ra   test_lfiltic_bad_coeffs)_TestLinearFilter.test_lfiltic_bad_coeffs  s     	j'Aq621v1vFj'Aq6Aq6Aq6Aq6Jj'Aq6QC!:1v1vNj'QC!:sQFQFKrd   array_api_strictz-int64 and float64 cannot be promoted togetherzjax dtype defaults differc                 `   U R                  S/U5      nU R                  S/U5      n[        X2UR                  SS/5      5      n[        X2UR                  SS/5      5      n[        X2UR                  SS/5      5      n[        XE5        U R                  [
        :X  a  0 OSS0n[        XF40 UD6  g )NrQ   r  r   TFr   )r  r#   rZ   r5   r   object)r\   r]   r^   r_   r+  r  r  check_dtype_args           ra   test_lfiltic_bad_zi%_TestLinearFilter.test_lfiltic_bad_zi  s     sB'sB'Q2::r1g./qRZZa12qRZZu67! $

f 4"=%:P4O4rd   c                 2   U R                  S/U5      nU R                  / SQU5      nU R                  SS/U5      nU R                  S/U5      nU R                  S/U5      nU R                  SS/U5      n[        X2XTS9u  p[        X5        [        X5        g )	NrQ   r(  rR   r   r  rh  r*  r  r   r:   
r\   r]   r^   r_   r+  ru   yezferv   r/  s
             ra   test_short_x_FIR"_TestLinearFilter.test_short_x_FIR  s     sB'z2.A+tR(b)  !S2.a'!!(!"*rd   c                 4   U R                  SS/U5      nU R                  / SQU5      nU R                  SS/U5      nU R                  S/U5      nU R                  S/U5      nU R                  SS/U5      n[        X2XTS	9u  p[        X5        [        X5        g )
NrQ   r(  rR   r   r  rh  ir  r*  r  r  s
             ra   test_short_x_IIR"_TestLinearFilter.test_short_x_IIR  s     1vr*z2.A+tR(b)  #sR0a'!!(!"*rd   c                    U R                  SU5      nU R                  SS/U5      n[        X1S9nU R                  SS/U5      n[        XQS9nU R                  / SQU5      n[        X5U5      n[	        X5        [        X45        [        XV5        g )Nr  rQ   r   r#  rn  r  r  r  r  r<   r   r:   r5   	r\   r]   ru   r_   b0r^   a0r   y_fs	            ra   test_do_not_modify_a_b_IIR,_TestLinearFilter.test_do_not_modify_a_b_IIR  s    MM$#2w+QT{B/Q  !5r:aA!#+rd   c                    U R                  SU5      nU R                  / SQU5      n[        X1S9nU R                  S/U5      n[        XQS9nU R                  / SQU5      n[        X5U5      n[	        X5        [        X45        [        XV5        g )Nr  r  r#  rR   )r   rn  rQ   rR   rL   r  r  r  s	            ra   test_do_not_modify_a_b_FIR,_TestLinearFilter.test_do_not_modify_a_b_FIR  s    MM$#y"-QsB'Q  !6;aA!#+rd   Tr$  r  r_   c                     [         R                  R                  S5      nUR                  U5      n[	        [        UR                  S/5      UR                  S/5      U5      [        X!U5      5        g )NrS   r  )r   r  r  rZ   r4   r   )r\   r^   r_   r]   r  s        ra   test_scalar_input#_TestLinearFilter.test_scalar_input  sX     yyr"zz$BJJu%rzz3%'8$?A$	
rd   r*  N),r,  r-  r.  r/  r  r  r0  r   r!  r%  r0  r3  r:  rB  rJ  rP  r`  r1  rq  rv  r}  r  r  r  r  r  r  r  r  r  r  r@   r#   r  r  r  r  r  r  r  r   r  r  r2  r*  rd   ra   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rxx}"=>[[S3rxx}"=>
 ? ? $
rd   r  c                       \ rS rSrSrSrg)TestLinearFilterFloat32i  r   r*  Nr,  r-  r.  r/  r   r2  r*  rd   ra   r  r        Erd   r  c                       \ rS rSrSrSrg)TestLinearFilterFloat64i	  r   r*  Nr  r*  rd   ra   r  r  	  r  rd   r  r$  c                   8    \ rS rSr\R
                  " S5      rSrg)TestLinearFilterFloatExtendedi	  rD  r*  Nr,  r-  r.  r/  r   r   r2  r*  rd   ra   r  r  	      HHSMErd   r  c                       \ rS rSrSrSrg)TestLinearFilterComplex64i	  r   r*  Nr  r*  rd   ra   r  r  	  s    Erd   r  c                       \ rS rSrSrSrg)TestLinearFilterComplex128i	  r   r*  Nr  r*  rd   ra   r  r  	  s    Erd   r  c                   8    \ rS rSr\R
                  " S5      rSrg)TestLinearFilterComplexExtendedi	  Gr*  Nr  r*  rd   ra   r  r  	  r  rd   r  c                 $   [        [        S5      (       a*  S[        R                  ;   a  [        R                  " S5        [        [        [        S/S// SQ5        [        [        [        S/S // SQ5        [        [        [        S /S// SQ5        g )Nabiflagsr   z'test is flaky when run with python3-dbgr  )r  Nr}  r  r}  r  )hasattrsysr  r  r  r   r  r   r#  s    ra   test_lfilter_bad_objectr  	  sf     sJC3<<$7=>)WsecU4DE)WsedV_E)Wtfse_Erd   c                 >    [        [        [        SS/SS// SQ5        g )NrR   rL   rM   rN   )rQ   rR   rL   rM   rN   )r   r  r   r#  s    ra   !test_lfilter_notimplemented_inputr  $	  s     %w1!ukJrd   r  r  rG   zfails all aroundrI   c                       \ rS rSrS rS rS r\" SSS9S 5       rS	 r	S
 r
S rS r\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       rSrg)TestCorrelateReali*	  c                 v    UR                  SSSUS9nUR                  SSSUS9nUR                  / SQUS9nX4U4$ )Nr   rL   rM   r   rQ   rR   )r   rR   rN   r   rL   )r@  rZ   r\   r  r]   r^   r_   r   s         ra   _setup_rank1TestCorrelateReal._setup_rank13	  sJ    KK1arK*KK1arK*jjj3Syrd   c                     Sn [         R                  " U5      n[        US5      (       a,  [        S[         R                  " UR
                  5      -  5      nU$ ! [         a     U$ f = f)NrO   
resolutionr  )r   r  r  r  log10r  	Exception)r\   res_dtr  dt_infos       ra   equal_tolerance!TestCorrelateReal.equal_tolerance:	  se    	hhv&Gw--d288G,>,>#??@   		s   AA 
A'&A'c                     U[         R                  :X  a  U R                  [         R                  5      $ U R                  U5      $ r(  )r   r  r  r   )r\   r  s     ra   equal_tolerance_fft%TestCorrelateReal.equal_tolerance_fftE	  s6     R]]"''

33''//rd   Tz	order='F'r~   c                 >   [        X!5      nU R                  X5      u  p4n[        X4SS9n[        X4SS9n[        XVU R	                  UR
                  5      S9  [        XWU R                  UR
                  5      S9  UR
                  U:X  d   eUR
                  U:X  d   eg )Nr
   r   r   r  )r  _setup_rank3r   r:   r  r   r  )r\   r  r]   r^   r_   r   y_ffty_directs           ra   test_methodTestCorrelateReal.test_methodM	  s    R_%%b-	c!u-Q(3!#*.*B*B5;;*O	R!#*.*>*>x~~*N	Q{{b   ~~###rd   c                    [        U5      (       a  US;   a  [        R                  " S5        [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[        X4S5      n[        XeSS 5        UR                  U:X  d   e[        XCS5      n[        XbR                  USS 5      5        UR                  U:X  d   eg )Nr  $torch does not support unsigned intsr   rQ   rM   )r7   r  r  r  r  r  r  r   r:   r   r  r\   r  r]   r^   r_   r   rv   s          ra   test_rank1_valid"TestCorrelateReal.test_rank1_valid\	  s    B<<B"@@;;=> *2s 3 3WR_%%b-	caG$!!1X.ww"}} aG$!!WWS1X%67ww"}}rd   c                     [        U5      (       a  US;   a  [        R                  " S5        [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[        X4S5      n[        XeS S 5        UR                  U:X  d   eg )Nr  r  rg   r   
r7   r  r  r  r  r  r  r   r:   r   r  s          ra   test_rank1_same!TestCorrelateReal.test_rank1_samek	  su    B<<B"@@;;=> *2s 3 3WR_%%b-	caF#!!"X.ww"}}rd   c                    [        U5      (       a  US;   a  [        R                  " S5        [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[        X4S5      n[        Xe5        UR                  U:X  d   eg )Nr  r  r   r  r  s          ra   test_rank1_full!TestCorrelateReal.test_rank1_fullv	  so    B<<B"@@;;=> *2s 3 3WR_%%b-	caF#!!)ww"}}rd   c                    [         R                  " SSS5      R                  SSS9R                  U5      n[         R                  " SSS5      R                  S	SS9R                  U5      n[         R                  " / S
Q/ SQ/ SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ SQ/ SQ//[         R
                  S9R                  U5      nX4U4$ )Nr   r  rN  )rR   rM   rN   F)orderrW   rL  r   )rr  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@rr  r   )r   r@  r   r  r  r   r  s         ra   r  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rd   c           	      b   [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[	        X4S5      n[        XeSS2SS2SS24   5        UR                  U:X  d   e[	        XCS5      n[        XeSS2SS2SS24   S S S2S S S2S S S24   5        UR                  U:X  d   eg )Nr   rQ   rR   rM   rL   rN   r   )r  r  r  r  r   r:   r   r  s          ra   test_rank3_valid"TestCorrelateReal.test_rank3_valid	  s     *2s 3 3WR_%%b-	caG$!!1ac1Q3%78ww"}} aG$!!1ac1Q3%7"ddDbD8H%IJww"}}rd   c                     [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[	        X4S5      n[        XeSS2SS2SS24   5        UR                  U:X  d   eg )Nrg   r   r   rQ   r  r  r  r  r  r   r4   r   r  s          ra   test_rank3_same!TestCorrelateReal.test_rank3_same	  si     *2s 3 3WR_%%b-	caF#qtQrT1R4/01ww"}}rd   c                     [        U[        5      (       a  [        X!5      OUnU R                  X5      u  p4n[	        X45      n[        Xe5        UR                  U:X  d   eg r(  r  r  s          ra   test_rank3_all TestCorrelateReal.test_rank3_all	  sN     *2s 3 3WR_%%b-	caOww"}}rd   r*  N)r,  r-  r.  r/  r  r  r  r0  r  r  r  r  r  r  r  r  r2  r*  rd   ra   r  r  *	  s    	0 d;7$ 8$		< d;7
 8
 d;7 8 d;7 8rd   r  c                       \ rS rSr\" SS9S 5       r\" SS9S 5       r\" SS9S 5       r\" SS/S9\" S	S
S9S 5       5       rSr	g)TestCorrelatei	  Tr$  c                    [         R                  " SS5      R                  S5      n[         R                  " SS5      R                  S5      n[        [        [
        /X#4Q70 SS0D6  [        [        [
        /X24Q70 SS0D6  g r   )r   r   r   r   r   r   r   s       ra   r   !TestCorrelate.test_invalid_shapes	  so     IIaO##F+IIb!$$V,j)JqfJ8IJj)JqfJ8IJrd   c           	          / SQn/ SQn[        [        [        X#SS9  [        [        [        X#SSS9  [        [        [        X#SS	S9  [        [        [        X#S
SS9  [        [        [        X#SSS9  g r   r   r   r   r   s       ra   r   !TestCorrelate.test_invalid_params	  sZ    j)Q?j)QuMj)QhOj)QwOj)QwOrd   c                    [        [        [        S/SSS9  [        [        [        SS/SS9  [        [        [        S/SSS9  [        [        [        SS/SS9  [        [        [        S/S//5        [        [        [        S/S5        g r&  r"  r'  s     ra   r(  "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!4rd   r   )cpu_only
exceptionsrG   zdtype differsrI   c                    UR                  / SQ5      nUR                  SS/5      n[        [        X#SS9UR                  / SQ5      5        UR                  / SQ5      nUR                  / SQ5      n[        [        X#SS9UR                  / SQ5      5        [        [        X#S	S9UR                  / S
Q5      5        [        [        X#SS9UR                  S/5      5        g )NrP   rM   rN   rg   rh   )rN   r  rW   r   )r   rV   rW   r   )rO   r   rV   rW   rX   r   rV   )rZ   r4   r   r   s       ra   test_numpy_fastpath!TestCorrelate.test_numpy_fastpath	  s     JJy!JJ1v	!V4bjj6MNJJy!JJy!	!V4bjj6NO	!V4bjjAT6UV	!W5rzz2$7GHrd   r*  N)
r,  r-  r.  r/  r0  r   r   r(  r)  r2  r*  rd   ra   r  r  	  s     d#
K $
K d#P $P d#5 $5 t9k/:	I ; :	Ird   r  ri   r   rg   r   behindF
input_sizer+  r  r  r  rI  )marksi'  c                    [         R                  R                  S5      nUR                  U5      n[	        US-  5      nU(       a+  [         R
                  " UR                  U5      U/5      nU* nOXVS  nUn[        XWU S9n	[        UR                  UR                  U S9n
[         R                  " U	5      n[        X   U5        U
R                  U	R                  :X  d   eg )Nr   rS   rh   )r   r  r  rP  r  concatenater   r   r   argmaxr5   r  )ri   r,  r-  r]   r  in1offsetin2r   correlationlags	lag_indexs               ra   test_correlation_lagsr8  	  s     ))


"C


j
)CBFnnc11&93?@7 'lC40KCHHchhT:D		+&IDOX.::*****rd   c                     [         R                  " [        SS9   [        SSSS9  S S S 5        g ! , (       d  f       g = f)NzMode asdfgh is invalidrX  r+  asdfghrh   )r  r   r   r   r#  s    ra   "test_correlation_lags_invalid_moder;  
  s*    	z)A	Bc1 
C	B	Bs   /
=dt_namer   r   c                   p    \ rS rSrS rS rS rS rS rS r	S r
\" S	S
S9S 5       r\" SS9S 5       rSrg)TestCorrelateComplexi
  c                     [        U5      (       a$  U[        R                  :X  a  [        R                  nSSS.UR	                  U5      R
                     n[        SU-  S-  5      $ )Nr  rO   )rO  rV   rR   rL   )r6   r   r  cdoubler  bitsr  )r\   r  r]   precs       ra   r  TestCorrelateComplex.decimal 
  sP    B<<B"..0B Arxx|0011t8a<  rd   c           	      $   [         R                  R                  S5      n[         R                  R                  S5      R	                  U5      nUSUR                  S5      R	                  U5      -  -  n[         R                  R                  S5      R	                  U5      nUSUR                  S5      R	                  U5      -  -  n[        UR                  UR                  US9[        UR                  UR                  US9-   R	                  U5      nUS[        UR                  UR                  US9* [        UR                  UR                  US9-   -  -  nUR                  U5      UR                  U5      UR                  U5      pvnXVU4$ )Nr<  rS   r   r   rh   )
r   r  r7  r  r  rP  r   rB  imagrZ   )r\   r  ri   r]   r  r^   r_   r   s           ra   r  !TestCorrelateComplex._setup_rank1(
  sD   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/cSyrd   c                 ^   U R                  USU5      u  p4n[        X!5      n[        X4S5      n[        XuU R	                  Xb5      S9  UR
                  U:X  d   e[        XCS5      n[        XrR                  UR                  U5      5      U R	                  Xb5      S9  UR
                  U:X  d   eg )Nr   r  )r  r  r   r:   r  r   conjr  r\   r<  r]   r^   r_   r   r  rv   s           ra   r  %TestCorrelateComplex.test_rank1_valid7
  s    %%gw;	cR!aG$!!$,,r2FGww"}} aG$!!WWRWWS\%:*.,,r*>	@ww"}}rd   c                     U R                  USU5      u  p4n[        X!5      n[        X4S5      n[        XuU R	                  Xb5      S9  UR
                  U:X  d   eg )Nrg   r  r  r  r   r:   r  r   rI  s           ra   r  $TestCorrelateComplex.test_rank1_sameD
  sS    %%gvr:	cR!aF#!!$,,r2FGww"}}rd   c                     U R                  USU5      u  p4n[        X!5      n[        X4S5      n[        XuU R	                  Xb5      S9  UR
                  U:X  d   eg )Nr   r  rL  rI  s           ra   r  $TestCorrelateComplex.test_rank1_fullL
  sS    %%gvr:	cR!aF#!!$,,r2FGww"}}rd   c                     [        X!5      nUR                  / SQUS9nUR                  / SQUS9n[        XE5      n[        XbR                  / SQ5      SSS9  g )Nr   rq   r  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      r   Fr  )r  rZ   r   r4   )r\   r<  r]   r  r   krv   s          ra   test_swap_full#TestCorrelateComplex.test_swap_fullS
  sU    R!JJ/rJ:JJ7rJBaOzzNO5	
rd   c                     UR                  / SQ5      nUR                  / SQ5      n[        X4SS9n[        XRR                  / SQ5      5        g )NrQ  rR  rg   rh   )rS  rT  rU  )rZ   r   r4   )r\   r<  r]   r   rV  rv   s         ra   test_swap_same#TestCorrelateComplex.test_swap_same]
  s>    JJ/0JJ78a(::&ABCrd   r   notimplementederrorrI   c                    [        U5      (       a  [        S:w  a  [        R                  " SS9  [        R
                  R                  SSS5      R                  U5      nUS[        R
                  R                  SSS5      R                  U5      -  -  n[        R
                  R                  SSS5      R                  U5      nUS[        R
                  R                  SSS5      R                  U5      -  -  n[        UR                  UR                  5      [        UR                  UR                  5      -   R                  U5      nUS[        UR                  UR                  5      * [        UR                  UR                  5      -   -  -  nUR                  U5      UR                  U5      UR                  U5      pTn[        X!5      n[        X4S	5      n[        XuU R                  Xb5      S
-
  S9  UR                  U:X  d   eg )Ncpuz)error tolerances exceeded with JAX on gpurI   rS   r   rO   r   rM   r   rQ   r  )r8   rB   r  xfailr   r  r  r  r   rB  rE  rZ   r  r:   r  r   rI  s           ra   
test_rank3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/cR!aF#!!$,,r2F2JKww"}}rd   Tr$  c           	         [         R                  " [         R                  R                  5       5      R	                  U5      nUS[         R                  " [         R                  R                  5       5      R	                  U5      -  -  n[         R                  " [         R                  R                  5       5      R	                  U5      nUS[         R                  " [         R                  R                  5       5      R	                  U5      -  -  n[        X!5      n[        UR                  UR                  5      [        UR                  UR                  5      -   R	                  U5      nUS[         R                  " [        UR                  UR                  5      * [        UR                  UR                  5      -   5      -  -  nUR                  U5      UR                  U5      pC[        X4S5      n[        XvU R                  XR5      S-
  S9  UR                  U:X  d   e[        [        S/S/5      [         R                  " [        SS5      5      SS9  [        [        S/S/5      [         R                  " [        SS5      5      SS9  [        [        S/S	/5      [         R                  " [        SS	5      5      SS9  g )
Nr   r   rQ   r  rt   F)check_shape              @rM   )r   r  r  r  r  r  r   rB  rE  rZ   r:   r  r   r5   )r\   r<  r]   r^   r_   r  r   rv   s           ra   
test_rank0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aF#!!$,,r2F2JKww"}}	1#t,bjj1b9I.J$)	+	2$-rzz)B:K/L$)	+	2$,bjj2q9I.J$)	+rd   r*  N)r,  r-  r.  r/  r  r  r  r  r  rW  rZ  r0  r`  re  r2  r*  rd   ra   r>  r>  
  s[    !
D f%:; <& d#+ $+rd   r>  c                       \ rS rSr\" \R                  5      S 5       r\" SS9\" \R                  5      S 5       5       r
\" SS9\" \R                  5      S 5       5       r\" \R                  5      S 5       rSrg	)
TestCorrelate2di
  c           	         [         R                  " S5      n[         R                  " / SQ5      nS H  nUR                  U5      UR                  U5      pe[         R                  " X#US9n[        [        R                  " XVUS9UR                  U5      5        US:X  d  Mo  [         R                  " X2US9n[        [        R                  " XeUS9UR                  U5      5        M     g NrN   r  r  rh   r   )r   r   r  rZ   r   r;   r   )r\   r]   r^   r_   ri   a_xpb_xpnp_corr_results           ra    test_consistency_correlate_funcs0TestCorrelate2d.test_consistency_correlate_funcs
  s     IIaLHH]#-DA

1$\\!T:N 0 0$ G "

> :< w!#a!>#F$4$4Td$K$&JJ~$>@ .rd   Tr$  c                    [         R                  " S5      n[         R                  " / SQ5      nS H  n[        [         R                  " [
        R                  " U/U/US95      [
        R                  " X#US95        US:X  d  MT  [        [         R                  " [
        R                  " U/U/US95      [
        R                  " X2US95        M     g rj  )r   r   r  r;   r  r   r   r   )r\   r]   r^   r_   ri   s        ra   "test_consistency_correlate_funcs_22TestCorrelate2d.test_consistency_correlate_funcs_2
  s     IIaLHH]#-D

6+=+=qcA3CG,I !J & 0 0D AC
 w#BJJv/A/A1#sGK0M %N$*$4$4Q$EG .rd   c                 0   [         R                  " SS5      R                  S5      n[         R                  " SS5      R                  S5      n[        [        [
        R                  /X#4Q70 SS0D6  [        [        [
        R                  /X24Q70 SS0D6  g r   )r   r   r   r   r   r   r   r   s       ra   r   #TestCorrelate2d.test_invalid_shapes
  s{     IIaO##F+IIb!$$V,j&"4"4SvS&'ARSj&"4"4SvS&'ARSrd   c                    [        [        R                  " UR                  S//5      UR                  S//5      5      UR                  S/5      SSS9  [        [        R                  " UR                  S//5      UR                  S//5      5      UR                  S/5      SSS9  [        [        R                  " UR                  S//5      UR                  S//5      5      UR                  S	/5      SSS9  g )
NrQ   rt                 F)rc  r   rd  y      @        rM   y              (@)r5   r   r   rZ   r'  s     ra   test_complex_input"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rd   r*  N)r,  r-  r.  r/  r@   r   r   rn  r0  r   rq  r   rw  r2  r*  rd   ra   rh  rh  
  s    v''(@ )@  d#v))*G + $G  d#v))*
T + $
T v))*Q +Qrd   rh  c                       \ rS rSr\" SSS9S 5       rS rS r\R                  R                  SS	S
/5      S 5       rSrg)TestLFilterZIi
  Tzlist inputs are numpy specificr~   c                 `    UR                  SS/5      n[        / SQ/ SQ5      n[        X25        g )Nr  r~  r  rr  r}  r  r~  rn  rZ   r   r:   )r\   r]   zi_expectedr+  s       ra   test_array_likeTestLFilterZI.test_array_like
  s)    jj#t-)9:!"2rd   c                     UR                  / SQ5      nUR                  / SQ5      nUR                  SS/5      n[        X25      n[        XT5        g )Nr}  r|  r  r~  r~  )r\   r]   r^   r_   r  r+  s         ra   rb   TestLFilterZI.test_basic
  sC    JJ'(JJ'jj#t-!"2rd   c                     UR                  / SQ5      nUR                  / SQ5      n[        X#5      n[        SU-  SU-  5      n[        XTSS9  g )N)r}  r   rN   )r  rQ   r   rR   rq  r6  )rZ   r   r4   )r\   r]   r_   r^   rp  zi2s         ra   test_scale_invariance#TestLFilterZI.test_scale_invariance
  sH     JJ{#JJ{#1ac"u-rd   r   r   r   c                     [        X!5      nUR                  SUS9nUR                  S/US9n[        R                  " X45      R
                  U:X  d   eg )Nr   r   rQ   )r  r  rZ   r   r   r   )r\   r   r]   r_   r^   s        ra   r  TestLFilterZI.test_types
  sQ    "HHaH&JJs%J(  &,,555rd   r*  N)r,  r-  r.  r/  r0  r  rb   r  r  r  r  r  r2  r*  rd   ra   rz  rz  
  sS     d+KL3 M3
3. [[Wy)&<=6 >6rd   rz  c                       \ rS rSrSr  SS jr\" SSS9S 5       r\" SSS9S	 5       r\" SSS9S
 5       r	\" SSS9S 5       r
\" SSS9S 5       r\" SSS9S 5       rSrg)TestFiltFilti
  tfNc	           
         U R                   S:X  a9  [        U6 u  pUR                  U	5      UR                  U
5      p[        XX#XEXg5      $ U R                   S:X  a&  [	        U6 nUR                  U5      n[        XX4U5      $ g )Nr  sos)filtfilt_kindr   rZ   r   r   r&   )r\   zpkru   r  r+  padlenr   irlenr]   r_   r^   r  s               ra   r   TestFiltFilt.filtfilt
  s{    %3<DA::a="**Q-qA!7FJJ5(3-C**S/Cstf== )rd   r   negative stridesrI   c                 r   [        U5      (       a$  U R                  S:X  a  [        R                  " SS9  [	        UR                  / SQ5      UR                  / SQ5      5      nU R                  X!R                  S5      US9n[        U5      (       a  SOSn[        X1R                  SUR                  S	9US
9  g )Nr  sosfilt works in-placerI   r  rX   r#  g&.1>g6{=r   r   )r8   r  r  r  r(   rZ   r   r   r9   r4   r   )r\   r]   r  r   r   s        ra   rb   TestFiltFilt.test_basic   s    "::$,,5KK78RZZ
+RZZ
-CDmmC22m6bkkdxYYrY<4Hrd   c                 :   [        U5      (       a$  U R                  S:X  a  [        R                  " SS9  SnUR	                  SSUS-   5      nUR                  S[        R                  -  U-  5      nUR                  S	[        R                  -  U-  5      nXE-   n[        S
UR                  S5      SS9n[        R                  " US   5      R                  5       nSn	[        [        R                  " [        R                  " U	5      [        R                  " U5      -  5      5      n
U R                  XvXS9n[        R                  " X-
  5      R                  5       nUS:  d   eUR                  [        R                   " XDU-   /5      5      nU R                  X}U
SUS9nUR"                  UR"                  :X  d   e[        R                  " X-
  5      R                  5       nUS:  d   eU R                  X}R$                  U
SUS9n['        XR$                  5        g )Nr  r  rI     r   r  rQ   rS   i  r         ?r  r  r   )r  r]   r   r  r  r]   )r8   r  r  r  r@  rD  r   rt  r   rZ   rb  ru  r  ceillogr   vstackr  r  r5   )r\   r]   rz  r  xlowxhighru   r  repsr  rv   errx2dy2dy2dts                   ra   	test_sineTestFiltFilt.test_sine
  s   "::$,,5KK78KK3q)vvebeema'(w*+LQ

5)%8FF3q6N  sbffQi/01 MM#M2ffQX""$Tzz jjD,#789mmCQQ2m>yyCII%%%ffSZ $$&Tzz }}S%%b}AVV$rd   c           
         [        U5      (       a$  U R                  S:X  a  [        R                  " SS9  [        R
                  " S5      R                  SSS5      nUR                  U5      n[        SUR                  S	5      S
S9nU R                  X2SSUS9nU R                  X1R                  [        R                  " USS5      5      SSUS9n[        XAR                  [        R                  " USS5      5      5        U R                  X1R                  [        R                  " USS5      5      SSUS9n[        XAR                  [        R                  " USS5      5      5        g )Nr  r  rI   g     @rS   rC  rX   rL   r  r  r  r   r  rQ   rR   )r8   r  r  r  r   r   r   rZ   r   r   rE  r5   )r\   r]   ru   r  r  r  r  s          ra   	test_axisTestFiltFilt.test_axis0  s#   "::$,,5KK78 II()11"b"=JJqMQ

5)%8]]3!!];]]BKK1a01!!  
 	JJr{{2q!'<=>]]BKK1a01!!  
 	JJr{{2q!'<=>rd   Tz-python scalars in array_namespace are np-onlyr~   c           	          U R                   S:w  a  g [        R                  " UR                  SS/5      SUR	                  SUR
                  S95      n[        X!R	                  SUR
                  S9SSS9  g )Nr  rn  rQ   rS   r   r   r   )r  r   r   rZ   r   r   r4   )r\   r]   r   s      ra   test_acoeffTestFiltFilt.test_acoeffC  sg     %ooJJBx !RYYrY%D
 	YYrY<5uUrd   z_filtfilt_gust is np-onlyc           
         U R                   S:w  a  [        R                  " S5        UR                  SS/5      nUR                  S/5      nUR                  SS/5      n[	        X4U5      u  pVn[        US   SUS   -  S	US
   -  -   5        [        US   S	US   -  SUS
   -  -   5        [        UUR                  US   SUS   -  -   SUS   -  -   SUS
   -  -   SUS   -  US   -   SUS   -  -   SUS
   -  -   /5      5        g )Nr  $gust only implemented for TF systemsr  r}  rn  r  r   ro  rO  rQ         ?r  )r  r  r  rZ   r/   r4   )r\   r]   ru   r_   r^   rv   z1z2s           ra   test_gust_simpleTestFiltFilt.test_gust_simpleN  s!   %KK>? JJSz"JJuJJT{#"1+	r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	
rd   c                     U R                   S:w  a  [        R                  " S5        UR                  S5      nSnSn[	        X4USS9nX4-  S-  U-  n[        XV5        g )	Nr  r  rX   r  r}  gustr   rR   )r  r  r  r   r   r4   )r\   r]   ru   r_   r^   rv   r   s          ra   test_gust_scalarsTestFiltFilt.test_gust_scalars_  s]     %KK>? IIbMQ1V,C!8a<$rd   r*  )r   oddNr  NN)r,  r-  r.  r/  r  r   r0  rb   r  r  r  r  r  r2  r*  rd   ra   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%rd   r  c                   F    \ rS rSrSr\" SSS9\" SSS9S 5       5       rS	rg
)TestSOSFiltFiltio  r  rG   r  rI   r   r  c                 x   [         R                  R                  S5      R                  S5      nUR	                  U5      n[        SS5       Hk  n[        R                  " USSS9n[        U6 u  pV[        U6 n[        UR                  XVU45      u  pVn[        XVU5      n[        Xr5      n	[        XSS	U 3S
9  Mm     g)z1Test equivalence between sosfiltfilt and filtfiltr   r  rQ   rO   ffffff?r  r  rq  zorder=)r   err_msgN)r   r  r  r  rZ   r   r   r   r   r   r  r   r&   r4   )
r\   r]   ru   r
  r  r_   r^   r  rv   y_soss
             ra   test_equivalence TestSOSFiltFilt.test_equivalences  s     II!!!$**40JJqM1a[E--tE:C3<DA3-CBJJs4IA#q!A'EA5F5':JK !rd   r*  N)r,  r-  r.  r/  r  r0  r  r2  r*  rd   ra   r  r  o  s4    Mk*BCg&89L : DLrd   r  c                    S n[        [        U5      [        U 5      5      S-
  n[        X5      n[        R                  " USU R                  5       U-  X$* S R                  5       U-  45      n[        X6XU4SSSSSSS	9	nUu  ppnUS
:  a  [        SU 35      eUSU nXS n[        XUSSS2   US9S
   SSS2   n[        XXS9S
   nUX4$ )a9  
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                 ,   [        [        U5      [        U5      5      S-
  nU SU nXS n[        XX5S9S   n[        XUSSS2   US9S   SSS2   n[        XUSSS2   US9S   SSS2   n	[        XXS9S   n
[        R                  " X-
  S-  5      nU$ )z-Objective function used in filtfilt_gust_opt.rQ   Nr*  r   r   rR   )ru  r  r   r   sum)icsr_   r^   ru   mz0fz0br  y_fby_by_bfvalues               ra   filtfilt_gust_opt_func1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_func  s    AA!#"1g"gaA&q)qS2Y3/24R48aAddG,Q/"5qS)!,a'(rd   rQ   Nr5  rq  rI  TF)r  xtolftolmaxfunmaxiterfull_outputdispr   z3minimization failed in filtfilt_gust_opt: warnflag=r   r*  )	ru  r  r   r   r0  r  r   r]  r   )r_   r^   ru   r  r  r+  r  r  optfoptniterfuncallswarnflagr  r  r  rv   s                    ra   filtfilt_gust_optr    s    	CFCFaA	A	B
..!BQ%**,r/1RS6;;=+;<
=C(Q1I5"0F ,2(Cu!|A(L
 	
 bq'C
b'C !$B$C
(
+DbD
1Cc"1%Ac;rd   c           	      4   [         R                  R                  S5      nUR                  U5      n[	        XXcSUS9n[        XXcUS9u  pn
[         R                  " XcS5      nUR                  S S n[         R                  " U5      n[        [        U5      [        U 5      5      S-
  n[         R                  " X4-   5      n[         R                  " X4-   5      n[        U Vs/ s H  n[        U5      PM     sn6  H  n[        XUU   5      u  UU'   UU'   UU'   M!     [         R                  " USU5      n[         R                  " USU5      n[         R                  " USU5      n[        X}SSS	9  [        XSSS	9  [        XSSS	9  [        U
USSS	9  g s  snf )
NrA  r  )r  r   r  )r  r  r   rQ   r   r>  r   )r   r  r7  rP  r   r/   rE  r  
empty_likeru  r  r  r   r   r  r4   )r_   r^   r  r  r  r  ru   rv   ygzg1zg2xx	out_shaper)  r  zo1zo2r   indxs                      ra   check_filtfilt_gustr    sl   
))


$CE"A 	qF%@A "!EBLBS
 
Qb	!B"I	r	BCFCFaA
((9t#
$C
((9t#
$CI6Iq%(I67):1D)J&4#d)SY 8	RT	"B
++c2t
$C
++c2t
$CA40BD1C4d3C4d3 7s   #FrS   c           	         S GHU  nS H  nSu  p4n[         R                  R                  " U4U-  6 n[         R                  R                  " U4U-  6 n[        XgUS9nX:X  d   e[        XgUSS9u  pU	S;   d   e[	        U
[
        5      (       d   eSU
R                  5       ;   a  S	U
R                  5       ;   a  M   e   S
nS HN  n[        [         U5      (       d  M  [         R                  " X;S9nUR                  5       n[        XgUS9S	:X  a  MN   e   [         R                  " S/[         R                  S9nUR                  5       n[        XgUS9S	:X  a  GMV   e   g )Nr+  )rQ   rR   )r   rO   r   rh   T)ri   measure>   r
   r   r
   r   rS   
complex256
complex192r   l         @ )r   r  r  r   r  dictkeysr  r  r[  r  r   )r]   ri   r\  r  rV  true_methodru   rC  r   
method_trytimesnot_fft_conv_supps               ra   test_choose_conv_methodr    sD    *D .A+		1$+/A		1$+/A'48F((( 21dD QJ!2222eT****EJJL(X-EEE  !=r,--GGA7FFH)!T:hFFF	 "> HHeWBHH-FFH!!T2h>>>/ *rd   c                     S HY  nSnS HN  n[        [        U5      (       d  M  [        R                  " X#S9nUR                  5       n[	        XEUS9S:X  a  MN   e   M[     g )Nr+  rS   r  r   rh   r   )r  r   r  r[  r   )r]   ri   r  r  ru   rC  s         ra   test_choose_conv_method_2r    sX    )!=r,--GGA7FFH)!T:hFFF	 "> *rd   c           	         [         R                  " SSSSSS9u  pnSn[        R                  " [        R                  " U5      5      n[        [        R                  " [        R                  " U5      [        R                  " U5      -  5      5      n[        XU5      u  pxS U4 H>  n	SU-  n
[        XxU
4S	U	5        [        S5       H  n/ S
QnXU'   [        XxXU	5        M     M@     SU-  S-
  n[        XxU4S	U5        g )NrL   {Gz?x   gffffff?r  r  r5  rN   r   r   rR   r  )r   ellipr   ru  rb  r  r  r  r   r  r   )r]   rw   prV  r  r  approx_impulse_lenr_   r^   r  
signal_lenr  r  lengths                 ra   test_filtfilt_gustr    s     ll1dC>GA! C
rvvayARWWRVVC[266!9%<=>!?DA*+++
 	A:-E: !HDE$$Ke59  , !!B&Fvi,>?rd   c                       \ rS rSrS rS rS rS r\" SSS9S	 5       r	\" SSS9S
 5       r
\" SSS9S 5       r\" SSS9S 5       rS rS rS rS r\" SSS9S 5       r\" SSS9S 5       rSrg)TestDecimatei  c                     UR                  S5      n[        [        [        R                  USSS9  [        [        [        R                  USSS9  g )NrX   rn  rQ   )qr  rR   )r   r   r  r   decimater\   r]   ru   s      ra   test_bad_argsTestDecimate.test_bad_args  s7    IIbMi!sa@i!qC@rd   c                     UR                  S5      n[        R                  " USSSSS9R                  5       n[	        X2S S S2   R                  [        5      5        g )NrX   rR   rQ   iirFr  ftype
zero_phaser   r   r  roundr5   r  r  r\   r]   ru   rv   s       ra   test_basic_IIRTestDecimate.test_basic_IIR  G    IIbMOOAqAUuEKKMSqS6==/0rd   c                     UR                  S5      n[        R                  " USSSSS9R                  5       n[	        X2S S S2   R                  [        5      5        g )NrX   rR   rQ   firFr  r  r  s       ra   test_basic_FIRTestDecimate.test_basic_FIR$  r  rd   c                     UR                  S5      n[        R                  " USSSS9nUR                  S:X  d   e[        R                  " USSSS9nUR                  S:X  d   eg )	N)r   r   rR   r   F)r  r
  )r  r   rQ   )r   r  )r  r   r  r  )r\   r]   rw   d0d1s        ra   
test_shapeTestDecimate.test_shape)  s\    HHX__Qe<xx8###__Qe<xx8###rd   Tztest code is NumPy specificr~   c                     [         R                  " 5          [         R                  " SS[        5        U R	                  SSS9  S S S 5        g ! , (       d  f       g = f)NrW  Badly conditioned filterr  Fr   r
  r\  r]  r^  r)   _test_phaseshiftr'  s     ra   test_phaseshift_FIR TestDecimate.test_phaseshift_FIR1  sD    $$&##4oG!!5!A '&&   -A
Ac                     [         R                  " 5          [         R                  " SS[        5        U R	                  SSS9  S S S 5        g ! , (       d  f       g = f)NrW  r  r  Tr  r  r'  s     ra   test_zero_phase_FIR TestDecimate.test_zero_phase_FIR8  sD    $$&##4oG!!4!@ '&&r!  c                 $    U R                  SSS9  g )Nr  Fr  r  r'  s     ra   test_phaseshift_IIR TestDecimate.test_phaseshift_IIR?  s    Uu=rd   c                 $    U R                  SSS9  g )Nr  Tr  r&  r'  s     ra   test_zero_phase_IIR TestDecimate.test_zero_phase_IIRC  s    Ut<rd   c           	      8   Sn/ SQnSn[         R                  " X5-  S-   5      [        U5      -  n[         R                  " U5      S-  S-  n[         R                  " S[         R
                  -  US S 2[         R                  4   -  U-  5      [        R                  R                  UR                  S5      -  nU GH[  n	X9-  n
[         R                  " X-  S-   5      [        U	5      -  n[         R                  " S[         R
                  -  US S 2[         R                  4   -  U-  5      [        R                  R                  UR                  S5      -  nUS	:X  a4  S
n[        R                  " [        R                  " US-   SU
-  SS9S5      nOXUS:X  aR  SnS[         R
                  -  U
-  n[        R                  " [        R                  " USU[         R
                  -  5      6 nUSL a_  [        R                  " WR                  UR                   Xs-  S-  [         R
                  -  5      u  nnU[         R"                  " U5      -  nO[         R$                  " U5      n[        R&                  " UR(                  U
WWUS9n[         R*                  " UR-                  5       U-  SS9nU[         R"                  " U5      -  nUSU	-  :  n[         R.                  " UR-                  5       U-  5      U   n[1        U[         R2                  " U5      SSS9  GM^     g )Nr  )r  r  r   rN  r+  rQ   皙?rR   rt   皙?r  r   r  r:  r$  r  r   g?Fr	  r
  r   r  rn  r   r  )r   r   r  r  r  rt  rs  r   windowstukeyr   dltirS  cheby1freqzr4  denrb  r  r  rB  r  rH  angler4   r   )r\   r   r
  rz  r{  t_totr  r|  r   r}  r  r~  d_tosr  systemwc_h_respsr  	h_resampssubnyqr  s                         ra   r  TestDecimate._test_phaseshiftG  sw   #IIdjl#eDk1 "S(1,VVFRUUNU1bjj=%99A=>~~##AFFC01  GA99W]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  rd   c                    SnSnUR                  U5      U-  nUR                  UR                  SU-  5      UR                  SUR                  -  US-  -  U-  5      -  5      n[        UR                  UR                  U5      5      UR                  S5      SSS	9  [        R                  " US
SS9nUR                  UR                  U5      5      S:  d   eg )Ng      Y@r  r}  rR   g      >@r  r   F)r   check_0dr   r  )r	  r  )	r   rZ   sqrtrD  rt  r4   dotr   r  )r\   r]   sfreqr  r  ru   x_outs          ra   test_auto_nTestDecimate.test_auto_ny  s     IIaL5 JJrwwrAvBEE	US[0IA0M)NNO 	a)2::b>uU2U3wwuyy'(4///rd   c                     [         R                  " UR                  SUR                  S9S5      n[	        UR                  U5      5      (       a   eg )NrI  r   rS   )r   r  r  r   r  isnanr  s      ra   test_long_float32TestDecimate.test_long_float32  sA     OOBGGF"**G=rBrxx{#####rd   c                     [         R                  " [        R                  " S[        R                  S9S5      nUR
                  R                  [        R                  :X  d   eg )Nr+  r   rS   )r   r  r   r  r   r   r  r   )r\   ru   s     ra   test_float16_upcast TestDecimate.test_float16_upcast  s;    OOBGGCrzz:B?ww||rzz)))rd   r2  c                    SnSnSn[         R                  " SUR                  SUR                  -  U-  S-  5      SUS9u  pVnUR	                  [
        5      UR                  UR                  SUR                  -  U-  U-  5      5      -  nUR	                  [
        5      UR                  UR                  SUR                  -  U-  U-  5      5      -  n[         R                  " XVU5      nUR                  S5      U-  n	UR                  SUR                  -  U-  U	-  5      S	UR                  S
UR                  -  U-  U	-  5      -  -   n
[         R                  " U
SUSS9n[         R                  " / [         R                  " XVU5      QU
P76 S S S2   n[        X5        [         R                  " U
SUSS9n[         R                  " / [         R                  " XVU5      QU
P76 S S S2   n[        XSSS9  g )Nr  rN        @@rR   r  )r  fsrt   rN  rn  rv  Fr/  Tr5  vIh%<=r   )r   r   rZ   rt  r  r  r  r2  r   r  r   r   r5   r   r4   )r\   r]   fcentrefwidthrQ  rw   r  rV  r9  r  r   ynzpynzprefyzpyzprefs                  ra   test_complex_iir_dlti"TestDecimate.test_complex_iir_dlti  s    --2::agfnQ.>#?',5aHHWrzz"ruu*w2Fr2I'J KKHHWrzz"ruu*w2Fr2I'J KKQ1%IIcNR VVBJ(1,-RVVC"%%K'1A5667 q!6eD.. $&--a"8 $!"$$'aC) 	&ooa&TB $&--a"8 $!"$$'aC) 	%e<rd   c                    SnSnSnSn[         R                  " XSS-  US9n[        R                  " U5      nU[        R                  " S[        R
                  -  U-  U-  5      -  nUS   [        R                  " U5      -  n	[         R                  " U	S	5      n
[        R                  " S
5      U-  n[        R                  " S[        R
                  -  U-  U-  5      S[        R                  " S[        R
                  -  U-  U-  5      -  -   n[         R                  " USU
SS9n[         R                  " XS	SS9S S n[        X5        [         R                  " USU
SS9n[         R                  " US	SU	S9n[        UU5        g )Nr  rN   rP  r  rR   )rQ  rt   r   rQ   rN  rn  rv  Fr/  )r  r  r+  Tr$  )r   rS  r   rootsr  rt  polyr2  r   r  upfirdnr5   r1  )r\   r]   rS  rT  rQ  numtapsbbasezbasezrotbzr9  r  r   rU  rV  rW  rX  s                    ra   test_complex_fir_dlti"TestDecimate.test_complex_fir_dlti  sO     gaxB7 rvvb255j7225661X%R#IIcNR VVBJ(1,-RVVC"%%K'1A5667 q!6eD..115ds;&ooa&TB%%aAb9V$rd   r*  N)r,  r-  r.  r/  r  r  r  r  r0  r  r#  r'  r*  r  rF  rJ  rM  rY  rd  r2  r*  rd   ra   r  r    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"%rd   r  c                   t    \ rS rSrS rS rS rS r\R                  R                  SSS/5      S	 5       rS
rg)TestHilberti  c                     UR                  S/5      n[        [        [        U5        UR	                  S5      n[        [        [        USS9  g )Nr   r!  r   r  )rZ   r   r   r   r   r  s      ra   r  TestHilbert.test_bad_args  s9    JJ
|$j'1-IIcNj'12rd   c           
         SnUR                   nUR                  SSU-  US-  UR                  S9nUR                  U5      nUR	                  U5      nUR                  SU-  5      nUR	                  SU-  5      nUR                  XVXx/5      n	[        U	5      n
UR                  U
5      nUR                  UR                  U
5      UR                  U
5      5      nUR                  U
5      n[        XU5        [        XR                  U	R                  5      U5        [        USS S24   UR                  U* S-  US-  US-  UR                  S9U5        [        USS S24   UR                  SX3S-  UR                  S9U5        [        USS S24   UR                  U* S-  US-  US-  UR                  S9U5        [        USS S24   UR                  SX3S-  UR                  S9U5        [        UR                  U
SS S 24   5      XR5        g )	Nr  r   rR   r  r   rQ   r  rL   )rt  r   r   rD  rA  rC  r   rb  atan2rE  rB  r;   r  r  )r\   r]   r  rt  r  r  a1a2a3r^   rC  h_absh_angleh_reals                 ra   test_hilbert_theoretical$TestHilbert.test_hilbert_theoretical  s   UUIIaRcI<VVAYVVAYVVAE]VVAE]HHbb%&AJq	((2771:rwwqz2 	Fw/E77177#3W= 	GAttG,IIrcAgrAvrCxrzzIR#	%
 	AttGbii2CxrzziJG	U 	GAttG,IIrcAgrAvrCxrzzIR#	% 	AttGbii2CxrzziJG	U 	BGGAadG,b:rd   c                     UR                  UR                  SUR                  S9S5      n[        USS9n[	        [        UR
                  SS9UR
                  5        [        [        USS S 24   5      USS S 24   S5        [        USSS	9nUR                  S
:X  d   e[        UR
                  SSS	9R                  S:X  d   e[        R                  " / SQ5      nUR                  U5      n[        USS S 24   USSS9  g )Nr  r   )rL   rO   r   r  r   r  r  )r  r  )rL   r  )r  rL   )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)r  )r   r   r   r   r5   r  r;   r  r   r  rZ   )r\   r]   r^   aaaana0hilbs         ra   test_hilbert_axisN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>Jrd   c                     UR                  UR                  SUR                  S9S5      n[        USS9nS H;  n[        UR	                  USU5      US9nUR	                  XTS5      n[        X55        M=     g )Ni   r   )rL   rN   r   r   r  r  )r   r   r   r   rD  r5   )r\   r]   r^   rv  r  aaps         ra   test_hilbert_axis_3d TestHilbert.test_hilbert_axis_3d2  sj    JJryy"**y=yIQR D"++aT2>C++c,CB$ rd   r   r   r   c                     [        X!5      nUR                  SUS9nUR                  [        U5      5      R                  U:X  d   eg )Nr   r   )r  r  rB  r   r   r  s       ra   test_hilbert_typesTestHilbert.test_hilbert_types;  s@    "88AU8+wwwx()//5888rd   r*  N)r,  r-  r.  r/  r  rs  ry  r~  r  r  r  r  r2  r*  rd   ra   rg  rg    sC    3(;T$KL% [[Wy)&<=9 >9rd   rg  c            	          \ rS rSrSr\" SSS9S 5       rS r\" SS	S
9S 5       r\	R                  R                  SSS/5      S 5       rS rS r\	R                  R                  S/ SQ5      \" SSS
9S 5       5       r\	R                  R                  S/ SQ5      S 5       r\	R                  R                  SSS/5      \	R                  R                  SSS/5      \	R                  R                  SSS/5      \	R                  R                  S / S!Q5      \" SS"S
9S# 5       5       5       5       5       r\" SS"S
9S$ 5       rS%rg&)'TestHilbert2iB  z!Test function `signal.hilbert2`. Tlist inputs are numpy-specificr~   c                 &    [        / SQ/ SQ/5        g )NrP   r   )r   r'  s     ra   r  TestHilbert2.test_array_likeF  s    )Y'(rd   c                 R   UR                  UR                  S5      S5      n[        R                  " [        SS9   [        UR                  S//5      5        SSS5        [        R                  " [        SS9   [        USS	9  SSS5        [        R                  " [        S
S9   [        USS	9  SSS5        [        R                  " [        S
S9   [        USS	9  SSS5        g! , (       d  f       N= f! , (       d  f       Nx= f! , (       d  f       N]= f! , (       d  f       g= f)z$Raise all exceptions in `hilbert2`. r   r  z^x must be real.rX  r   Nz^N must be positive.r   ri  z#^When given as a tuple, N must holdrb  r  )r   r   r  r   r   r   rZ   r  s      ra   r  TestHilbert2.test_bad_argsJ  s    JJryy}f-]]:-?@RZZ*/0 A]]:-CDQ" E]]:-RSQ)$ T]]:-RSQ&! TS A@DDSSSSs/   C%9C6%DD%
C36
D
D
D&r   z,CuPy's hilbert2 does not have axes= argumentrI   c                 :   UR                  UR                  S5      S5      n[        R                  " [        SS9   [        USS9  S S S 5        [        R                  " [        SS9   [        USS9  S S S 5        g ! , (       d  f       N;= f! , (       d  f       g = f)	Nr   r  z!^axes must be a tuple of length 2rX  r  r  z"^axes must contain 2 distinct axesr  )r   r   r  r   r   r   r  s      ra   test_bad_args2TestHilbert2.test_bad_args2V  sl    JJryy}f-]]:-PQQY' R]]:-QRQV$ SR RQRRs   A;'B;
B	
Br   r   r   c                     [        X!5      nUR                  SUS9nUR                  [        R                  " U5      5      nUR
                  U:X  d   eg )N)rR   rV   r   )r  r  rB  r   r   r   )r\   r   r]   r  r   s        ra   test_hilbert2_types TestHilbert2.test_hilbert2_types^  sG    "88G581ggfooh/0yyE!!!rd   c                     UR                  / SQ5      n[        R                  " UR                  US5      5      n[        R                  " UR                  US5      5      n[	        X4R
                  5        g)zNeeded for 100% coverage )rr  r  r  rr  r~  r~  )rO   rQ   rQ   rO   N)rZ   r   r   r   r4   r  )r\   r]   ru   x0ax1as        ra   test_1d_inputTestHilbert2.test_1d_inpute  sO    JJ12oobjjF34oobjjF34UU#rd   c                 d    UR                  S5      n[        USS9n[        USS9n[        XC5        g)z%Compare passing tuple to single int. r  rM   ri  r  N)r  r   r5   )r\   r]   ru   x0_ax1_as        ra   test_parameter_NTestHilbert2.test_parameter_Nl  s0    HHVQV$#rd   r  ))rM   rN   )rN   rM   r  r  z)Bug in cupy implementation, see cupy#9396c                 l   UR                  XR                  S9nUS==   S-  ss'   UR                  [        R                  " U5      5      n[        U5      n[        R                  " U5      n[        SUS   S-   S-  5      [        US   S-   S-  S5      p[        SUS   S-   S-  5      [        US   S-   S-  S5      pSn[        XgU	4   X7U	4   S	-  US
9  [        USU	4   USU	4   S-  US
9  [        XgS4   X7S4   S-  US
9  [        US   US   US
9  XhU
4   n[        XR                  U5      US
9  g)z8Compare desired and calculated values in Fourier space. r   r  r   rQ   r   rR   Nrq  rM   r   )
r  r   rB  rO  ifft2r   fft2r  r4   r   )r\   r  r]   x_fru   x_asx_as_ff0_posf0_negf1_posf1_negr   zz_as_fs                ra   test_quadrant_values!TestHilbert2.test_quadrant_valuess  sN    gge==g1E
a
GGFLL%&{T" q58a<A"56uQx!|PQ>QSW8Xq58a<A"56uQx!|PQ>QSW8Xv~.FN0Ca0GdSq&y)3q&y>A+=DIqy)3qy>A+=DItc$id;(w!7dCrd   c                    US   S-  nUS   S-  nUR                  U5      nSXSS-
  US-   4'   SXSS-   US-
  4'   [        R                  " U5      nUR                  [        R                  " U5      5      nUR                  [        U5      5      S:  d   e[        U5      n[        XrR                  U5      UR                  UR                  5      R                  S-  S9  g)	zYTest that a real signal with Z[-p,-q] == np.conj(Z[p,q])
produces a zero analytic signal.r   rR   rQ   r  rr  r   r   N)r  rO  	ifftshiftrB  r  r  rb  r   r4   r   r  r   r  )r\   r  r]   c0c1r  ru   r  s           ra   test_zero_analytic_signal&TestHilbert2.test_zero_analytic_signal  s     1X]1X]hhuo!FBFN!FBFNs#GGFLL%&vvc!f~###{mmD18L8P8PQS8STrd   sh0rM   rN   sh1rO   r   sh2r   r<  not_axisr  z,cupy implementation does not have axes kwargc                 4   UR                  UR                  X-  U-  UR                  S9XU45      n/ SQnUR                  U5        [	        XgS9nUR                  XdS9n	U	 V
s/ s H  n
[	        U
5      PM     nn
UR                  XS9n[        X5        gs  sn
f )z?2d transform on 3d array is equal to 2d transform on 2d slices.r   r  r  r  N)r   r   r   popr   unstackrC  r4   )r\   r  r  r  r  r]   ru   transform_axesx_as_3dpartsr  x_as_2ds               ra   test_3d_vs_sliceTestHilbert2.test_3d_vs_slice  s     JJryyS

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

1
,(-.18A;.((7(2) /s   #Bc                 Z   UR                  UR                  SUR                  S9S5      n[        U5      nUR	                  USS5      n[        USS9nUR	                  USS5      n[        X55        UR	                  USS5      n[        US	S9nUR	                  USS5      n[        X75        g
)z72d transform on equal arrays with moved axis are equal.i;  r   )rN   r   r<  r   rQ   )r   rR   r  rR   r  N)r   r   r   r   rD  r4   )r\   r]   r8  x0_asr  x1_asr  x2_ass           ra   test_3d_axis_orderTestHilbert2.test_3d_axis_order  s     ZZ		)2::	>	J[[Q"&)E1a(%[[Q"&)E1a(%rd   r*  N)r,  r-  r.  r/  __doc__r0  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r*  rd   ra   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&rd   r  c                   r   \ rS rSrSr\S 5       rS r\" SSS9S 5       r	\" SSS9\
R                  R                  S	/ S
QS/ SQ/ SQ4/ SQS/ SQ/ SQ4/ SQS/ SQ/ SQ4/ SQS/ SQ/ SQ4/ SQS/ SQ/ SQ4/ SQS/ SQ/ SQ4/ SQS/ SQ/ SQ4/5      S 5       5       r\" SSS9\
R                  R                  S/ SQS/ S Q/ SQ4/ S!QS"/ S Q/ S#Q4/ S$QS"/ S%Q/ S&Q4/5      S' 5       5       r\" SSS9S( 5       r\" SSS9S) 5       r\" SSS9\
R                  R                  S*/ S+Q/ S,Q/5      S- 5       5       rS. rS/rg0)1TestEnvelopei  z4Unit tests for function `._signaltools.envelope()`. c                 l    [        U5      UR                  :X  a  SSS.OSSS.n [        X40 UDSU0D6  g )Nrq  r  r   r  )r>   r   r4   )r  rG  r_  r]   a_r_tols        ra   assert_closeTestEnvelope.assert_close  sD     'r*bjj8 "51!%t4 	
 	H@7@C@rd   c                    [         R                  " [        SS9   [        [        R
                  " S5      SS9  SSS5        [         R                  " [        SS9   [        UR                  S5      S	S9  SSS5        S
 Ha  nSR                  [        [        U5      5      n[         R                  " [        SU S3S9   [        UR                  S5      US9  SSS5        Mc     [         R                  " [        SS9   [        UR                  S5      SS9  SSS5        S H>  n[         R                  " [        SS9   [        UR                  S5      US9  SSS5        M@     [         R                  " [        SS9   [        UR                  S5      SS9  SSS5        g! , (       d  f       GNl= f! , (       d  f       GNC= f! , (       d  f       GMT  = f! , (       d  f       N= f! , (       d  f       M  = f! , (       d  f       g= f)zSFor `envelope()` Raise all exceptions that are used to verify function
parameters. z'Invalid parameter axis=2 for z.shape=.*rX  rL   rR   r  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rL   r   rQ   )r  )r   r}  )Nr}  z, zbp_in=\(z\) isn't a 2-tuple of.*rM   )bp_inz)n_out=10.0 is not a positive integer or.*rm  )r  ))r   rL   r  )r   rS   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*	undefinedresidual)	r  r   r   r   r   r  joinr  r  )r\   r]   r  tss       ra    test_envelope_invalid_parameters-TestEnvelope.test_envelope_invalid_parameters  s    ]]:!KMRWWQZa(M ]]:!JLRWWV_1-L 6E3sE?+Bz(04K%LN 51N N 6 ]]:!LN RWWQZs+N 0Ez%NP51P P 0 ]]:-MNRWWQZ+6 ON)M ML L
N NN N
P P ONsG   FF0=G<G<G&;G8
F-0
F?
G	
G#&
G5	8
HrG   zXXX: immutable arraysrI   c           
         [        U5      nX!R                  :X  a  UR                  OUR                  nUR	                  / SQUS9nUR	                  / SQUS9n[
        R                  " U5      nUR                  S   nUR                  [        USSSS95      u  pU R                  [
        R                  " U5      UR	                  / S	QUS9S
US9  U R                  [
        R                  " U	5      UR	                  / SQUS9SUS9  UR                  [        USSSS95      u  pU R                  U
S-  USUS9  U R                  XSUS9  UR                  [        USSSSU-  S95      u  pU R                  USSS2   USUS9  U R                  USSS2   U	SUS9  UR                  [        USSSS95      u  pU R                  XSUS9  U R                  [
        R                  " U5      UR	                  / SQUS9SUS9  [        USSSS9nU R                  UUSUS9  UR	                  USS9nUSS=== S-  sss& [
        R                  " UUS9nU R                  UR                  U5      USUS9  UR                  [        USSSS95      u  nnU R                  UUR                  X5      S US9  U R                  [
        R                  " U5      UR	                  XSS9S!US9  g)"zEEnsure that the various parametrizations produce compatible results. )r  rR   rR   rL   r   r   )r  r   r   rO   r   r   r   r   r   rM  allTr  squaredrM   rR   r   r   r   Envelope calculation errorr_  r]   )rM   r   r   rL   r   Residual calculation errorFrR   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrL   )r  r  r  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorlowpassz/`residual='lowpass'` envelope calculation error)rM   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorrZ  rQ   )r  zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)r>   r   r   r   rZ   rO  irfftr  r  r   r  rfftifftrB  r  r
   )r\   r]   rE  rF  ZZr_arw   r  ze2_0zr_0ze_1zr_1ze2_2zr_2ze2_3zr_3ze2_4Z_az_aze2_azr_as                        ra   test_envelope_verify_parameters,TestEnvelope.test_envelope_verify_parameters  s$     ##zz1r||r}}JJ(J5zz4DzALLOGGAJ jj!VeT!RS&++e,**_D*A:r 	 	C 	&++d+**_D*A:r 	 	C ZZFUE RS
$'5S 	 	! 	$S 	 	! jjQAaCH
 	%!*eHR 	 	Q$ss)THR 	 	Q jj!ViQU!VW%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*BJJtJ,HBr 	 	Krd   z@               Z,        bp_in,     Ze2_desired,      Zr_desired)rQ   r   rR   rR   r   )rQ   Nr  rQ   r   r   r   r   )rM   r   rR   r   r   )r   Nr  )rM   r   r   rR   r   NN)r   r   rR   rR   r   rM  )rR   r   r   r   r   )r   r   r   rR   r   )rM   r   rR   rR   r   )rL   )rM   r   rL   rM   r   )NrQ   )r   r   rL   rM   r   r  c           	      X   UR                  XR                  S9nUR                  X5R                  S9nUR                  XER                  S9n[        R                  " U5      nUR	                  [        XbSSS95      u  pxUR	                  [        XbSSS95      u  pS XxX4 5       u  ppUR                  X5R                  S9nUR                  XER                  S9nU R                  XSUS9  U R                  XS	US9  US
   b  SXBS
   S& U R                  XSUS9  U R                  XSUS9  g)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   N   #    U  H  n[         R                  " U5      v   M     g 7fr(  rO  r  r  z_s     ra   r  :TestEnvelope.test_envelope_real_signals.<locals>.<genexpr>:  s     !U<Tb&++b//<T   #%z+Envelope calculation error (residual='all')r  z+Residual calculation error (residual='all')rQ   Nr   z/Envelope calculation error (residual='lowpass')z/Residual calculation error (residual='lowpass'))rZ   r   rO  r  r  r   r   r  )r\   r  r  Ze2_desired
Zr_desiredr]   rw   ze2zrze2_lpzr_lpZe2ZrZe2_lpZr_lps                  ra   test_envelope_real_signals'TestEnvelope.test_envelope_real_signals  sF   ( JJq

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

8AyRV#WX!USf<T!UjjMMjBZZ
--Z@
#KPR 	 	T"KPR 	 	T 8$%JQxy!&OTV 	 	X%OTV 	 	Xrd   zG               Z,        bp_in,         Ze2_desired,         Zr_desired)r   rN   r   rN   r   rN   r   rS   r   rN   )rQ   rN   r   rN   rR   r   rR   rQ   r   r   r   rR   )rQ   rR   rO   r   rO   rL   )r   rO   r   rX   r   rO   )rQ   rR   r   r   r   rL   c           	         UR                  XR                  S9nUR                  X5R                  S9nUR                  XER                  S9n[        R                  " [        R
                  " U5      5      nUR                  [        XbSSS95      u  pxS Xx4 5       u  pU R                  XSUS9  U R                  XSUS9  g	)
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   v   #    U  H/  n[         R                  " [         R                  " U5      5      v   M1     g 7fr(  rO  fftshiftr
   r  s     ra   r  =TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>]  s$     GYr6??6::b>22Ys   79r  r  r  N)	rZ   r   r   rO  r  r  r  r   r  )r\   r  r  r  r  r]   rw   r  r  r  r  s              ra   test_envelope_complex_signals*TestEnvelope.test_envelope_complex_signalsJ  s     JJq

J+jjMMjBZZ
--Z@
KK((+,**XaMNGcYG#:r 	 	C":r 	 	Crd   c                 d   [        U5      nX!R                  :X  a  UR                  OUR                  n[        R
                  " UR                  / SQ/ SQ/US95      nUR                  / SQ/ SQ/US9nUR                  / SQ/ SQ/US9nUR                  [        USS	S
95      u  pxUR                  [        UR                  SSS
95      u  pS XyR                  XR                  4 5       u  ppU R                  XSUS9  U R                  XSUS9  U R                  XSUS9  U R                  XSUS9  g)z.Test for multi-channel envelope calculations. )r  r   rR   rR   r   )r   r   rM   rM   r   r   r  )r   r   r   r   r   r  )r   r   r   r   r   TrQ   )r  r  r   c              3   N   #    U  H  n[         R                  " U5      v   M     g 7fr(  r  r  s     ra   r  CTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>q  s     O6NFKKOO6Nr  2d envelope calculation errorr  2d residual calculation error"Transposed 2d envelope calc. error"Transposed 2d residual calc. errorN)r>   r   r   r   rO  r  rZ   r  r   r  r  )r\   r]   rE  rF  rw   r  r  r  r  ye2TyrTr  Ye2r  Yrs                  ra   #test_envelope_verify_axis_parameter0TestEnvelope.test_envelope_verify_axis_parameterd  s5     ##zz1r||r}}LL%6$HPTUVjj/3C!D'+ ! -ZZ/ B$ZO
**XaA>?JJxTBC	OsFFB6NO"#0OTVW"/NSUV"F2 	 	
 	 D 	 	
rd   c                    [        U5      nX!R                  :X  a  UR                  OUR                  nUR	                  / SQ/ SQ/US9n[
        R                  " [
        R                  " USS95      nUR	                  / SQ/ SQ/US9nUR	                  / SQ/ SQ/US9n[        S	S
SS9nUR                  [        U4SS0UD65      u  pUR                  [        UR                  4SS0UD65      u  pS XR                  XR                  4 5       u  pnnU R                  XSUS9  U R                  XSUS9  U R                  XSUS9  U R                  UUSUS9  g)zBTest for multi-channel envelope calculations with complex values. )r  rN   r   rN   rR   )rQ   rS   r   rS   rR   r   rQ   r  r  )r  r   rN  r   r  r  r  r  T)r  r  r  r  r   c              3   t   #    U  H.  n[         R                  " [         R                  " U5      S S9v   M0     g7f)rQ   r  Nr	  r  s     ra   r  KTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>  s+      @&> #OOFJJrNC&>s   68r  r  r  r  r  N)r>   r   r   r   rZ   rO  r  r  r  r  r   r  r  )r\   r]   rE  rF  inprw   Ze2_desZr_deskwr  r  r  r  r  r  r  r  s                    ra   +test_envelope_verify_axis_parameter_complex8TestEnvelope.test_envelope_verify_axis_parameter_complex|  sd     ##zz1r||r}}jj+->?tjLKK((156**.0BDD*Q_o>dK%>**Xa6a6267JJx:!:r:;	@'*FFB&>@"b 	#,KPRS"*IbQC 	 	
 	"f+OTVWrd   X)rM   r   r   rQ   rR   )rM   r   r   rR   rQ   rR   c                     UR                  XR                  S9n[        R                  " U5      nUR	                  [        U5      5      n[        USSS9nU R                  XESUS9  g)z0Compare output of `envelope()` and `hilbert()`. r   r  Nr  z!Hilbert-Envelope comparison errorr  )rZ   r   rO  r  rb  r   r   r  )r\   r$  r]   ru   e_hile_envs         ra   test_compare_envelope_hilbert*TestEnvelope.test_compare_envelope_hilbert  s\     JJq

J+LLOwqz"L48%,OTVWrd   c                    [         R                  " / SQ5      n[        R                  " USS9n[	        USSS9u  p4[	        US-   SSS9u  pV[        U[        R                  " S5      SS9  [        XBSS9  [        U[        R                  " SUR                  S	9SS9  [        XbR                  UR                  5      SS9  g
)aD  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   rO   )r4  r  )r  r  r   rq  r   r   N)
rO  r  r   r0  r   r4   r   r  r   r  )r\   x4x6y6y6_resz6z6_ress          ra   test_nyquistTestEnvelope.test_nyquist  s     \\)$__RQ'bE:
b2gQ?
BHHQKe4/BHHQbhh7eD		"(( 3%@rd   r*  N)r,  r-  r.  r/  r  staticmethodr  r  r0  r  r  r  r  r  r  r  r"  r(  r1  r2  r*  rd   ra   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rd   r  c                      \ rS rSr\SS j5       r\" SS9S 5       r\" SS9S 5       r\	" \
5      S 5       r\	" \
5      S 5       r\	" \
5      S	 5       r\	" \5      S
 5       r\	" \5      S 5       r\	" \5      S 5       r\	" \\5      S 5       r\	" \\5      S 5       r\	" \\5      S 5       r\	" \5      S 5       r\	" \5      S 5       r\	" \5      S 5       r\" SS9\	" \\5      S 5       5       rSrg)TestPartialFractionExpansioni  c                 6   [        X5      nUR                  U5      nUR                  U5      nUR                  [        US S 2S 4   U-
  5      [        U S S 2S 4   U-
  5      5      n[	        [        U5      5      u  px[        X   X8   US9  [        X   X(   US9  g )Nr  )r?   rZ   hypotrb  r   rC   r;   )	r  r  r_truep_truer  r]   distancerowscolss	            ra   assert_rp_almost_equal3TestPartialFractionExpansion.assert_rp_almost_equal  s    Q"F#F#88C!T'
V 34!T'
V 346 ++<X+FG
AGV\7CAGV\7Crd   Tr$  c                    [        / SQ/ SQ5      u  p#[        U5      S:X  d   e[        US   [        R                  " / SQ5      5        [        US   [        R                  " / SQ5      5        [        US   [        R                  " / S	Q5      5        [        U[        R                  " / S
Q5      5        [        / SQ/ SQSS9u  p#[        U5      S:X  d   e[        US   [        R                  " / SQ5      5        [        US   [        R                  " / SQ5      5        [        US   [        R                  " / SQ5      5        [        US   [        R                  " / SQ5      5        [        US   [        R                  " / SQ5      5        [        US   [        R                  " / S	Q5      5        [        U[        R                  " / S
Q5      5        g )NrP   r  rL   r   )rR   rR   rL   rQ   )rQ   rQ   rQ   rL   rR   )rQ   rQ   rQ   rR   rR   )rQ   rQ   rQ   rR   rR   rL   T)include_powersrO   )rQ   rQ   rR   rR   rL   )rQ   rR   rR   rL   )rQ   rQ   rQ   rR   rL   rM   rN   )r0   r  r;   r   r]  )r\   r]   factorsr]  s       ra   test_compute_factors1TestPartialFractionExpansion.test_compute_factors  s>   (I>7|q   GAJ	(:;GAJ(=>GAJ(@AD"''*<"=>(I8<>7|q   GAJ(@AGAJ(=>GAJ	(:;GAJ(@AGAJ(=>GAJ(@AD"''*<"=>rd   c                 ^    [        / SQSS5      u  p#[        U/ SQ5        [        U/ SQ5        g )N)r  gjt?g?5^I?r}  g/$ @r  r.  r  r  r  )r1   r4   r\   r]   uniquemultiplicitys       ra   test_group_poles-TestPartialFractionExpansion.test_group_poles  s*    +0#u >0i0rd   c                 |   [        UR                  / SQ5      UR                  / SQ5      5      u  p#n[        X!R                  / SQ5      SS9  [        X1R                  / SQ5      SS9  [        XAR                  S/5      SS9  [        UR                  SS	/5      UR                  / S
Q5      5      u  p#n[        X!R                  S	S/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  SS/5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  SS/5      UR                  / SQ5      5      u  p#nU R	                  X#/ SQ/ SQ5        UR                  S:X  d   e[        UR                  SS/5      UR                  / SQ5      5      u  p#nU R	                  X#/ SQ/ SQ5        UR                  S:X  d   e[        UR                  / SQ5      UR                  / SQ5      5      u  p#n[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        [        XAR                  SS/5      5        [        UR                  S/5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS /5      5        UR                  S:X  d   e[        UR                  / S!Q5      UR                  / S"Q5      5      u  p#nU R	                  X#/ S#Q/ S$Q5        UR                  S:X  d   e[        UR                  / S%Q5      UR                  / S&Q5      5      u  p#nU R	                  X#/ S'Q/ S(Q5        UR                  S:X  d   e[        UR                  SS/5      UR                  / S)Q5      5      u  p#n[        X!R                  SS*/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  / S+Q5      UR                  / S)Q5      5      u  p#n[        X!R                  SS,/5      5        [        X1R                  SS/5      5        [        XAR                  S/5      5        [        UR                  / S-Q5      UR                  / S)Q5      5      u  p#n[        X!R                  S.S//5      5        [        X1R                  SS/5      5        [        XAR                  S0S1/5      5        [        UR                  / S+Q5      UR                  / S2Q5      5      u  p#nU R	                  X#/ S3Q/ S4Q5        UR                  S:X  d   eg )5NrN   rL   r  r   r?  r   r   rL   )gZd;O?g9#Jg&䃞ͪrM   r  )g-1ڿgeagvq-?g      r?  r   rQ   rO   r   ir  r   rQ   )rQ   r   r  rL   r   rR   )rR   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rQ   rN   r   rM   )r   rQ   rL   )r   r  r  )rL   gg)\(?g^I+g rh?)rQ   gffffffgQg~jt?)r  rM   rQ   )rO  g333333ӿr-  )rQ   rR   r  r        пr  )rQ   r   rE  )rQ   r   r   r   r   )rQ   y              ?y             r   )r                r   rQ   )rL   r   rO   rQ   rL   rL   rQ   rP   r   r   r   )rQ   r  rR   rN   )rR   rL   r   r  )r   rR   rL   r   rF  E   r   rW   )rQ   r  rM   r  )rM   y            @y            )rQ         ?      rq   )r,   rZ   r;   r   r=  r\   r]   r  r  rV  s        ra   test_residue_general1TestPartialFractionExpansion.test_residue_general  sv    "**]3RZZ5NOaAzz*DEqQAzz*DEqQAzz7)4a@"**b!W-rzz)/DEaAzz1c(34Azz2r(34vv{{"**aV,bjj.EFaAzz1a&12Azz2q'23vv{{"**aV,**%<=?a##?)	+ vv{{"**aV,bjj.FGa##A*$0	2vv{{"**%CD**%<=?aAzz*56Azz*:;<Azz1a&12"**aS/2::j+ABaAzz4-89Azz1b'23vv{{"**Z0"**=M2NOa##A$8$4	6 vv{{"**Y/L1IJa##A)$0	2vv{{"**aW-rzz*/EFaAzz2q'23Azz1a&12vv{{"**Z0"**Z2HIaAzz2r(34Azz1a&12Azz1#/"**]3RZZ
5KLaAzz3)45Azz1a&12Azz1b'23"**Z0"**^2LMa##A*C$7	9vv{{rd   c                 R   [        UR                  / SQ5      UR                  / SQ5      5      u  p#n[        UR                  / SQ5      UR                  / SQ5      5      u  pVn[        UR                  / SQ5      UR                  / SQ5      5      u  pn
[        UR                  / SQ5      UR                  / SQ5      5      u  pn[        X%5        [        X(5        [        X+5        [        X65        [        X95        [        X<5        [        XG5        [        XJ5        [        XM5        g )NrK  rL  )r   rN   rL   r  r   )r   r?  r   r   rL   )r   r   rN   rL   r  r   )r   r   r   r?  r   r   rL   )r,   rZ   r;   r\   r]   r0p0k0r1p1k1r2p2k2r3p3k3s                 ra   test_residue_leading_zeros7TestPartialFractionExpansion.test_residue_leading_zeros$  s     RZZ6

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

CS8TU
RZZ(;<ZZ(>?A
B#B#B#B#B#B#B#B#B#rd   c                 >   [        UR                  SS/5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  S5      UR                  S5      5      u  p#nUR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   e[        R
                  " [        SS9   [        SS5        S S S 5        g ! , (       d  f       g = f)Nr   rM  r  r?  rQ   Denominator `a` is zero.rX  )r,   rZ   r;   r   r  r   r   rT  s        ra   test_residue_degenerate4TestPartialFractionExpansion.test_residue_degenerate6  s     "**aV,bjj.CDaAzz1a&12Azz2r(34vv{{"**Q-A7avv{{vv{{vv{{]]:-GHAqM IHHs   8D
Dc           
         [        UR                  / SQ5      UR                  / SQ5      5      u  p#nU R                  X#/ SQ/ SQ5        [        XAR                  S/5      5        [        UR                  / SQ5      UR                  / SQ5      5      u  p#nU R                  X#SS	/S
S/SS9  [        XAR                  S/5      SS9  [        UR                  SS/5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  / SQ5      UR                  / SQ5      5      u  p#nU R                  X#/ SQ/ SQ5        UR                  S:X  d   e[        UR                  / SQ5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        [        XAR                  SS/5      5        [        UR                  S/5      UR                  / SQ5      5      u  p#nU R                  X#/ S Q/ S!Q5        UR                  S:X  d   e[        UR                  SS/5      UR                  [
        R                  " SS"/SS#/5      5      5      u  p#n[        X!R                  S$S%/5      5        [        X1R                  S&S/5      5        UR                  S:X  d   e[        UR                  / S'Q5      UR                  SS/5      5      u  p#n[        X!R                  S/5      5        [        X1R                  S/5      5        [        XAR                  SS/5      5        [        UR                  S5      UR                  SS(/5      5      u  p#n[        X!R                  S/5      5        [        X1R                  S)/5      5        UR                  S:X  d   e[        UR                  S5      UR                  / S*Q5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  S5      UR                  / S+Q5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  S#S/5      5        UR                  S:X  d   e[        UR                  / S,Q5      UR                  / S'Q5      5      u  p#n[        X!R                  S-S./5      5        [        X1R                  SS/5      5        [        XAR                  S/5      5        [        UR                  S/S/5      UR                  / S'Q5      5      u  p#n[        X!R                  S0S1/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  / SQ5      UR                  / S'Q5      5      u  p#n[        X!R                  S2S3/5      5        [        X1R                  SS/5      5        [        XAR                  S4S/5      5        [        UR                  / S5Q5      UR                  / S6Q5      5      u  p#nU R                  X#/ S7Q/ S8QSS9  UR                  S:X  d   eg )9N)rQ   rO   rO   rR   )rQ   y             r  rO  )y             @y      @      @y            ()r   rQ   rQ   rt   )rQ   rR   rQ   )rQ   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrM   r  gŏ1w@rQ   r   )rQ   rE  rO   rR   rL   r   r   rP  )rM   rE  rL   rQ  )rQ   r)  r?  rM   )rR   r  r?  rn  g      r  r  )r  rL   r?  r   )g
ףp=
?gQ?皙?)rn  UUUUUUտrm  r  r  g
gUUUUUU@rN  rQ   r  rQ   rO  r   )rQ   r   r  )rQ   g      r  )rQ   rO   rR   r)  r<  rO   r  r   ir  rS   r  )rQ   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿrl  yjM?%uyjM?%u?)ySsA?ySsAr  y-?8gDio?y-?8gDio)r-   rZ   r=  r;   r   r   polymulrT  s        ra   test_residuez_general2TestPartialFractionExpansion.test_residuez_generalF  sc   2::l3::&CDFa##A*G$.	0Azz2$/02::i0"**_2MNa##A%68I$J%2M$B,- 	$ 	/ 	Azz6(3Q?2::q"g.

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

;8OPaAzz3+67Azz2q'23Azz3)452::rd+RZZ-HIa##A$57H	Jvv{{2::q!f-::bjj!TQH&EFHaAzz5$-89Azz5#,78vv{{2::j12::q"g3FGaAzz1#/Azz1#/Azz1b'232::a="**aX*>?aAzz1#/Azz2$/0vv{{2::a="**]*CDaAzz1a&12Azz3*56vv{{2::a="**5E*FGaAzz2q'23Azz4+67vv{{2::i0"**Z2HIaAzz3(34Azz1a&12Azz1#/2::q!f-rzz*/EFaAzz2q'23Azz1a&12vv{{2::l3RZZ
5KLaAzz3)45Azz1a&12Azz2q'232::i0"**=P2QRa##A%N%N,- 	$ 	/ vv{{rd   c                 R   [        UR                  / SQ5      UR                  / SQ5      5      u  p#n[        UR                  / SQ5      UR                  / SQ5      5      u  pVn[        UR                  / SQ5      UR                  / SQ5      5      u  pn
[        UR                  / SQ5      UR                  / SQ5      5      u  pn[        X%5        [        X(5        [        X+5        [        X65        [        X95        [        X<5        [        XG5        [        XJ5        [        XM5        g )NrK  rL  )rN   rL   r  r   r   )r?  r   r   rL   r   )rN   rL   r  r   r   r   )r?  r   r   rL   r   r   r   )r-   rZ   r;   rX  s                 ra   test_residuez_trailing_zeros9TestPartialFractionExpansion.test_residuez_trailing_zeros  s     bjj7 jj79
bjj)9: jj79
bjj7 jj)9:<
bjj)<= jj)?@B
B#B#B#B#B#B#B#B#B#rd   c                 8   [        UR                  SS/5      UR                  / SQ5      5      u  p#n[        X!R                  SS/5      5        [        X1R                  SS/5      5        UR                  S:X  d   e[        UR                  S5      UR                  S5      5      u  p#nUR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   e[        R
                  " [        SS9   [        UR                  S5      UR                  S5      5        S S S 5        [        R
                  " [        SS9   [        UR                  S5      UR                  / S	Q5      5        S S S 5        g ! , (       d  f       N]= f! , (       d  f       g = f)
Nr   rM  r  r?  rQ   rh  rX  z6First coefficient of determinant `a` must be non-zero.r  )r-   rZ   r;   r   r  r   r   rT  s        ra   test_residuez_degenerate5TestPartialFractionExpansion.test_residuez_degenerate  s2   2::q!f-rzz)/DEaAzz1a&12Azz2r(34vv{{2::a="**Q-8avv{{vv{{vv{{]]:-GHRZZ]BJJqM2 I ]]:"01 RZZ]BJJ|$<=1 1 IH1 1s   8+E:-F:
F
Fc                 T   UR                  / SQ5      nUR                  / SQ5      nUR                  / 5      nUR                  / SQ5      nUR                  / SQ5      nS HE  n[        X#XGS9u  p[        XSS9  [        XS	SS
9  [        X#XGS9u  p[        XSS9  [        XS	SS
9  MG     g )N)ro  UUUUUUſg)r   r  rE  )rr  rQ   rL   )rQ   r   rS   r   avgr  r  r  ru  r  rtypegV瞯<r   F)r   r   rZ   r    r4   r!   )
r\   r]   r  r  rV  
b_expected
a_expectedr}  r_   r^   s
             ra   *test_inverse_unique_roots_different_rtypesGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypes  s     JJ01JJ{#JJrNZZ,
ZZ.
 IE!/DAA6Au5I10DAA6Au5I Ird   c                 v   UR                  / SQ5      nUR                  / SQ5      nUR                  / 5      nUR                  / SQ5      nUR                  / SQ5      nUR                  / SQ5      nS HC  n[        X#XHS9u  p[        XSS	9  [        XS
S9  [        X#XHS9u  p[        XSS	9  [        XS
S9  ME     g )Ng333333?g98ȿry  gll?r   r  r  rE  )rr  r   rQ   rL   )ry  gUUUUUUgUUUUUU?rL   )rQ   r<  rL  r  r   rz  r|  r   r   Fr  r~  )r\   r]   r  r  rV  r  b_expected_zr  r}  r_   r^   s              ra   ,test_inverse_repeated_roots_different_rtypesITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypes  s    JJ89JJ'JJrNZZ/
zz"78ZZ 12
HE!/DAA6Au=10DAA%8Au= Ird   c                 j   UR                  / SQ5      nUR                  / SQ5      nUR                  / 5      n[        R                  " [        SS9   [	        X#USS9  S S S 5        [        R                  " [        SS9   [        X#USS9  S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = f)Nr  r  z`rtype` must be one ofrX  r  r|  )rZ   r  r   r   r    r!   rT  s        ra   test_inverse_bad_rtype3TestPartialFractionExpansion.test_inverse_bad_rtype  s    JJ89JJ'JJrN]]:-EF1(+ G]]:-EFA!8, GF GFFFs   B>B$
B!$
B2c                     UR                  S/5      nUR                  S/5      nUR                  S/5      n[        X#U5      u  pV[        XQR                  S/5      5        [        XaR                  SS/5      5        g )NrQ   rR   r   r  g       )rZ   r!   r4   )r\   r]   r  r  rV  r_   r^   s          ra    test_invresz_one_coefficient_bug=TestPartialFractionExpansion.test_invresz_one_coefficient_bug  sf     JJsOJJsOJJsOqQ::qc?+::sDk23rd   c                    [        UR                  S/5      UR                  S/5      UR                  / 5      5      u  p#[        X!R                  S/5      5        [        X1R                  SS/5      5        [        UR                  / SQ5      UR                  / SQ5      UR                  / 5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        [        UR                  SS/5      UR                  SS	/5      UR                  / S
Q5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        [        UR                  / SQ5      UR                  / SQ5      UR                  / 5      5      u  p#[        UUR                  / SQ5      5        [        UUR                  / SQ5      5        [        UR                  SS/5      UR                  SS/5      UR                  SS/5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        g )NrQ   r   rS  rR         ?      rQ   r   rq   y      @      y      !      ?y      @      
@rQ   y             y      ?       @y      ?      rn  rS  r  rP   )rQ                     ?       r  rS   rQ               rM   r   rR   r   r  rM   r  r   r   r   rL   rL   rL   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prQ   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rR   )rQ   r   r?  rs   rn  )r    rZ   r;   r\   r]   r_   r^   s       ra   test_invres(TestPartialFractionExpansion.test_invres  s   bjj!orzz1#

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

Aq6@RSAzz*<=>Azz*56rd   c                    [        UR                  S/5      UR                  S/5      UR                  / 5      5      u  p#[        X!R                  S/5      5        [        X1R                  SS/5      5        [        UR                  / SQ5      UR                  / SQ5      UR                  / 5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        [        UR                  SS/5      UR                  SS	/5      UR                  / S
Q5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        [        UR                  / SQ5      UR                  / SQ5      UR                  / 5      5      u  p#[        UUR                  / SQ5      5        [        UUR                  / SQ5      5        [        UR                  SS/5      UR                  SS/5      UR                  SS/5      5      u  p#[        X!R                  / SQ5      5        [        X1R                  / SQ5      5        g )NrQ   r   r  r  r  r  rn  rS  r  rP   )g      @r  r  y            rX   r  r  r  )rO   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rR   )r   rQ   r  rR   rn  )r!   rZ   r;   r  s       ra   test_invresz)TestPartialFractionExpansion.test_invresz  s   rzz1#

A3BHAzz1#/Azz1b'23rzz"78zz"34bjjnFAzz*OPQAzz*NOPrzz3(+zz66"23zz),. 	Azz*MNOAzz/:;rzz"<=zz"?@zz"~' 	AJJ (A B	C 	AJJ (? @	A rzz2r(+zz1a&)zz1a&)+ 	Azz.9:Azz*56rd   c                     [        SSS5      u  p#[        USS/5        [        USS/5        [        SSS5      u  p#[        USS/5        [        USS/5        g )NrQ   r   r   rR   )r    r;   r!   r  s       ra   test_inverse_scalar_arguments:TestPartialFractionExpansion.test_inverse_scalar_arguments<  s[     aAA1v&A2w'q!QA2w'A2w'rd   r*  N)r   )r,  r-  r.  r/  r3  r=  r0  rB  rH  r@   r,   rU  re  ri  r-   rp  rs  rv  r    r!   r  r  r  r  r  r  r  r2  r*  rd   ra   r5  r5    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'( ( $(rd   r5  c                       \ rS rSrS r\" SSS9S 5       rS rS rS	 r	S
 r
S r\" SSS9S 5       rS rS rS rS rS rS rSrg)TestVectorstrengthiH  c                 0   UR                  S/5      nSnSnSn[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        R                  " XdSS9(       d   e[        R                  " US[        R
                  -  U-  SS9(       d   eg )	Nrn  r  r  r.  r   v!>abs_tolrR   rZ   r"   r\  r  isclosert  r\   r]   eventsperiodtarg_strength
targ_phasestrengthphases           ra   test_single_1dperiod'TestVectorstrength.test_single_1dperiodK  s    RD!
(8}}!!!zzQ||HVDDD||E1tww;#;VLLLrd   r   zphase modulo 2*pirI   c                 N   UR                  S/5      nUR                  / SQ5      nUR                  S/S-  5      nUR                  / SQ5      n[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        Xd5        [	        USUR
                  -  U-  5        g )Nrn  )rQ   rR   r  r  rL   )rn  r  r.  rQ   rR   )rZ   r"   r\  r:   r;   rt  r  s           ra   test_single_2dperiod'TestVectorstrength.test_single_2dperiodY  s    RD!J'

B4!8,ZZ.
(8}}!!!zzQ!(:E1ruu9z#9:rd   c                 2   UR                  / SQ5      nSnSnSn[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        R                  " XdSS9(       d   e[        R                  " US[        R
                  -  U-  SS9(       d   eg )Nr  r  r  r  r  r  rR   r  r  r   r  r  r  r  s           ra   test_equal_1dperiod&TestVectorstrength.test_equal_1dperiodg  s    :;
(8}}!!!zzQ||HVDDD||E1tww;#;VLLLrd   c                 P   UR                  / SQ5      nUR                  SS/5      nUR                  S/S-  5      nUR                  SS/5      n[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        Xd5        [        USUR                  -  U-  5        g )Nr  rQ   rR   r  r  r  rZ   r"   r\  r;   rt  r  s           ra   test_equal_2dperiod&TestVectorstrength.test_equal_2dperiodu  s    :;QH%

B4!8,ZZd,
(8}}!!!zzQH4E1ruu9z#9:rd   c                 2   UR                  / SQ5      nSnSnSn[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        R                  " XdSS9(       d   e[        R                  " US[        R
                  -  U-  S	S9(       d   eg )
Nr.  g?g @gffffff@g333333$@rQ   r  r.  r   r  r  rR   r  r  r  s           ra   test_spaced_1dperiod'TestVectorstrength.test_spaced_1dperiod  s    56
(8}}!!!zzQ||HVDDD||E1tww;#;VLLLrd   c                    UR                  / SQ5      nUR                  SS/5      nUR                  S/S-  5      nUR                  SS/5      n[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        Xd5        [	        U5      UR
                  :X  a  SS	0O0 n[        USUR                  -  U-  40 UD6  g )
Nr  rQ   rn  r  rR   r.  rO  r   g>)rZ   r"   r\  r;   r>   r   r4   rt  )	r\   r]   r  r  r  r  r  r  rtol_kws	            ra   test_spaced_2dperiod'TestVectorstrength.test_spaced_2dperiod  s    56QG$

B4!8,ZZR)
(8}}!!!zzQH4$4R$8BJJ$F64.Bq255y:5AArd   c                 6   UR                  / SQ5      nSnSnSn[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        R                  " Xd5      (       d   e[        R                  " US[        R
                  -  U-  5      (       d   eg )Nr  rn        ?rQ   UUUUUU?rn  r   rR   r  r  s           ra   test_partial_1dperiod(TestVectorstrength.test_partial_1dperiod  s    N+
(8}}!!!zzQ||H4444||E1tww;#;<<<<rd   c                 P   UR                  / SQ5      nUR                  / SQ5      nUR                  S/S-  5      nUR                  / SQ5      n[        X#5      u  pgUR                  S:X  d   eUR                  S:X  d   e[        Xd5        [        USUR                  -  U-  5        g )Nr  )r  r  r  r  r  rM   )rn  rn  rn  rn  rQ   rR   r  r  s           ra   test_partial_2dperiod(TestVectorstrength.test_partial_2dperiod  s    N+,-

G9q=1ZZ 01
(8}}!!!zzQH4E1ruu9z#9:rd   c                     UR                  / SQ5      nSnSn[        X#5      u  pVUR                  S:X  d   eUR                  S:X  d   e[        R                  " XTSS9(       d   eg )Nr   r  rn  r  r  r   r  r  )rZ   r"   r\  r  r  r\   r]   r  r  r  r  r  s          ra   test_opposite_1dperiod)TestVectorstrength.test_opposite_1dperiod  s]    -.(8}}!!!zzQ||HVDDDrd   c                     UR                  / SQ5      nUR                  S/S-  5      nUR                  S/S-  5      n[        X#5      u  pVUR                  S:X  d   eUR                  S:X  d   e[        XT5        g )Nr  r  rS   rr  rQ   )rZ   r"   r\  r;   r  s          ra   test_opposite_2dperiod)TestVectorstrength.test_opposite_2dperiod  so    -.RD2I&

B4"9-(8}}!!!zzQH4rd   c                 Z    UR                  SS//5      nSn[        [        [        X#5        g )NrQ   rR   r  rZ   r   r   r"   r\   r]   r  r  s       ra   test_2d_events_ValueError,TestVectorstrength.test_2d_events_ValueError  s'    aVH%j.&Ard   c                 X    SnUR                  S//5      n[        [        [        X#5        g )Nr  rQ   r  r  s       ra   test_2d_period_ValueError,TestVectorstrength.test_2d_period_ValueError  s%    aSE"j.&Ard   c                 6    SnSn[        [        [        X#5        g )Nr  r   r   r   r"   r  s       ra   test_zero_period_ValueError.TestVectorstrength.test_zero_period_ValueError  s    j.&Ard   c                 6    SnSn[        [        [        X#5        g )Nr  r   r  r  s       ra   test_negative_period_ValueError2TestVectorstrength.test_negative_period_ValueError  s    j.&Ard   r*  N)r,  r-  r.  r/  r  r1  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r*  rd   ra   r  r  H  s    M w':;; <;M;MB= w':;; <;	E	5B
B
B
Brd   r  )r&  )r   r   r   r   c                   *   \ rS rSr\" SSS9S 5       r\" SSS9S 5       r\" SSS9S 5       rS r\" SS	S9S
 5       r	\" SS	S9\" SSS9S 5       5       r
\" SS	S9S 5       r\" SSS9\" SS	S9S 5       5       r\" SS	S9S 5       r\" SS9S 5       rSrg)TestSOSFilti  rG   zbuffer array is read-onlyrI   c                 R   [        X!5      nUR                  SSSUS9nUR                  SS/US9nUR                  SS/US9nUR                  / S	QUS9n[        [        R                  XE45      u  px[        Xx5      n	UR                  U	5      n	[        [        X5      U5        UR                  SS/US9nUR                  SS/US9nUR                  / S
QUS9n[        [        R                  XE45      u  px[        Xx5      n	UR                  U	5      n	[        [        X5      U5        UR                  / SQ5      nUR                  / SQ5      nUR                  S5      nUR                  XE45      n	UR                  U	S5      n	[        X5      n
[        XR                  / SQ5      5        g )Nr   rN   rO   r   rQ   r   rn  r  r  r$  )r  rQ   r   )r  r   r   r   r  )r  rR   rR   rR   rR   rR   rR   rR   )r  r@  rZ   r  r   r$   r:   r%   r  concatr   r4   )r\   r  r]   ru   r_   r^   r   bbrv  r  rv   s              ra   
test_rank1TestSOSFilt.test_rank1  sw   R_KK1arK*JJ2wbJ)JJT{"J- jj-Rj8RZZ!(Rnjjo!'#/37 JJ1vRJ(JJ1vRJ(jj,Bj7RZZ!(Rnjjo!'#/37JJ{#JJ{#GGAJiijjf%CO::&@ABrd   c                 J   [        X!5      nSn[        R                  " U5      nUR                  SUS-
  XAS9nUR	                  XS5      nUR                  SS/US9nUR                  SS/US9nUR                  / SQ/ SQ/ SQ/ SQ/US9nUR                  / S	Q/ S
Q/ SQ/ SQ/US9n	[        [        R
                  Xg45      u  p[        X5      nUR                  U5      n[        XSS9n[        X5        [        X5      nUR                  U5      n[        XSS9n[        X5        g )Nr6  r   rQ   r   r   rn  r7  r8  r=  r>  r?  r@  r  )r  r  r  r@  r   rZ   r  r   r$   r%   r:   )r\   r  r]   r  r  ru   r_   r^   r9  rA  r  rv  r  rv   s                 ra   
test_rank2TestSOSFilt.test_rank2  s!   R_IIe$	KK9q=)K>JJq JJ2wbJ)JJSzJ,**iIyI!#  % **i])+24  6 RZZ!(RnjjoC#!'-RnjjoC#!'-rd   c                 $   [        X!5      nSn[        R                  " U5      nUR                  SUS-
  U5      nUR	                  XS5      nUR                  SS/US9nUR                  SS/US9n[        [        R
                  Xg45      u  p[        X5      n
UR                  U
5      n
[        X5      n[        UR                  S   5       HB  n[        UR                  S   5       H#  n[        XUS4   [        XgX\US4   5      5        M%     MD     g )NrS  r   rQ   r   r   rn  .)r  r  r  r@  r   rZ   r  r   r$   r%   r   r  r:   r   )r\   r  r]   r  r  ru   r_   r^   r  rv  r  rv   r   js                 ra   r`  TestSOSFilt.test_rank3/  s    R_IIe$	KK9q=)4JJq JJ2wbJ)JJSzJ, RZZ!(RnjjoCOqwwqz"A1771:&)!q#I,a1c	l8ST ' #rd   c                 &   [         R                  " SSS5      u  p#[         R                  " SSS5      u  pE[         R                  " SSS5      u  pg[        R                  " [        R                  " X$5      U5      n[        R                  " [        R                  " X55      U5      n	[        R                  " [        R
                  X#4   [        R
                  XE4   [        R
                  Xg4   45      n
[        UR                  XU
45      u  pn
XU
4$ )NrR   r  lowr  )r   r   r   r   r  r_r  rZ   )r\   r]   b1rm  b2rn  b3ro  r_   r^   r  s              ra   _get_ab_sosTestSOSFilt._get_ab_sosC  s    q$.q$.q$.KKB+R0KKB+R0hhbfruuRV}beeBFmDE

Q3K0	cSyrd   zitem assignmentc           
         U R                  U5      u  p4n[        R                  R                  S5      R	                  U5      nUR                  U5      n[        X!5      n[        XCUS S UR                  S5      S9u  pxUR                  U[        XCUSS  US9S   45      n[        U[        XCU5      5        [        XVS S UR                  S5      S9u  pUR                  U	[        XVSS  US9S   45      n	[        Xy5        [        U5      nUR                  SUS9n[        XVUS9u  p[        XR                  S5      S	S
9  [        XS	S
9  g )Nr  r  rO   r*  r   r   r   r   Fr  )r  r   r  r8  r  rZ   r  r   r  r  r4   r%   r'   r  )r\   r  r]   r^   r_   r  ru   y_truer+  r  rv   r/  s               ra   test_initial_conditions#TestSOSFilt.test_initial_conditionsN  s2   $$R(	cIINN2%%b)JJqMR_ Q1Sb6bhhqk:
FGA!BC&R$@$CDEa 01C3BBHHV,<=			5'#v""=a"@AB& _GGARG 2&771:59E2rd   r  zfancy indexing not supportedc                    [        X!5      nUR                  SUS9nU R                  U5      u    pE[        U5      nUR	                  USUR
                  -   5      n[        R                  " [        5         [        XSUS9  S S S 5        [        XbS9nUR	                  XvR
                  S   SSUR
                  S   45      n[        R                  " [        5         [        XSUS S 2S S 2S S 2/ S	Q4   S9  S S S 5        [        XSUS9u  p[        US
   UR                  S5      SS9  [        U	S S 2SSS S 24   USS9  g ! , (       d  f       N= f! , (       d  f       N_= f)Nr   r   r  r*  r#  r   rQ   r   )r   rQ   rQ   r  Fr  )r  r  r  r'   r   r  r  r   r   r%   r<   r4   )
r\   r  r]   ru   r;  r  r+  zi_ndrv   r/  s
             ra   test_initial_conditions_2%TestSOSFilt.test_initial_conditions_2h  s     R_GGARG $$R(	1_ JJq&177*+]]:&Cr" ' "

588A;1bhhrl"CD]]:&CuQ1i%789 ' 5)$?1aA:> '& '&s   4D;E;
E	
Ec                    [         R                  R                  S5      R                  SSSS9nUR	                  U5      nUR                  U5      n[        R                  " SSSS	9n[        U6 nUR                  U5      nUR                  S   nS
n[        UR                  5      nSX'   [        U/U-   5      nUR                  U5      n	[        XSXyS9u  p[        XSS S 2S S2S S 24   XyS9u  p[        XSS S 2SS 2S S 24   X}S9u  pUR                  X4US9n[        UU
SSS9  [        XSSS9  [!        U5      nUR#                  UUS
SS
45      nUUS S 2SS
2S S 24   -  n[        XSUUS9S   n[%        U6 u  nnUR                  U5      UR                  U5      nn['        UU5      nUR#                  US
[)        U5      S
45      nUUS S 2SS
2S S 24   -  n[+        UUX7US9S   n[        UUSSS9  g )N   r   rN   )rR   r  rL   r   rO   r  r  r  rQ   rR   rH  r  r5  rR  r   )r   r  r  rZ  r  rZ   r   r   r   r  r  r   r  r%   r  r4   r'   r   r   r   r=   r   )r\   r  r]   ru   r  r  	nsectionsr  shpz0r  r/  r  r  r  r  rv   r+  r_   r^   y_tfs                        ra    test_initial_conditions_3d_axis1,TestSOSFilt.test_initial_conditions_3d_axis1  s   
 II!!#&..q!*.EHHRLJJqM mmAtE2smjjoIIaL	  177m	YK#%&XXc] d2 2A2qk<12qk< IIrhTI*2E6U7 _ZZY1a01!AqsAI,C"-a0s|1zz!}bjjm11ZZQQ/0!AqsAI,q!Qb1!44e%8rd   r   zissues a RuntimeWarningc                    [        X!5      nUR                  SUS9nUR                  S5      nUR                  S5      n[        R                  " [
        SS9   [        XCUSS9  S S S 5        S	US S 2S
4'   [        R                  " [
        SS9   [        XCUSS9  S S S 5        g ! , (       d  f       NE= f! , (       d  f       g = f)N)rL   r  rL   r   )rM   rO   )rM   rL   rL   rR   zshould be all onesrX  rQ   )r+  r  r  rL   zInvalid zi shape)r  r  r  r  r   r   r%   )r\   r  r]   ru   r  r+  s         ra   test_bad_zi_shapeTestSOSFilt.test_bad_zi_shape  s     R_ HHZrH*hhvXXl#]]:-ABCr* CAqD	]]:-?@Cr* A@ CB A@s   B"B3"
B03
Cc           	         [        X!5      n[        R                  " SSSS9nUR                  U5      n[	        U5      n[        X2R                  SUS9US9u  pV[        XdSS	S
9  UR                  UR                  US S 2S S24   SS9UR                  US S 2SS 24   SS9-  5      n[        XWUR                  U5      -  SS9  g )NrO   rO  r  r  rN  r   r*  rR  Fr   r   rL   r   r  r6  )r  r   r   rZ   r'   r%   r  r4   r  r  r  )r\   r  r]   r  r+  rv   r/  sss           ra   test_sosfilt_ziTestSOSFilt.test_sosfilt_zi  s    R_mmAs51jjo_WWRrW2r:U> WWRVVC2A2JRV0266#ae*263NNOQ/e<rd   Tr$  c                     [        X!5      n[        R                  " SSSS9nUR                  U5      n[	        U5      n[        X2R                  SUS9UR                  5       S9u  pV[        XdSS	S
9  g )NrO   rO  r  r  rN  r   r*  rR  Fr  )	r  r   r   rZ   r'   r%   r  r[  r4   )r\   r  r]   r  r+  r;  r/  s          ra   test_sosfilt_zi_2TestSOSFilt.test_sosfilt_zi_2  sb     R_mmAs51jjo_WWRrW2ryy{CU>rd   r*  N)r,  r-  r.  r/  r0  r  r  r`  r  r   r  r  r  r  r  r2  r*  rd   ra   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#? $?rd   r  c                   n    \ rS rSr\" SSS9S 5       rS r\" SSS	9S
 5       r\" SSS	9S 5       r	S r
Srg)TestDeconvolvei  Tr  r~   c                     / SQnSS/nUR                  / SQ5      n[        R                  " XC5      u  pV[        XR5        g )Nrr  rQ   r   r   rQ   rQ   r   r   rR   rQ   	rr  rR   rQ   r   rR   rL   rQ   r   r   )rZ   r   
deconvolver4   r\   r]   originalimpulse_responserecorded	recovered	remainders          ra   r  TestDeconvolve.test_array_like  s=     .q6::;<%00L		,rd   c                     UR                  / SQUR                  S9nUR                  SS/5      nUR                  / SQ5      n[        R                  " XC5      u  pV[	        XR5        g )Nr  r   rR   rQ   r  )rZ   r   r   r  r4   r  s          ra   rb   TestDeconvolve.test_basic  sV    ::8

:K::q!f-::;<%00L		,rd   r   zdifferent error messagerI   c                     UR                  SS/SS//5      nUR                  SS/5      n[        R                  " [        SS9   [        R
                  " X#5      u  pES S S 5        g ! , (       d  f       g = f)Nr   z#^Parameter signal must be non-emptyrX  rZ   r  r   r   r   r  r\   r]   r"  r!  quotientr$  s         ra   test_n_dimensional_signal(TestDeconvolve.test_n_dimensional_signal  s_    ::1v1v./::q!f-]]:-RS"("3"3H"OH TSS   A&&
A4c                     UR                  SS/5      nUR                  SS/SS//5      n[        R                  " [        SS9   [        R
                  " X#5      u  pES S S 5        g ! , (       d  f       g = f)Nr   z$^Parameter divisor must be non-emptyrX  r)  r*  s         ra   test_n_dimensional_divisor)TestDeconvolve.test_n_dimensional_divisor  s_    ::q!f%::1v1v&67]]:-ST"("3"3H"OH UTTr.  c                     UR                  / SQ5      UR                  / SQ5      p2[        R                  " X#5      u  pE[        XR5        [	        UR                  U5      5      S:X  d   eg)zCReturn signal as `remainder` when ``len(divisior) > len(signal)``. r  )r   rQ   rR   rM   rN   r   N)rZ   r   r  r5   r=   )r\   r]   r3  divr+  r$  s         ra   test_divisor_greater_signal*TestDeconvolve.test_divisor_greater_signal  sR    ::i("**_*ES$//9	'rzz(+,111rd   r*  N)r,  r-  r.  r/  r0  r  rb   r1  r,  r0  r4  r2  r*  rd   ra   r  r    sg     d+KL- M-- v&?@P AP v&?@P AP2rd   r  c                   4   \ rS rSrS r\" SSS9S 5       r\R                  R                  SSS	/5      \R                  R                  S
/ SQ5      S 5       5       r
S r\R                  R                  S\R                  " SS/5      SS//5      S 5       rSrg)TestDetrendi  c                 x    [        UR                  / SQ5      5      nUR                  / SQ5      n[        X#5        g )NrP   r  )r*   rZ   r:   )r\   r]   	detrendeddetrended_exacts       ra   rb   TestDetrend.test_basic
  s+    BJJy12	**Y/!)=rd   rG   zoverwrite_data not implementedrI   c                 h    UR                  / SQ5      n[        USS9n[        USS9n[        X45        g )N)rQ   333333?r  g?g333333@F)overwrite_dataT)rZ   r*   r:   )r\   r]   ru   
copy_arrayinplaces        ra   	test_copyTestDetrend.test_copy  s1    JJ./Qu5
!D1!*6rd   r  linearr.  r  r  c                     UR                  UR                  S5      S5      n[        XBUS9nUR                  UR                  :X  d   eg )N   )rN   rO   r   )r  r  )r   r   r*   r  )r\   r  r  r]   r  r9  s         ra   r  TestDetrend.test_axis  s?     zz"))E*I6D$7	$**,,,rd   c                 d   / SQ/ SQ-   nUR                  U5      n[        USSS9n[        X1R                  U5      SS9  UR                  U5      S S S 2S 4   n[        USSSS	9n[        X1R                  U5      SS9  [	        [
        5         [        USSS9  S S S 5        g ! , (       d  f       g = f)
Nr  )rN   r   rE  r)  rC  rL   )r  bpr   r   rQ   )r  rH  r  )rZ   r*   r4   r   r   r   )r\   r]   r  r9  s       ra   test_bpTestDetrend.test_bp  s    ?*zz$DxA6		==#;%H zz$a.DxAA>		==#;%H :&DxA. '&&s   B!!
B/rH  r   rR   c                 
   [         R                  R                  S5      nUR                  S5      nUR	                  U[        U5      S9n[        U[         R                  5      (       a"  [        U5      (       d  UR	                  U5      nO6[        U5      (       d&  [        U5      (       d  [        R                  " S5        [        XAS9nUR	                  / SQ5      n[        U5      UR                  :X  a  SOSn[        XVUS	9  g )
Ni90  rS   r   z'list bp is currently numpy and jax only)rH  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr?  r   r   )r   r  r  r8  rZ   r>   r  ndarrayr8   r6   r  r  r*   r   r4   )r\   rH  r]   r  ru   r  res_scipy_191r   s           ra   test_detrend_array_bp!TestDetrend.test_detrend_array_bp-  s     ii##E*HHRLJJq 0 4J5b"**%%fRjj BBRLLF2JJEFa

 $O P (+rzz9tu6rd   r*  N)r,  r-  r.  r/  rb   r0  rA  r  r  r  r  rI  r   r  rN  r2  r*  rd   ra   r7  r7    s    >
 k*JK7 L7 [[Vh
%;<[[VY/- 0 =-
/  [[TBHHaV$4q!f#=>7 ?7rd   r7  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestUniqueRootsiD  c                     UR                  / SQ5      n[        U5      u  p4[        X2SS9  [        XAR	                  [        U5      [        S95        g )N)r~  r  ro  r=  rm  r  r  r   rZ   r+   r;   r5   r  r  r  r\   r]   r  rF  rG  s        ra   test_real_no_repeat#TestUniqueRoots.test_real_no_repeatF  s@    JJ34+AFr2ggc!fCg&@Ard   c                    UR                  / SQ5      n[        USSS9u  p4[        X1R                  / SQ5      SS9  [        XAR                  / SQ5      5        [        USS	S9u  p4[        X1R                  / S
Q5      SS9  [        XAR                  / SQ5      5        [        USSS9u  p4[        X1R                  / SQ5      SS9  [        XAR                  / SQ5      5        g )N)r~  ffffff{Gz皙rn  r  ?r.  r  tolr}  )r~  rY  rn  r  r  r  rR   rR   rQ   rR   ru  )rX  rZ  rn  r[  r{  )g333333g
ףp=
rn  gffffff?rZ   r+   r;   r5   rT  s        ra   test_real_repeat TestUniqueRoots.test_real_repeatL  s    JJAB+A4uEFJJ/F$GQSTjj&>?+A4uEFJJ/G$HRTUjj&>?+A4uEFJJ/K$L$&	(jj&>?rd   c                     UR                  / SQ5      n[        U5      u  p4[        X2SS9  [        XAR	                  [        U5      [        S95        g )N)r~  r         ?      ?r  r  r  r  r   rS  rT  s        ra   test_complex_no_repeat&TestUniqueRoots.test_complex_no_repeat\  s@    JJHI+AFr2ggc!fCg&@Ard   c                    UR                  / SQ5      n[        USSS9u  p4[        UUR                  / SQ5      SS9  [        XAR                  / SQ5      5        [        USS	S9u  p4[        UUR                  / S
Q5      SS9  [        XAR                  / SQ5      5        [        USSS9u  p4[        UUR                  / SQ5      SS9  [        XAR                  / SQ5      5        g )N)r~        𿚙?ffffff333333?333333?rr  rc  ??r.  r  r\  )r~  rh  rr  rj  r  r  r^  ru  )rg  ri  rr  rc  r{  )y      𿚙?y333333?rr  yffffff??r_  rT  s        ra   test_complex_repeat#TestUniqueRoots.test_complex_repeatb  s    JJ ' (  ,A4uEFJJ'OP$&	( 	jj&>?+A4uEJJ> 	
 	jj&>?+A4uEJJKL	

 	jj&>?rd   c           
         UR                  [        R                  " [        R                  " [        R                  " S5      [        R                  " S5      5      5      5      nUR                  / SQ5      n[        U5      u  pEUR                  U5      n[        UR                  U5      USS9  [        XQR                  / SQ5      5        g )NrN   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r   r  )rR   rR   rR   rR   )	rZ   r   r\  r   r  r+   sortr;   r5   )r\   r]   r  
true_rootsrF  rG  s         ra   test_gh_4915TestUniqueRoots.test_gh_4915~  s    JJrxxBGGAJ
 CDEZZB

  ,ABGGFOZCjj&>?rd   c                 V   [        UR                  / SQ5      5      u  p#[        X!R                  SS/5      SS9  [        X1R                  SS/5      5        [        UR                  / SQ5      S	S
9u  p#[        X!R                  SS/5      SS9  [        X1R                  SS/5      5        g )N)r  r   r  r  r   r  r  rR   rQ   )rQ   g_p   ?&.>      ?r.  )r]  rs  )r+   rZ   r;   r5   rE  s       ra   test_complex_roots_extra(TestUniqueRoots.test_complex_roots_extra  s    +BJJ7G,HIFJJT{$;RHjj!Q&89+JJ/0c 
 	FJJ[/A$BBOjj!Q&89rd   c                 T   UR                  [        R                  R                  S5      S[        R                  R                  S5      -  -   5      n[	        US5      u  p4[        X1R                  [        R                  " U5      /5      SS9  [        XAR                  S/5      5        g )Nr+  r   rR   r  r  )rZ   r   r  r8  r+   r;   r  r5   rT  s        ra   test_single_unique_root'TestUniqueRoots.test_single_unique_root  ss    JJryy~~c*R"))..2E-EEF+Aq1FJJq	{$;RHjj#&78rd   r*  N)r,  r-  r.  r/  rU  r`  rd  rk  rp  rt  rw  r2  r*  rd   ra   rQ  rQ  D  s*    B@ B@8
@	:9rd   rQ  c                      [         R                  " [        R                  " S[        R                  S9SS5      n U R
                  [        R                  :X  d   eg )Nr  r   rO   rM   )r   r1  r   r   r   r   )r  s    ra   test_gh_22684rz    s;    !!"))D"Eq!LF<<2<<'''rd   r(  )r  r  r\  concurrent.futuresr   r   	itertoolsr   r   r  r   r   numpyr   numpy.exceptionsr	   scipyr
   rO  r  r   scipy.optimizer   r   r   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   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  r0  r1  lazy_xp_modulesrE   r4  r  r^  re  rp  rr  rt  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  paramr  r8  r;  r>  rh  rz  r  r  r  r  	fail_slowr  r  r  r  r  rg  r  r  r5  r  r  r  r  r7  rQ  rz  r*  rd   ra   <module>r     sl   
   ?    *  +  % 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$(.U6;;CSCSBT(U(.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(rd   