
    9i:1                        S SK rS SKJr  S SKJr  S SKrS SKJr	  S SK
JrJr  S SKJrJr  S SKJrJr  S SKJr  \R*                  R,                  rSS	 jr " S
 S5      rSr\" SSS9 " S S5      5       r\" SSS9S 5       rg)    N)product)raises)array_api_extra)xp_assert_closearray_namespace)upfirdnfirwin)_output_len_upfirdn_modes)	_pad_testc                 >   [         R                  " U 5      n [         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        _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   5   sz    
 	

1A


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)	UpFIRDnCaseB   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__D   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   sizer1   s       r   __call__UpFIRDnCase.__call__K   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 )Nr0   c              3   F   #    U  H  o[         R                  :H  v   M     g 7fN)r   r6   .0ds     r   	<genexpr>$UpFIRDnCase.scrub.<locals>.<genexpr>k   s     1&QBLL &   !c              3   F   #    U  H  o[         R                  :H  v   M     g 7fr@   )r   float32rA   s     r   rD   rE   o   s     1&Qbjj&rF   )r   apply_along_axisr   r   r   r   r
   r   shaper   r   allr6   rH   r7   float64r   r5   )r&   r   r1   yrwant_lenydtypess          r   r2   UpFIRDnCase.scrubb   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<   r2   __static_attributes__ r   r   r   r   B   s    -%./r   r   int64rH   r6   rL   r7   TzCython implementation)cpu_onlyreasonc                   L   \ rS rSr\" SSS9S 5       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      \R                  R                  S/ SQ5      S 5       5       r\" SSS9\R                  R                  S\5      \R                  R                  SS 5      \R                  R                  S!/ S"Q5      S# 5       5       5       5       r\" SSS9\R                  R                  S\5      \R                  R                  S$\5      \R                  R                  S%\" \" S&S&5      5      5      S' 5       5       5       5       rS( r\R                  R                  S)\5      S* 5       r\R                  R                  S+\" S,// S-Q\/ S.Q5      5      S/ 5       rS0rg1)2TestUpfirdn{   Tzenough to only test on numpy)np_onlyr]   c                     [        [        [        S/S/SS5        [        [        [        / S/SS5        [        [        [        S//S/SS5        g )Nr*   r   )assert_raises
ValueErrorr   )r&   xps     r   test_valid_inputTestUpfirdn.test_valid_input~   sD    j'A3Q:j'2sAq9j'QC51#q!<r   len_h)r*   r-   r.      r/   len_xc                    UR                  U5      n[        R                  " U5      US-     R                  S5      nUR	                  U5      n[        XESS5      n[        R                  " XQS-  US-
  S-  4SUS9n[        Xg5        g )Nr-         ?r*   constant)re   )r   xpxatsetr3   r   padr   )r&   rh   rj   re   r   r   rO   wants           r   test_singletonTestUpfirdn.test_singleton   sy     HHUOFF1Ieqj!%%b)GGENA!QwwqA:	a'78*L r   c                 V   [        UR                  SS/5      UR                  S/5      SS5      n[        X!R                  SS/UR                  S95        [        UR                  SS/5      UR                  SS/5      SS5      n[        X!R                  / SQUR                  S95        g )Nr*   rl   r           )rw   rl   rl   )r   r   r   rL   )r&   re   rO   s      r   test_shift_xTestUpfirdn.test_shift_x   s    BJJ1v&

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

B8(<aC::oRZZ:HIr   z len_h, len_x, up, down, expectedr-   r/   )r*   r   r   r   r.      )r*   r   r*   r   r*   ri   )r*   r   r   r   r*   )r*   r   r   r*   r      )r*   r   r   r*   r   r   r*   c                    UR                  U5      n[        R                  " U5      S   R                  S5      nUR	                  X&R
                  S9n[        XxX45      n	UR                  XVR
                  S9n[        X5        g )Nr   rl   rv   )	r   rn   ro   rp   r3   rL   r   r   r   )
