
    doi2                         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JrJrJ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  \R4                  R6                  rSS
 jr " S S5      rSr\" \5       " S S5      5       r\" \5      S 5       r g)    N)product)raises)array_api_extra)xp_assert_closearray_namespace_xp_copy_to_numpyis_cupymake_xp_test_case)numpy)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-ocr/venv/lib/python3.13/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   7   sz    
 	

1A


1A
((3q6B;
(C"I
++a
ff
%&L{3q63q62'L
MCJ    c                   6    \ rS rSrSrSS.S jrS rS	S jrSrg)
UpFIRDnCaseD   zTest _UpFIRDn objectNxpc                    Uc  [         nXl        X l        [        R                  " U5      U l        X@l        [        R                  R                  S5      U l	        XPl
        g )N   )	np_compatr   r   r   
atleast_1dr   x_dtyperandomRandomStaterngr$   )selfr   r   r   r)   r$   s         r   __init__UpFIRDnCase.__init__F   sF    :B	q!99((,r   c                 |   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        [        U R                  5      (       a  g 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   
                 ?)         axisr4   r5   )scrubr   onesr)   r,   randnastype	complex64
complex128aranger	   r$   ranger   T)r-   r   sizer8   s       r   __call__UpFIRDnCase.__call__P   s   

2771dll+,

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

1

299R=''56477HHNND!((6<<BLL"--88dhhnnd+++A#d)$DJJqJ$ %a1addlO#d)$DJJqJ$ %r   c                    U R                   n[        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                  U R                  5      UR                  U5      U 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                  UR                  :X  d   eO[        R                  U;   a1  [        R                  U;   a  UR                  UR                  :X  d   eO[        S U 5       5      (       a  UR                  UR                  :X  d   eOa[        R                   U;   d  [        R                  U;   a  UR                  UR                   :X  d   eOUR                  UR"                  :X  d   eUR                  XFR                  S9n[%        XF5        g )Nr7   c              3   F   #    U  H  o[         R                  :H  v   M     g 7fN)r   r=   .0ds     r   	<genexpr>$UpFIRDnCase.scrub.<locals>.<genexpr>u   s     1&QBLL &   !c              3   F   #    U  H  o[         R                  :H  v   M     g 7frG   )r   float32rH   s     r   rK   rL   y   s     1&Qbjj&rM   r   )r$   r   apply_along_axisr   r   r   r   r   r   shaper   r   r   allr=   rO   r>   float64r   )r-   r   r8   r$   yrwant_lenydtypess           r   r9   UpFIRDnCase.scrubj   s   WW  !%$))=s466{AGGDM477DIINxx~)))BJJtvv&

1tww		wwt}(((ww"(("""&&,,(1&11177bll***\\V#

f(<77bll***1&11177bjj(((]]f$(>77bmm+++77bjj(((ZZ''Z*r   )r   r   r,   r   r)   r$   ))	__name__
__module____qualname____firstlineno____doc__r.   rC   r9   __static_attributes__ r   r   r!   r!   D   s    37 %4r   r!   int64rO   r=   rT   r>   c                   $   \ 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\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\/ S-Q5      5      S. 5       rS/rg0)1TestUpfirdn   Tzenough to only test on numpy)np_onlyreasonc                     [        [        [        S/S/SS5        [        [        [        / S/SS5        [        [        [        S//S/SS5        g )Nr1   r   )assert_raises
ValueErrorr   )r-   r$   s     r   test_valid_inputTestUpfirdn.test_valid_input   sD    j'A3Q:j'2sAq9j'QC51#q!<r   len_h)r1   r4   r5      r6   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 )Nr4         ?r1   constantr#   )r   xpxatsetr:   r   padr   )r-   rn   rp   r$   r   r   rW   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 )Nr1   rr   rP           )r|   rr   rr   )r   r   r   rT   )r-   r$   rW   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, expectedr4   r6   )r1   r   r   r   r5      )r1   r   r1   r   r1   ro   )r1   r   r   r   r1   )r1   r   r   r1   r      )r1   r   r   r1   r   r   r1   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   rr   rP   )	r   rt   ru   rv   r:   rT   r   r   r   )
r-   rn   rp   r   r   expectedr$   r   r   rW   s
             r   test_length_factorsTestUpfirdn.test_length_factors   si     HHUOFF1IaLR GGEG,A"#::hjj:9$r   r   rb   zdown, want_len))r4   i  )r   i  )O      c                 ~   [         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                  [        [        U5      [        U	5      S	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'  r3   rP      rr   hamming)windowr1   )r   r   r   gHz>atolrtol)r   r*   r+   getattrr;   r<   r=   r>   r   r   r   r   r   rR   r   )r-   r   rV   r   r$   random_staterB   np_dtyper   r   ylrW   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+A.0A!0DaN
 AQT*ww8+%%%xx{aggaj(((Dt4r   r)   r   )rr   r3   zup, down)r1   r1   )r4   r4   )r5   r4   )r4   r5   c                 $    [        X4X!US9" 5         g Nr#   )r!   )r-   r)   r   r   r   r$   s         r   test_vs_naive_deltaTestUpfirdn.test_vs_naive_delta   s     	BaR02r   h_dtypezp_max, q_max)r2   d   c                 F    U R                  X4X!US9nU H
  nU" 5         M     g r   )_random_factors)r-   r)   r   p_maxq_maxr$   teststests           r   test_vs_naiveTestUpfirdn.test_vs_naive   s*    
 $$U7$K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                  [        XUXES95        M     U	$ )Nr5      r&   r1   r3   r#   )
r   r*   r+   r@   randintr(   r<   complexappendr!   )r-   r   r   r   r)   r$   n_rep	longest_hr   r   _p_addq_addpqrn   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Q1g=>   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OU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O1[         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.)r1   r4   r5   r1   rP   )r   r   nprenpostr   antisymmetric)g      @r1   rZ   rZ   r1   r4   r5   r1   rZ   r   r   rZ   r1   r4   antireflect)rr   r4   r5   r1   rZ   r   r1   r4   r5   r1   rZ   r   r1   r4   r5   r1   smooth)g      r   r   rZ   r   r1   r4   r5   r1   rZ   r   iiilinerZ   r   r1   r   N)r   r   rT   r   rR   r?   r   concatrw   r   r   )r-   r   r$   r   r   r   rW   
y_expected	lin_slopeleftrightr   s               r   test_extensionsTestUpfirdn.test_extensions   ss    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! 4tm$OJJ/JZZ
**Z=
&r   zsize, h_len, mode, dtype   )ro   r6      )rO   rT   r=   r>   c                    [        U5      (       a  US:w  a  [        R                  " SS9  [        [        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  [        [        U	5      XUS9nO[        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 )Nrs   z&only mode='constant' supported by CuPy)rh   r6   )r=   r>   r3   r1   rP   )r   r   r   )r   r   r   r   r   r   g      Y@r   )r	   pytestskipr   r   r*   r+   r;   r<   r?   realr   r   r   r   r   rw   finfoepsr   )r-   rB   h_lenr   r   r$   dtype_npdtype_xpr   r   r   rW   npadxpadypadr   r   r   s                     r   
test_modesTestUpfirdn.test_modes  sd    2;;4:-KKGH2u%2%yy,,Q/t$++H5//l((...AIIaU!&&,,7JJqJ)JJqMAQQT2qyEE.q1tTD66+A.@Dzz$q11:>u%
hhx(,,s22tDt<r   ra   N)r[   r\   r]   r^   skip_xp_backendsrl   r   markparametrizery   r}   r   r   _UPFIRDN_TYPESr   listr   r   r   r   r   r   r`   ra   r   r   re   re      sG    d+IJ= K=
 [[Wo6[[Wo6! 7 7!J [[?	
Aq!\"	
Aq!_%	
Aq!_%	
Aq!_%	
B1+,B %% [[K [[- 0 
55, [[Y7[[S(+[[Z)IJ3 K , 83 [[Y7[[Y7[[^!')Y"?@BB 8 8
0 [[V^4' 5'< [["C=		
==r   re   c                 <    SnSnSnSn[        XX45      nUS:X  d   eg )Ni  i i@  i  i6S)r   )r$   rn   in_lenr   r   out_lens         r   test_output_len_long_inputr   C  s4    
 EF	BD%2G hr   r   )!r   r   	itertoolsr   r   r   rj   
scipy._libr   rt   scipy._lib._array_apir   r   r   r	   r
   scipy._lib.array_api_compatr'   scipy.signalr   r   scipy.signal._upfirdnr   r   scipy.signal._upfirdn_applyr   r   r   r   r!   r   re   r   ra   r   r   <module>r      s   F   *  -  ; ( = 1;;// 
< <~ L 7y= y= y=x 7 r   