
    (ph;,                         S SK rS SKJr  S SKJr  S SKJr  S SKrS SK	J
r
Jr  S SKJrJr  S SKJr  SS jr " S	 S
5      r\\R(                  \R*                  \\4r " S S5      rS rg)    N)product)xp_assert_close)raises)upfirdnfirwin)_output_len_upfirdn_modes)	_pad_testc                    [         R                  " U5      n[         R                  " [        U 5      U-  U R                  5      nXSSU2'   [         R
                  " X5      SSU2   S[        [        U5      [        U 5      X#5       nU$ )zhNaive 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        R/var/www/html/venv/lib/python3.13/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   /   sm    
 	

1A
((3q6B;
(C"I
++a
ff
%&L{3q63q62'L
MCJ    c                   .    \ rS rSrSrS rS rSS jrSrg)	UpFIRDnCase;   zTest _UpFIRDn objectc                     Xl         X l        [        R                  " U5      U l        X@l        [        R                  R                  S5      U l        g )N   )	r   r   r   
atleast_1dr   x_dtyperandomRandomStaterng)selfr   r   r   r    s        r   __init__UpFIRDnCase.__init__=   s7    	q!99((,r   c                 F   U R                  [        R                  " SU R                  5      5        U R                  [        R                  " SU R                  5      5        U R                  R                  S5      R                  U R                  5      nU R                  [        R                  [        R                  4;   a!  USU R                  R                  S5      -  -  nU R                  U5        U R                  [        R                  " S5      R                  U R                  5      5        SnU R                  R
                  " U6 R                  U R                  5      nU R                  [        R                  [        R                  4;   a  USU R                  R
                  " U6 -  -  n[        [        U5      5       H  nU R                  XS9  M     US S 2S S S2SS S24   R                  n[        [        U5      5       H  nU R                  XS9  M     g )N   
                 ?)         axisr+   r,   )scrubr   onesr    r#   randnastype	complex64
complex128arangeranger   T)r$   r   sizer/   s       r   __call__UpFIRDnCase.__call__D   sx   

2771dll+,

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

1

299R=''56HHNND!((6<<BLL"--88dhhnnd+++A#d)$DJJqJ$ %a1addlO#d)$DJJqJ$ %r   c                    [         R                  " [        X!U R                  U R                  U R
                  5      n[        [        U R                  5      UR                  U   U R                  U R
                  5      nUR                  U   U:X  d   e[        U R                  XR                  U R
                  US9nUR                  U   U:X  d   eUR                  UR                  :X  d   eU R                  R                  UR                  4n[        S U 5       5      (       a!  UR                  [         R                  :X  d   eO[         R                  U;   a5  [         R                  U;   a!  UR                  [         R                  :X  d   eO[        S U 5       5      (       a!  UR                  [         R                  :X  d   eOi[         R                  U;   d  [         R                  U;   a!  UR                  [         R                  :X  d   eO UR                  [         R                  :X  d   e[!        UR#                  UR                  5      U5        g )Nr.   c              3   F   #    U  H  o[         R                  :H  v   M     g 7fN)r   r4   .0ds     r   	<genexpr>$UpFIRDnCase.scrub.<locals>.<genexpr>d   s     1&QBLL &   !c              3   F   #    U  H  o[         R                  :H  v   M     g 7fr>   )r   float32r?   s     r   rB   rC   h   s     1&Qbjj&rD   )r   apply_along_axisr   r   r   r   r   r   shaper   r   allr4   rF   r5   float64r   r3   )r$   r   r/   yrwant_lenydtypess          r   r0   UpFIRDnCase.scrub[   s     !%$))=s466{AGGDM477DIINxx~)))DFFAww		=wwt}(((ww"(("""&&,,(1&11177bll***\\V#

f(<77bll***1&11177bjj(((]]f$(>77bmm+++77bjj(((		!''*A.r   )r   r   r#   r   r    N))	__name__
__module____qualname____firstlineno____doc__r%   r:   r0   __static_attributes__ r   r   r   r   ;   s    -%./r   r   c                   "   \ rS rSrS r\R                  R                  S/ SQ5      \R                  R                  S/ SQ5      S 5       5       rS r	\R                  R                  SS	S	S
S	/ SQ4S	SSS/ SQ4S	SSS/ SQ4SS	SS	/ SQ4SSSS
/ SQ4/5      S 5       r
\R                  R                  S/ SQ5      S 5       r\R                  R                  S\5      \R                  R                  SS5      \R                  R                  S/ SQ5      S 5       5       5       r\R                  R                  S\5      \R                  R                  S\5      \R                  R                  S\" \" S S 5      5      5      S! 5       5       5       rS" r\R                  R                  S#\5      S$ 5       r\R                  R                  S%\" S&// S'Q\\R*                  \R,                  \R.                  \R0                  /5      5      S( 5       rS)rg*)+TestUpfirdnt   c                     [        [        [        S/S/SS5        [        [        [        / S/SS5        [        [        [        S//S/SS5        g )Nr(   r   )assert_raises
ValueErrorr   )r$   s    r   test_valid_inputTestUpfirdn.test_valid_inputv   sD    j'A3Q:j'2sAq9j'QC51#q!<r   len_h)r(   r+   r,      r-   len_xc                     [         R                  " U5      nSX1S-  '   [         R                  " U5      n[        X4SS5      n[         R                  " XAS-  US-
  S-  4S5      n[        XV5        g )N      ?r+   r(   constant)r   r   r1   r   padr   )r$   r`   rb   r   r   rM   wants          r   test_singletonTestUpfirdn.test_singleton{   sa     HHUO1*GGENA!Qvva1*uqyQ&67D r   c                     [        SS/S/SS5      n[        U[        R                  " SS/5      5        [        SS/SS/SS5      n[        U[        R                  " / SQ5      5        g )Nr(   rd           )rk   rd   rd   )r   r   r   r   )r$   rM   s     r   test_shift_xTestUpfirdn.test_shift_x   sZ    QFRD!Q'2::sCj12QFRHa+2::o67r   z len_h, len_x, up, down, expectedr+   r-   )r(   r   r   r   r,      )r(   r   r(   r   r(   ra   )r(   r   r   r   r(   )r(   r   r   r(   r      )r(   r   r   r(   r   r   r(   c                     [         R                  " U5      nSUS'   [         R                  " U5      n[        XgX45      n[         R                  " U[         R
                  S9n[        X5        g )Nrd   r   r   )r   r   r1   r   r   rJ   r   )	r$   r`   rb   r   r   expectedr   r   rM   s	            r   test_length_factorsTestUpfirdn.test_length_factors   sO     HHUO!GGENA"#::hbjj9$r   zdown, want_len))r+   i  )ro   i  )O      c                 8   [         R                  R                  S5      n[        [         R                  [         R
                  [        [        4nSnU H  nUR                  U5      R                  U5      nU[         R
                  [         R                  4;   a  USUR                  U5      -  -  n[        SSU-  SS9n[        XxSU5      n	[        XSUS	9n
U
R                  U4:X  d   eU	R                  S
   U
R                  S
   :X  d   e[        XSSS9  M     g )Nr   i'  r*      rd   hamming)windowr(   )r   r   r   gHz>atolrtol)r   r!   r"   intrF   r4   floatcomplexr2   r3   r5   r   r   r   rH   r   )r$   r   rL   random_state	try_typesr9   r   r   r   ylrM   s              r   test_vs_convolveTestUpfirdn.test_vs_convolve   s     yy,,R0"**bllE7C	E""4(//6Ar}}55R,,,T222r29Y7AqQ-B.A77xk)))88A;!''!*,,,B48 r   r    r   )rd   r*   zup, down)r(   r(   )r+   r+   )r,   r+   )r+   r,   c                 &    [        X4X!5      " 5         g r>   )r   )r$   r    r   r   r   s        r   test_vs_naive_deltaTestUpfirdn.test_vs_naive_delta   s     	Ba)+r   h_dtypezp_max, q_max)r)   d   c                 H    U R                  X4X!5      nU H
  nU" 5         M     g r>   )_random_factors)r$   r    r   p_maxq_maxteststests          r   test_vs_naiveTestUpfirdn.test_vs_naive   s%    
 $$U7DDF r   c           	         SnSn[         R                  R                  S5      n/ n[        U5       H  n	X:  a  UOSn
X!:  a  UOSnUR	                  U5      U
-   nUR	                  U5      U-   nUR	                  U5      S-   n[         R
                  " UR	                  U5      5      nUR                  U5      nU[        L a  USUR	                  U5      -  -  nUR                  [        XX5      5        M     U$ )Nr,      r   r(   r*   )
r   r!   r"   r7   randintr   r3   r   appendr   )r$   r   r   r   r    n_rep	longest_hr   r   _p_addq_addpqr`   r   s                   r   r   TestUpfirdn._random_factors   s    	yy,,R0uA"]EE"]EE$$U+e3A$$U+e3A !((3a7El2259:A!A'!R,..u555LLQ167   r   modec                 P   [         R                  " / SQ[        S9nSu  p4[        X#XAS9nUS:X  a  [         R                  " / SQ5      nOUS:X  a  [         R                  " / SQ5      nOUS	:X  a  [         R                  " / S
Q5      nOUS:X  ax  US   US   -
  [        U5      S-
  -  nUS   [         R                  " U* SS5      U-  -   nUS   [         R                  " SUS-   5      U-  -   n	[         R                  " XU	45      nO[         R                  " X#U4US9n[        XV5        g)z@Test vs. manually computed results for modes not in numpy's pad.)r(   r+   r,   r(   rq   )rn   rn   nprenpostr   antisymmetric)g      @r(   rP   rP   r(   r+   r,   r(   rP   r   r   rP   r(   r+   antireflect)rd   r+   r,   r(   rP   r   r(   r+   r,   r(   rP   r   r(   r+   r,   r(   smooth)g      r   r   rP   r   r(   r+   r,   r(   rP   r   iiilinerP   r   r(   r   N)
r   arrayr   r
   r   r   r6   concatenaterf   r   )
r$   r   r   r   r   rM   
y_expected	lin_slopeleftrights
             r   test_extensionsTestUpfirdn.test_extensions   s    HH\/a%;?"JLJ]"DFJXNPJV^21#a&1*5IQ4"))TE1a09<<DbEBIIa3i??E%(89J%=t<J&r   zsize, h_len, mode, dtype   )ra   r-      c                 >   [         R                  R                  S5      nUR                  U5      R	                  U5      nU[         R
                  [         R                  4;   a  USUR                  U5      -  -  n[         R                  " SSU-   UR                  R                  S9n[        XvSSUS9nUS-
  n	US;   a  [        XiXS9n
O[         R                  " XiUS9n
[        XzSSS	S9nXU	*  n[         R                  " U5      R                  S
-  =p[        XXS9  g )Nr-   r*   r(   rq   )r   r   r   )r   r   r   r   r   r   re   g      Y@r{   )r   r!   r"   r2   r3   r4   r5   r6   realr   r   r
   rf   finfoepsr   )r$   r9   h_lenr   r   r   r   r   rM   npadxpadypadr   r|   r}   s                  r   
test_modesTestUpfirdn.test_modes   s     yy,,Q/t$++E2R\\2==11l((...AIIaU!&&,,7AQQT2qyEEQAD66!-Dq11:>u%
hhuo))C//D<r   rW   N)rQ   rR   rS   rT   r^   pytestmarkparametrizerh   rl   rs   r   _UPFIRDN_TYPESr   listr   r   r   r	   r   r   rF   rJ   r4   r5   r   rV   rW   r   r   rY   rY   t   s(   =
 [[Wo6[[Wo6! 7 7!8 [[?	
Aq!\"	
Aq!_%	
Aq!_%	
Aq!_%	
B1+,B %% [[- 0 
9
9$ [[Y7[[S(+[[Z)IJ, K , 8, [[Y7[[Y7[[^!')Y"?@BB 8 8
0 [[V^4' 5'. [["CZZR\\2==A		
==r   rY   c                  <    Sn SnSnSn[        XX#5      nUS:X  d   eg )Ni  i i@  i  i6S)r   )r`   in_lenr   r   out_lens        r   test_output_len_long_inputr     s4     EF	BD%2G hr   r   )numpyr   	itertoolsr   scipy._lib._array_apir   r   r   r\   scipy.signalr   r   scipy.signal._upfirdnr   r	   scipy.signal._upfirdn_applyr
   r   r   r~   rF   r4   r   r   r   rY   r   rW   r   r   <module>r      s\   F   1 *  ( = 1	3/ 3/l rzz2<<@^= ^=Br   