r&   rh   rj   r   r   expectedre   r   r   rO   s
             r   test_length_factorsTestUpfirdn.test_length_factors   si     HHUOFF1IaLR GGEG,A"#::hjj:9$r   r   rZ   zdown, want_len))r-   i  )r{   i  )O      c                 X   [         R                  R                  S5      nSn[        [         U5      nUR	                  U5      R                  U5      nU[         R                  [         R                  4;   a  USUR	                  U5      -  -  n[        XC5      nUR                  XS9nUR                  [        SSU-  SS95      n	UR                  [        XS	U5      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  g )Nr    i'  r,   rv      rl   hamming)windowr*   )r   r   r   gHz>atolrtol)r   r#   r$   getattrr4   r5   r6   r7   r   r	   r   r   rJ   r   )r&   r   rN   r   re   random_stater;   np_dtyper   r   ylrO   s               r   test_vs_convolveTestUpfirdn.test_vs_convolve   s    yy,,R02u%t$++H5bmm44l((...A"JJqJ&JJvb"t)I>?ZZaAt45AQT*ww8+%%%xx{aggaj(((Dt4r   rI   r"   r   )rl   r,   zup, down)r*   r*   )r-   r-   )r.   r-   )r-   r.   c                 &    [        X4X!5      " 5         g r@   )r   )r&   r"   r   r   r   re   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_maxre   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$   r9   randintr!   r5   complexappendr   )r&   r   r   r   r"   n_rep	longest_hr   r   _p_addq_addpqrh   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                 .   [         R                  " / SQ[         R                  S9nSu  pE[        X4XQS9nUR                  U5      nUR                  U5      nUS:X  a  UR                  / SQ5      nGOUS:X  a  UR                  / SQ5      nOUS	:X  a  UR                  / S
Q5      nOUS:X  a  US   US   -
  UR                  S   S-
  -  nUS   UR                  U* SSUR                  S9U-  -   n	US   UR                  SUS-   UR                  S9U-  -   n
[        U	5      R                  nU" XU
45      nO<[         R                  " [         R                  " U5      XE4US9nUR                  U5      nUR                  XrR                  S9n[        Xg5        g)z@Test vs. manually computed results for modes not in numpy's pad.)r*   r-   r.   r*   rv   )rz   rz   nprenpostr   antisymmetric)g      @r*   rR   rR   r*   r-   r.   r*   rR   r   r   rR   r*   r-   antireflect)rl   r-   r.   r*   rR   r   r*   r-   r.   r*   rR   r   r*   r-   r.   r*   smooth)g      r   r   rR   r   r*   r-   r.   r*   rR   r   iiilinerR   r   r*   r   N)
r   r   rL   r   rJ   r8   r   concatrq   r   )r&   r   re   r   r   r   rO   
y_expected	lin_slopeleftrightr   s               r   test_extensionsTestUpfirdn.test_extensions   su    JJ|2::6a%;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% 01J

1}4HJJ/JZZ
**Z=
&r   zsize, h_len, mode, dtype   )ri   r/      )rH   rL   r6   r7   c                    [        [        U5      n[        XT5      n[        R                  R                  S5      nUR	                  U5      R                  U5      n	US;   a  U	SUR	                  U5      -  -  n	[        R                  " SSU-   U	R                  R                  S9n
UR                  XS9n	UR                  U
5      n
[        XSSUS9nUS-
  nUS;   a   [        [        R                  " U	5      XUS9nO)[        R                  " [        R                  " U	5      XS	9nUR                  U5      n[        XSSS
S9nXU*  nUR                  U5      R                  S-  =nn[        XUUS9  g )Nr/   )r6   r7   r,   r*   rv   )r   r   r   )r   r   r   r   r   r   rm   g      Y@r   )r   r   r#   r$   r4   r5   r8   realr   r   r   r   rq   finfoepsr   )r&   r;   h_lenr   r   re   dtype_npdtype_xpr   r   r   rO   npadxpadypadr   r   r   s                     r   
test_modesTestUpfirdn.test_modes  sK    2u%2%yy,,Q/t$++H5//l((...AIIaU!&&,,7JJqJ)JJqMAQQT2qyEERZZ]MD66"**Q-9Dzz$q11:>u%
hhx(,,s22tDt<r   rY   N)rS   rT   rU   rV   skip_xp_backendsrf   pytestmarkparametrizers   rx   r~   r   _UPFIRDN_TYPESr   listr   r   r   r   r   r   rX   rY   r   r   r_   r_   {   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   r_   c                 <    SnSnSnSn[        XX45      nUS:X  d   eg )Ni  i i@  i  i6S)r
   )re   rh   in_lenr   r   out_lens         r   test_output_len_long_inputr   6  s4    
 EF	BD%2G hr   r   )numpyr   	itertoolsr   r   r   rc   
scipy._libr   rn   scipy._lib._array_apir   r   scipy.signalr   r	   scipy.signal._upfirdnr
   r   scipy.signal._upfirdn_applyr   r   r   r   r   r   r_   r   rY   r   r   <module>r      s   F   *  - ) = 1;;// 
3/ 3/l L 4(?@w= w= Aw=t 4(?@ Ar   