
    -ii2                     0   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mZmZm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 ej        j        ZddZ G d d          ZdZ ee           G d d                      Z ee          d             Z dS )    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_test   c                 Z   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        e/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   7   s    
 	
1A

1A
(3q66B;
(
(CC"I
+a

fff
%&L{3q663q662t'L'L&L
MCJ    c                   ,    e Zd ZdZdddZd ZddZdS )	UpFIRDnCasezTest _UpFIRDn objectNxpc                    |t           }|| _        || _        t          j        |          | _        || _        t          j                            d          | _	        || _
        d S )N   )	np_compatr   r   r   
atleast_1dr   x_dtyperandomRandomStaterngr$   )selfr   r   r   r)   r$   s         r   __init__zUpFIRDnCase.__init__F   sT    :B	q!!9((,,r    c                 2   |                      t          j        d| j                             |                      t          j        d| j                             | j                            d                              | j                  }| j        t          j        t          j        fv r |d| j                            d          z  z  }|                      |           |                      t          j	        d                              | j                             t          | j                  rd S d} | j        j        |                     | j                  }| j        t          j        t          j        fv r|d | j        j        | z  z  }t          t          |                    D ]}|                      ||           |d d d d ddd df         j        }t          t          |                    D ]}|                      ||           d S )Nr   
                 ?)         axisr2   r3   )scrubr   onesr)   r,   randnastype	complex64
complex128aranger	   r$   ranger   T)r-   r   sizer6   s       r   __call__zUpFIRDnCase.__call__P   s   

271dl++,,,

272t|,,---HNN2%%dl33<BL"-888dhnnR((((A

1

