
    Ug+                         d dl Zd dlmZ d dlmZ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)assert_equalassert_allclose)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/surfInsights/venv3-11/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 t          |j
        t           j                   nt           j        |v r.t           j        |v r t          |j
        t           j                   nt          d |D                       r t          |j
        t           j                   n[t           j        |v st           j        |v r t          |j
        t           j                   nt          |j
        t           j                   t#          ||           d S )Nr-   c              3   6   K   | ]}|t           j        k    V  d S N)r   r3   .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   rA   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   allr   r3   rC   r4   float64r   )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 		.",////\V##
f(<(<",////11&11111 	."*----]f$$(>(>"-0000"*---Ar   N)r:   )__name__
__module____qualname____doc__r&   r9   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   r0   r   padr   )r%   rW   rY   r   r   rJ   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          |ddg           t          ddgddgdd          }t          |g d           d S )Nr   r[   g        )r   r   r   )r   r   )r%   rJ   s     r   test_shift_xzTestUpfirdn.test_shift_x   sd    QFRD!Q''Aq6"""QFRHa++999%%%%%r   z len_h, len_x, up, down, expectedr*   r,   )r   r   r   r   r+      )r   r   r   r   r   rX   )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	          ||           d S )Nr[   r   )r   r   r0   r   r   )	r%   rW   rY   r   r   expectedr   r   rJ   s	            r   test_length_factorszTestUpfirdn.test_length_factors   sP     HUOO!GENNAq"d##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)      r[   hamming)windowr   )r   r   r   gHz>atolrtol)r   r"   r#   intrC   r3   floatcomplexr1   r2   r4   r   r   r   rE   r   )r%   r   rI   random_state	try_typesr8   r   r   r   ylrJ   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   )r[   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!   rz   p_maxq_maxteststests          r   test_vs_naivezTestUpfirdn.test_vs_naive   sC    
 $$UE7GDD 	 	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          k    r|d|                    |          z  z  }|                    t          ||||                     |S )Nr+      r   r   r)   )
r   r"   r#   r6   randintr    r2   rr   appendr   )r%   r~   r   rz   r!   n_rep	longest_hrs   r   _p_addq_addpqrW   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   r   )rb   rb   nprenpostr   antisymmetric)r+   r   r:   r:   r   r*   r+   r   r:   r   r   r:   r   r*   antireflect)r   r*   r+   r   r:   r   r   r*   r+   r   r:   r   r   r*   r+   r   smooth)r   r   r:   r   r   r*   r+   r   r:   r   r   iiiliner:   r   r   r   N)
r   arrayrq   r   r   r   r5   concatenater]   r   )
r%   r   r   r   r   rJ   
y_expected	lin_slopeleftrights
             r   test_extensionszTestUpfirdn.test_extensions   sm    H\\\///ead%d;;;?""HHHJ JJJ]""BBBD DJJXLLLN N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   )rX   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   r   )r   r   r   )r   r   r   r   r   r   r\   g      Y@rm   )r   r"   r#   r1   r2   r3   r4   r5   realr   r   r   r]   finfoepsr   )r%   r8   h_lenr   r   rs   r   r   rJ   npadxpadypadr   rn   ro   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)rL   rM   rN   rV   pytestmarkparametrizer_   ra   rf   rv   _UPFIRDN_TYPESry   listr   r   r}   r
   r   r   rC   rG   r3   r4   r   rP   r   r   rR   rR   t   s       = = =
 [Wooo66[Wooo66! ! 76 76!& & & [?	
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   rR   c                  J    d} d}d}d}t          | |||          }|dk    sJ d S )Ni  i i@  i  i6S)r	   )rW   in_lenr   r   out_lens        r   test_output_len_long_inputr     sD     EF	BD%T22G hr   rw   )numpyr   	itertoolsr   numpy.testingr   r   r   r   rT   scipy.signalr   r   scipy.signal._upfirdnr	   r
   scipy.signal._upfirdn_applyr   r   r   rp   rC   r3   rq   rr   r   rR   r   rP   r   r   <module>r      s8  F           7 7 7 7 7 7 7 7 * * * * * *  ( ( ( ( ( ( ( ( = = = = = = = = 1 1 1 1 1 1	 	 	 	3 3 3 3 3 3 3 3l rz2<@]= ]= ]= ]= ]= ]= ]= ]=@    r   