
    Џkh:1                        d dl Zd dlmZ d dlmZ d dlZd dlmZ	 d dl
mZmZ d dlmZmZ d dlmZmZ d dlmZ ej*                  j,                  Zdd	Z G d
 d      ZdZ edd       G d d             Z edd      d        Zy)    N)product)raises)array_api_extra)xp_assert_closearray_namespace)upfirdnfirwin)_output_len_upfirdn_modes)	_pad_testc                 <   t        j                  |       } t        j                  |      }t        j                  t        |       |z  | j                        }| |dd|<   t        j
                  ||      dd|   dt        t        |      t        |       ||       }|S )zpNaive upfirdn processing in Python.

    Note: arg order (x, h) differs to facilitate apply_along_axis use.
    N)npasarrayzeroslendtypeconvolver
   )xhupdownouts        [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   5   s    
 	

1A


1A
((3q6B;
(CC"I
++a
ff
%&L{3q63q62t'L
MCJ    c                   $    e Zd ZdZd Zd ZddZy)UpFIRDnCasezTest _UpFIRDn objectc                     || _         || _        t        j                  |      | _        || _        t        j                  j                  d      | _        y )N   )	r   r   r   
atleast_1dr   x_dtyperandomRandomStaterng)selfr   r   r   r!   s        r   __init__zUpFIRDnCase.__init__D   s=    	q!99((,r   c                 @   | j                  t        j                  d| j                               | j                  t        j                  d| j                               | j                  j                  d      j                  | j                        }| j                  t        j                  t        j                  fv r!|d| j                  j                  d      z  z  }| j                  |       | j                  t        j                  d      j                  | j                               d} | j                  j
                  | j                  | j                        }| j                  t        j                  t        j                  fv r|d | j                  j
                  | z  z  }t        t        |            D ]  }| j                  ||        |d d d d ddd df   j                  }t        t        |            D ]  }| j                  ||        y )N   
                 ?)         axisr+   r,   )scrubr   onesr!   r$   randnastype	complex64
complex128arangeranger   T)r%   r   sizer/   s       r   __call__zUpFIRDnCase.__call__K   s   

2771dll+,

2772t||,-HHNN2%%dll3<<BLL"--88dhhnnR(((A

1

299R=''56DHHNND!((6<<BLL"--88ndhhnnd+++A#d)$ 	%DJJqtJ$	%a1addlO#d)$ 	%DJJqtJ$	%r   c                 ~   t        j                  t        ||| j                  | j                  | j
                        }t        t        | j                        |j                  |   | j                  | j
                        }|j                  |   |k(  sJ t        | j                  || j                  | j
                  |      }|j                  |   |k(  sJ |j                  |j                  k(  sJ | j                  j                  |j                  f}t        d |D              r|j                  t         j                  k(  sJ t         j                  |v r1t         j                  |v r|j                  t         j                  k(  sJ t        d |D              r|j                  t         j                  k(  sdJ t         j                  |v st         j                  |v r|j                  t         j                  k(  s!J |j                  t         j                  k(  sJ t!        |j#                  |j                        |       y )Nr.   c              3   B   K   | ]  }|t         j                  k(    y wN)r   r4   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>k   s     1QqBLL 1   c              3   B   K   | ]  }|t         j                  k(    y wr=   )r   float32r>   s     r   rA   z$UpFIRDnCase.scrub.<locals>.<genexpr>o   s     1Qbjj1rB   )r   apply_along_axisr   r   r   r   r
   r   shaper   r   allr4   rD   r5   float64r   r3   )r%   r   r/   yrwant_lenydtypess          r   r0   zUpFIRDnCase.scrubb   s     a!%$))=s466{AGGDM477DIINxx~)))DFFAtww		=wwt}(((ww"(("""&&,,(1&1177bll***\\V#

f(<77bll***1&1177bjj(((]]f$(>77bmm+++77bjj(((		!''*A.r   N))__name__
__module____qualname____doc__r&   r:   r0    r   r   r   r   B   s    -%./r   r   int64rD   r4   rH   r5   TzCython implementation)cpu_onlyreasonc                   V   e Zd Z edd      d        Zej                  j                  dg d      ej                  j                  dg d      d               Zd	 Z	ej                  j                  d
ddddg dfddddg dfddddg dfddddg dfddddg dfg      d        Z
ej                  j                  dg d      ej                  j                  dg d      d               Z edd      ej                  j                  de      ej                  j                  dd      ej                  j                  d g d!      d"                             Z edd      ej                  j                  de      ej                  j                  d#e      ej                  j                  d$ e ed%d%                  d&                             Zd' Zej                  j                  d(e      d)        Zej                  j                  d* ed+gg d,eg d-            d.        Zy/)0TestUpfirdnTzenough to only test on numpy)np_onlyrV   c                     t        t        t        dgdgdd       t        t        t        g dgdd       t        t        t        dggdgdd       y )Nr(   r   )assert_raises
ValueErrorr   )r%   xps     r   test_valid_inputzTestUpfirdn.test_valid_input~   sD    j'A3Q:j'2sAq9j'QC51#q!<r   len_h)r(   r+   r,      r-   len_xc                    |j                  |      }t        j                  |      |dz     j                  d      }|j	                  |      }t        ||dd      }t        j                  ||dz  |dz
  dz  fd|      }t        ||       y )Nr+         ?r(   constant)r]   )r   xpxatsetr1   r   padr   )r%   r_   ra   r]   r   r   rK   wants           r   test_singletonzTestUpfirdn.test_singleton   s     HHUOFF1Ieqj!%%b)GGENAq!Qwwq5A:	a'78*L4 r   c                 f   t        |j                  ddg      |j                  dg      dd      }t        ||j                  ddg|j                               t        |j                  ddg      |j                  ddg      dd      }t        ||j                  g d|j                               y )Nr(   rc   r           )rm   rc   rc   )r   r   r   rH   )r%   r]   rK   s      r   test_shift_xzTestUpfirdn.test_shift_x   s    BJJ1v&

