
    _Mh;,                         d dl Zd dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
mZ d dlmZmZ d dlmZ dd	Z G d
 d          Zeej        ej        eefZ G d d          Zd ZdS )    N)product)xp_assert_close)raises)upfirdnfirwin)_output_len_upfirdn_modes)	_pad_test   c                 2   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/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   /   s    
 	
1A
(3q66B;
(
(CC"I
+a

fff
%&L{3q663q662t'L'L&L
MCJ    c                   &    e Zd ZdZd Zd ZddZdS )UpFIRDnCasezTest _UpFIRDn objectc                     || _         || _        t          j        |          | _        || _        t          j                            d          | _        d S )N   )	r   r   r   
atleast_1dr   x_dtyperandomRandomStaterng)selfr   r   r   r    s        r   __init__zUpFIRDnCase.__init__=   sC    	q!!9((,,r   c                    |                      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                             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   
                 ?)         axisr)   r*   )scrubr   onesr    r#   randnastype	complex64
complex128arangeranger   T)r$   r   sizer-   s       r   __call__zUpFIRDnCase.__call__D   s   

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

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

1

29R==''55666DHND!((66<BL"-888ndhnd+++A#d))$$ 	% 	%DJJqtJ$$$$aaa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    sJ nt           j        |v r&t           j        |v r|j
        t           j        k    sJ n|t          d |D                       r|j
        t           j        k    sJ nKt           j        |v st           j        |v r|j
        t           j        k    sJ n|j
        t           j        k    sJ t!          |                    |j
                  |           d S )Nr,   c              3   6   K   | ]}|t           j        k    V  d S N)r   r2   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>d   s)      11QqBL 111111r   c              3   6   K   | ]}|t           j        k    V  d S r<   )r   float32r=   s     r   r@   z$UpFIRDnCase.scrub.<locals>.<genexpr>h   s(      11Qbj111111r   )r   apply_along_axisr   r   r   r   r   r   shaper   r   allr2   rB   r3   float64r   r1   )r$   r   r-   yrwant_lenydtypess          r   r.   zUpFIRDnCase.scrub[   s    a!%$)= =s46{{AGDM47DINNx~))))DFAtw	===wt}((((w"(""""&,(11&11111 		)7bl*****\V##
f(<(<7bl*****11&11111 	)7bj(((((]f$$(>(>7bm+++++7bj((((		!'**A.....r   N)r9   )__name__
__module____qualname____doc__r%   r8   r.    r   r   r   r   ;   sL        - - -% % %./ / / / / /r   r   c                   6   e Zd Z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          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ej        ej        ej        ej        g                    d'             Zd(S ))TestUpfirdnc                     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$   s    r   test_valid_inputzTestUpfirdn.test_valid_inputv   s\    j'A3Q:::j'2sAq999j'QC51#q!<<<<<r   len_h)r   r)   r*      r+   len_xc                     t          j        |          }d||dz  <   t          j        |          }t          ||dd          }t          j        ||dz  |dz
  dz  fd          }t          ||           d S )N      ?r)   r   constant)r   r   r/   r   padr   )r$   rV   rX   r   r   rI   wants          r   test_singletonzTestUpfirdn.test_singleton{   sy     HUOO%1*GENNAq!Qva%1*uqyQ&67DD4     r   c                     t          ddgdgdd          }t          |t          j        ddg                     t          ddgddgdd          }t          |t          j        g d                     d S )Nr   rZ           )r`   rZ   rZ   )r   r   r   r   )r$   rI   s     r   test_shift_xzTestUpfirdn.test_shift_x   sx    QFRD!Q''2:sCj11222QFRHa++2:ooo6677777r   z len_h, len_x, up, down, expectedr)   r+   )r   r   r   r   r*      )r   r   r   r   r   rW   )r   r   r   r   r   )r   r   r   r   r      )r   r   r   r   r   r   r   c                     t          j        |          }d|d<   t          j        |          }t          ||||          }t          j        |t           j                  }t          ||           d S )NrZ   r   r   )r   r   r/   r   r   rF   r   )	r$   rV   rX   r   r   expectedr   r   rI   s	            r   test_length_factorszTestUpfirdn.test_length_factors   sf     HUOO!GENNAq"d##:hbj9998$$$$$r   zdown, want_len))r)   i  )rc   i  )O      c                 R   t           j                            d          }t          t           j        t           j        t          t          f}d}|D ]}|                    |          	                    |          }|t           j        t           j
        fv r|d|                    |          z  z  }t          dd|z  d          }t          ||d|          }	t          ||d|	          }
|
j        |fk    sJ |	j        d
         |
j        d
         k    sJ t          |	|
dd           d S )Nr   i'  r(      rZ   hamming)windowr   )r   r   r   gHz>atolrtol)r   r!   r"   intrB   r2   floatcomplexr0   r1   r3   r   r   r   rD   r   )r$   r   rH   random_state	try_typesr7   r   r   r   ylrI   s              r   test_vs_convolvezTestUpfirdn.test_vs_convolve   s*    y,,R00"*blE7C	 
	9 
	9E""4((//66Ar}555R,,,T2222r29Y777Aq!Q--B1...A7xk))))8A;!'!*,,,,B488888
	9 
	9r   r    r   )rZ   r(   zup, down)r   r   )r)   r)   )r*   r)   )r)   r*   c                 :     t          ||||                       d S 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                 T    |                      ||||          }|D ]} |             d S r<   )_random_factors)r$   r    r{   p_maxq_maxteststests          r   test_vs_naivezTestUpfirdn.test_vs_naive   sC    
 $$UE7GDD 	 	DDFFFF	 	r   c           	      6   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 )Nr*      r   r   r(   )
r   r!   r"   r5   randintr   r1   rs   appendr   )r$   r   r   r{   r    n_rep	longest_hrt   r   _p_addq_addpqrV   r   s                   r   r~   zTestUpfirdn._random_factors   s%   	y,,R00u 	8 	8A"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667777r   modec                    t          j        g dt                    }d\  }}t          ||||          }|dk    rt          j        g d          }n|dk    rt          j        g d          }n|d	k    rt          j        g d
          }n|dk    r|d         |d         z
  t          |          dz
  z  }|d         t          j        | dd          |z  z   }|d         t          j        d|dz             |z  z   }	t          j        |||	f          }nt          j        |||f|          }t          ||           dS )z@Test vs. manually computed results for modes not in numpy's pad.)r   r)   r*   r   re   )rb   rb   nprenpostr   antisymmetric)g      @r   r9   r9   r   r)   r*   r   r9   r   r   r9   r   r)   antireflect)rZ   r)   r*   r   r9   r   r   r)   r*   r   r9   r   r   r)   r*   r   smooth)g      r   r   r9   r   r   r)   r*   r   r9   r   iiiliner9   r   r   r   N)
r   arrayrr   r
   r   r   r4   concatenater\   r   )
r$   r   r   r   r   rI   
y_expected	lin_slopeleftrights
             r   test_extensionszTestUpfirdn.test_extensions   sm    H\\\///ead%d;;;?""JJJL LJJ]""DDDF FJJXNNNP PJJV^^21#a&&1*5IQ4")TE1a009<<DbEBIa33i??Eq%(899JJD%=t<<<J:&&&&&r   zsize, h_len, mode, dtype   )rW   r+      c                 v   t           j                            d          }|                    |                              |          }|t           j        t           j        fv r|d|                    |          z  z  }t          j        dd|z   |j        j	                  }t          ||dd|          }|dz
  }	|dv rt          ||	|	|          }
nt          j        ||	|          }
t          ||
ddd	          }||	|	          }t          j        |          j        d
z  x}}t          ||||           d S )Nr+   r(   r   re   )r   r   r   )r   r   r   r   r   r   r[   g      Y@rn   )r   r!   r"   r0   r1   r2   r3   r4   realr   r   r
   r\   finfoepsr   )r$   r7   h_lenr   r   rt   r   r   rI   npadxpadypadr   ro   rp   s                  r   
test_modeszTestUpfirdn.test_modes   sC    y,,Q//t$$++E22R\2=111l((....AIaU!&,777AqQQT222qyEEEQTDAAADD6!T---Dq$11:>>>$u*%
huoo)C//t:Dt<<<<<<r   N)rK   rL   rM   rU   pytestmarkparametrizer^   ra   rg   rw   _UPFIRDN_TYPESrz   listr   r   r~   r	   r   r   rB   rF   r2   r3   r   rO   r   r   rQ   rQ   t   s       = = =
 [Wooo66[Wooo66! ! 76 76!8 8 8 [?	
Aq!\\\"	
Aq!___%	
Aq!___%	
Aq!___%	
B1+++,B  % % % [- 0 0 0  
9 9 
9$ [Y77[S(++[Z)I)I)IJJ, , KJ ,+ 87, [Y77[Y77[^!T'')Y"?"?@@B B B B 87 87
  0 [V^44' ' 54'. ["CJJZR\2=A		
 	
 = = = = =r   rQ   c                  J    d} d}d}d}t          | |||          }|dk    sJ d S )Ni  i i@  i  i6S)r   )rV   in_lenr   r   out_lens        r   test_output_len_long_inputr     sD     EF	BD%T22G hr   rx   )numpyr   	itertoolsr   scipy._lib._array_apir   r   r   rS   scipy.signalr   r   scipy.signal._upfirdnr   r	   scipy.signal._upfirdn_applyr
   r   r   rq   rB   r2   rr   rs   r   rQ   r   rO   r   r   <module>r      s2  F           1 1 1 1 1 1 * * * * * *  ( ( ( ( ( ( ( ( = = = = = = = = 1 1 1 1 1 1	 	 	 	3/ 3/ 3/ 3/ 3/ 3/ 3/ 3/l rz2<@^= ^= ^= ^= ^= ^= ^= ^=B    r   