29R==''5566647 	FDHND!((66<BL"-888ndhnd+++A#d))$$ 	% 	%DJJqtJ$$$$aaa1addlO#d))$$ 	% 	%DJJqtJ$$$$	% 	%r    c                    | j         }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        |j        k    sJ nt          j        |v r!t          j        |v r|j        |j        k    sJ nmt          d |D                       r|j        |j        k    sJ nAt          j        |v st          j        |v r|j        |j        k    sJ n|j        |j        k    sJ |                    ||j                  }t%          ||           d S )Nr5   c              3   6   K   | ]}|t           j        k    V  d S N)r   r;   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>u   s)      11QqBL 111111r    c              3   6   K   | ]}|t           j        k    V  d S rE   )r   float32rF   s     r   rI   z$UpFIRDnCase.scrub.<locals>.<genexpr>y   s(      11Qbj111111r    r   )r$   r   apply_along_axisr   r   r   r   r   r   shaper   r   r   allr;   rK   r<   float64r   )r-   r   r6   r$   yrwant_lenydtypess           r   r7   zUpFIRDnCase.scrubj   s   W a!%$)= =s46{{AGDM47DINNx~))))BJJtv&&

1tw	  wt}((((w"(""""&,(11&11111 		)7bl*****\V##
f(<(<7bl*****11&11111 	)7bj(((((]f$$(>(>7bm+++++7bj((((ZZ!'Z**Ar    )rB   )__name__
__module____qualname____doc__r.   rA   r7    r    r   r"   r"   D   sY        37     % % %4     r    r"   int64rK   r;   rP   r<   c                   v   e Zd Z edd          d             Zej                            dg d          ej                            dg d          d                         Zd	 Z	e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                            dg d          ej                            dg d          d                         Zej                            de          ej                            dd          ej                            dg d           d!                                     Zej                            de          ej                            d"e          ej                            d# e ed$d$                              d%                                     Zd& Zej                            d'e          d(             Zej                            d) ed*gg d+eg d,                    d-             Zd.S )/TestUpfirdnTzenough to only test on numpy)np_onlyreasonc                     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           d S )Nr   r   )assert_raises
ValueErrorr   )r-   r$   s     r   test_valid_inputzTestUpfirdn.test_valid_input   s\    j'A3Q:::j'2sAq999j'QC51#q!<<<<<r    len_h)r   r2   r3      r4   len_xc                 D   |                     |          }t          j        |          |dz                               d          }|                    |          }t          ||dd          }t          j        ||dz  |dz
  dz  fd|          }t          ||           d S )Nr2         ?r   constantr#   )r   xpxatsetr8   r   padr   )r-   rd   rf   r$   r   r   rS   wants           r   test_singletonzTestUpfirdn.test_singleton   s     HHUOOF1IIeqj!%%b))GGENNAq!Qwq5A:	a'78*LLL4     r    c                    t          |                    ddg          |                    dg          dd          }t          ||                    ddg|j                             t          |                    ddg          |                    ddg          dd          }t          ||                    g d|j                             d S )Nr   rh   rL           )rq   rh   rh   )r   r   r   rP   )r-   r$   rS   s      r   test_shift_xzTestUpfirdn.test_shift_x   s    BJJ1v&&

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

B8(<(<aCC2::oooRZ:HHIIIIIr    z len_h, len_x, up, down, expectedr2   r4   )r   r   r   r   r3      )r   r   r   r   r   re   )r   r   r   r   r   )r   r   r   r   r      )r   r   r   r   r   r   r   c                 >   |                     |          }t          j        |          d                             d          }|                    ||j                  }t          ||||          }	|                    ||j                  }t          |	|           d S )Nr   rh   rL   )	r   rj   rk   rl   r8   rP   r   r   r   )
r-   rd   rf   r   r   expectedr$   r   r   rS   s
             r   test_length_factorszTestUpfirdn.test_length_factors   s     HHUOOF1IIaLR  GGEG,,Aq"d##::hbj:998$$$$$r    r   rZ   zdown, want_len))r2   i  )rt   i  )O      c                    t           j                            d          }d}t          t           |          }|                    |                              |          }|t           j        t           j        fv r|d|                    |          z  z  }t          ||          }|                    ||          }|                    t          dd|z  d                    }	|                    t          t          |          t          |	          d	|                    }
t          |	|d	|
          }|j        |fk    sJ |
j        d         |j        d         k    sJ t          |
|dd           d S )Nr&   i'  r1   rL      rh   hamming)windowr   )r   r   r   gHz>atolrtol)r   r*   r+   getattrr9   r:   r;   r<   r   r   r   r   r   rN   r   )r-   r   rR   r   r$   random_stater@   np_dtyper   r   ylrS   s               r   test_vs_convolvezTestUpfirdn.test_vs_convolve   sd    y,,R002u%%t$$++H55bm444l((....AE""JJqJ&&JJvb"t)I>>>??ZZ+A..0A!0D0DaNN
 
 AqQT***w8+%%%%x{agaj((((ADt444444r    r)   r   )rh   r1   zup, down)r   r   )r2   r2   )r3   r2   )r2   r3   c                 >     t          |||||                       d S Nr#   )r"   )r-   r)   r   r   r   r$   s         r   test_vs_naive_deltazTestUpfirdn.test_vs_naive_delta   s+     	1BaR00022222r    h_dtypezp_max, q_max)r0   d   c                 X    |                      |||||          }|D ]} |             d S r   )_random_factors)r-   r)   r   p_maxq_maxr$   teststests           r   test_vs_naivezTestUpfirdn.test_vs_naive   sH    
 $$UE7G$KK 	 	DDFFFF	 	r    c          
      :   d}d}t           j                            d          }g }	t          |          D ]}
||k    r|nd}||k    r|nd}|                    |          |z   }|                    |          |z   }|                    |          dz   }t          j        |                    |                    }|                    |          }|t          u r|d|                    |          z  z  }|	                    t          |||||                     |	S )Nr3      r&   r   r1   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qrd   r   s                    r   r   zTestUpfirdn._random_factors   s*   	y,,R00u 	? 	?A"U]]EEE"U]]EEE$$U++e3A$$U++e3A !((33a7El22599::A!!A'!!R,..u5555LLQ1g"===>>>>r    modec                    t          j        g dt           j                  }d\  }}t          ||||          }|                    |          }|                    |          }|dk    r|                    g d          }n|dk    r|                    g d          }n|d	k    r|                    g d
          }n|dk    r|d         |d         z
  |j        d         dz
  z  }|d         |                    | dd|j                  |z  z   }	|d         |                    d|dz   |j                  |z  z   }
t          |	          j        } ||	||
f          }n;t          j        t          |          ||f|          }|                    |          }|                    ||j                  }t          ||           dS )z@Test vs. manually computed results for modes not in numpy's pad.)r   r2   r3   r   rL   )rs   rs   nprenpostr   antisymmetric)g      @r   rB   rB   r   r2   r3   r   rB   r   r   rB   r   r2   antireflect)rh   r2   r3   r   rB   r   r   r2   r3   r   rB   r   r   r2   r3   r   smooth)g      r   r   rB   r   r   r2   r3   r   rB   r   iiilinerB   r   r   r   N)r   r   rP   r   rN   r=   r   concatrm   r   r   )r-   r   r$   r   r   r   rS   
y_expected	lin_slopeleftrightr   s               r   test_extensionszTestUpfirdn.test_extensions   s    J|||2:666ead%d;;;JJqMMJJqMM?""JJJL LJJ]""DDDF FJJXNNNP PJJV^^21!'!*q.9IQ4"))TE1arz)BBYNNDbEBIIa"*IEE	QQE$T**1Fq% 011JJ 1! 4 4tUm$OOOJJ//JZZ
"*Z==
:&&&&&r    zsize, h_len, mode, dtype   )re   r4      )rK   rP   r;   r<   c                    t          |          r|dk    rt          j        d           t          t          |          }t          ||          }t          j                            d          }|                    |                              |          }	|dv r|	d|                    |          z  z  }	t	          j	        dd|z   |	j
        j                  }
|                    |	|          }	|                    |
          }
t          |
|	dd|	          }|dz
  }|d
v r!t          t          |	          |||          }n$t	          j        t          |	          ||          }|                    |          }t          |
|ddd	          }|||          }|                    |          j        dz  x}}t'          ||||           d S )Nri   z&only mode='constant' supported by CuPy)r_   r4   )r;   r<   r1   r   rL   )r   r   r   )r   r   r   r   r   r   g      Y@r~   )r	   pytestskipr   r   r*   r+   r9   r:   r=   realr   r   r   r   r   rm   finfoepsr   )r-   r@   h_lenr   r   r$   dtype_npdtype_xpr   r   r   rS   npadxpadypadr   r   r   s                     r   
test_modeszTestUpfirdn.test_modes  s    2;; 	I4:--KGHHHH2u%%2u%%y,,Q//t$$++H55///l((....AIaU!&,777JJqJ))JJqMMAqQQT222qyEEE.q11DtTTTDD6+A..4@@@Dzz$q$11:>>>$u*%
hhx((,s22t:Dt<<<<<<r    N)rU   rV   rW   skip_xp_backendsrc   r   markparametrizero   rr   rw   r   _UPFIRDN_TYPESr   listr   r   r   r   r   r   rY   r    r   r]   r]      s<        d+IJJJ= = KJ=
 [Wooo66[Wooo66! ! 76 76!J J J [?	
Aq!\\\"	
Aq!___%	
Aq!___%	
Aq!___%	
B1+++,B  % % % [KKK  [- 0 0 0  
5 5  5, [Y77[S(++[Z)I)I)IJJ3 3 KJ ,+ 873 [Y77[Y77[^!T'')Y"?"?@@B B B B 87 87
  0 [V^44' ' 54'< ["CJJ===		
 	
 = = = = =r    r]   c                 J    d}d}d}d}t          ||||          }|dk    sJ d S )Ni  i i@  i  i6S)r   )r$   rd   in_lenr   r   out_lens         r   test_output_len_long_inputr   C  sD    
 EF	BD%T22G hr    r   )!r   r   	itertoolsr   r   r   ra   
scipy._libr   rj   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   r]   r   rY   r    r   <module>r      s  F           * * * * * *  - - - - - -              ; : : : : : ( ( ( ( ( ( ( ( = = = = = = = = 1 1 1 1 1 1;/ 
 
 
 
< < < < < < < <~ L 7y= y= y= y= y= y= y= y=x 7    r    