B4(8!Q?rzz3*BJJz7	
 BJJ1v&

B8(<aC2::oRZZ:HIr   z len_h, len_x, up, down, expectedr+   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(   c                    |j                  |      }t        j                  |      d   j                  d      }|j	                  ||j
                        }t        ||||      }	|j                  ||j
                        }t        |	|       y )Nr   rc   rl   )	r   re   rf   rg   r1   rH   r   r   r   )
r%   r_   ra   r   r   expectedr]   r   r   rK   s
             r   test_length_factorszTestUpfirdn.test_length_factors   ss     HHUOFF1IaLR GGEG,Aq"d#::hbjj:98$r   r   rS   zdown, want_len))r+   i  )rp   i  )O      c                 r   t         j                  j                  d      }d}t        t         |      }|j	                  |      j                  |      }|t         j                  t         j                  fv r|d|j	                  |      z  z  }t        ||      }|j                  ||      }|j                  t        dd|z  d            }	|j                  t        ||	d	|            }
t        |	|d	|
      }|j                  |fk(  sJ |
j                  d   |j                  d   k(  sJ t        |
|dd       y )Nr   i'  r*   rl      rc   hamming)windowr(   )r   r   r   gHz>atolrtol)r   r"   r#   getattrr2   r3   r4   r5   r   r	   r   r   rF   r   )r%   r   rJ   r   r]   random_stater9   np_dtyper   r   ylrK   s               r   test_vs_convolvezTestUpfirdn.test_vs_convolve   s    yy,,R02u%t$++H5bmm44l((...AE"JJqJ&JJvb"t)I>?ZZaAt45AqQT*ww8+%%%xx{aggaj(((ADt4r   rE   r!   r   )rc   r*   zup, down)r(   r(   )r+   r+   )r,   r+   )r+   r,   c                 *     t        ||||              y r=   )r   )r%   r!   r   r   r   r]   s         r   test_vs_naive_deltazTestUpfirdn.test_vs_naive_delta   s    
 	*Ba)+r   h_dtypezp_max, q_max)r)   d   c                 H    | j                  ||||      }|D ]	  } |         y r=   )_random_factors)r%   r!   r   p_maxq_maxr]   teststests           r   test_vs_naivezTestUpfirdn.test_vs_naive   s.     $$UE7GD 	DF	r   c           	         d}d}t         j                  j                  d      }g }t        |      D ]  }	||kD  r|nd}
||kD  r|nd}|j	                  |      |
z   }|j	                  |      |z   }|j	                  |      dz   }t        j
                  |j	                  |            }|j                  |      }|t        u r|d|j	                  |      z  z  }|j                  t        ||||              |S )Nr,      r   r(   r*   )
r   r"   r#   r7   randintr    r3   complexappendr   )r%   r   r   r   r!   n_rep	longest_hr~   r   _p_addq_addpqr_   r   s                   r   r   zTestUpfirdn._random_factors   s    	yy,,R0u 	8A"U]EE"U]EE$$U+e3A$$U+e3A !((3a7El2259:A!A'!R,..u555LLQ1g67	8  r   modec                 R   t        j                  g dt         j                        }d\  }}t        ||||      }|j                  |      }|j                  |      }|dk(  r|j                  g d      }n|dk(  r|j                  g d      }n|d	k(  r|j                  g d
      }n|dk(  r|d   |d   z
  |j                  d   dz
  z  }|d   |j                  | dd|j                        |z  z   }	|d   |j                  d|dz   |j                        |z  z   }
t        |	      j                  } ||	||
f      }n>t        j                  t        j                  |      ||f|      }|j                  |      }|j                  ||j                        }t        ||       y)z@Test vs. manually computed results for modes not in numpy's pad.)r(   r+   r,   r(   rl   )ro   ro   nprenpostr   antisymmetric)g      @r(   rM   rM   r(   r+   r,   r(   rM   r   r   rM   r(   r+   antireflect)rc   r+   r,   r(   rM   r   r(   r+   r,   r(   rM   r   r(   r+   r,   r(   smooth)g      r   r   rM   r   r(   r+   r,   r(   rM   r   iiilinerM   r   r(   r   N)
r   r   rH   r   rF   r6   r   concatrh   r   )r%   r   r]   r   r   r   rK   
y_expected	lin_slopeleftrightr   s               r   test_extensionszTestUpfirdn.test_extensions   s    JJ|2::6ead%d;JJqMJJqM?"JLJ]"DFJXNPJV^21!''!*q.9IQ4"))TE1arzz)BYNNDbEBIIa"**IE	QQE$T*11Fq% 01J

1e}4HJJ/JZZ
"**Z=
:&r   zsize, h_len, mode, dtype   )r`   r-      )rD   rH   r4   r5   c                    t        t        |      }t        ||      }t        j                  j                  d      }|j	                  |      j                  |      }	|dv r|	d|j	                  |      z  z  }	t        j                  dd|z   |	j                  j                        }
|j                  |	|      }	|j                  |
      }
t        |
|	dd|      }|dz
  }|dv r#t        t        j                  |	      |||      }n+t        j                  t        j                  |	      ||	      }|j                  |      }t        |
|ddd
      }|||  }|j                  |      j                  dz  x}}t        ||||       y )Nr-   )r4   r5   r*   r(   rl   )r   r   r   )r   r   r   r   r   r   rd   g      Y@rz   )r}   r   r"   r#   r2   r3   r6   realr   r   r   r   rh   finfoepsr   )r%   r9   h_lenr   r   r]   dtype_npdtype_xpr~   r   r   rK   npadxpadypadr   r{   r|   s                     r   
test_modeszTestUpfirdn.test_modes  s[    2u%2u%yy,,Q/t$++H5//l((...AIIaU!&&,,7JJqJ)JJqMAqQQT2qyEERZZ]TMD66"**Q-D9Dzz$q$11:>$u%
hhx(,,s22t:Dt<r   N)rN   rO   rP   skip_xp_backendsr^   pytestmarkparametrizerj   rn   rs   r   _UPFIRDN_TYPESr   listr   r   r   r   r   r   rR   r   r   rX   rX   {   sg    d+IJ= K=
 [[Wo6[[Wo6! 7 7!J [[?	
Aq!\"	
Aq!_%	
Aq!_%	
Aq!_%	
B1+,B %% [[K [[- 0 
55( d+=>[[Y7[[S(+[[Z)IJ, K , 8 ?, d+=>[[Y7[[Y7[[^!')Y"?@BB 8 8 ?

0 [[V^4' 5'< [["C=		
==r   rX   c                 >    d}d}d}d}t        ||||      }|dk(  sJ y )Ni  i i@  i  i6S)r
   )r]   r_   in_lenr   r   out_lens         r   test_output_len_long_inputr   6  s8    
 EF	BD%T2G hr   r   )numpyr   	itertoolsr   r   r   r[   
scipy._libr   re   scipy._lib._array_apir   r   scipy.signalr   r	   scipy.signal._upfirdnr
   r   scipy.signal._upfirdn_applyr   r   r   r   r   r   rX   r   rR   r   r   <module>r      s   F   *  - ) = 1;;// 
3/ 3/l L 4(?@w= w= Aw=t 4(?@ Ar   