
    tKg+                         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y)    N)product)assert_equalassert_allclose)raises)upfirdnfirwin)_output_len_upfirdn_modes)	_pad_testc                    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        c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   /   ss    
 	

1A
((3q6B;
(CC"I
++a
ff
%&L{3q63q62t'L
MCJ    c                   $    e Zd ZdZd Zd ZddZy)UpFIRDnCasezTest _UpFIRDn objectc                     || _         || _        t        j                  |      | _        || _        t        j                  j                  d      | _        y )N   )	r   r   r   
atleast_1dr   x_dtyperandomRandomStaterng)selfr   r   r   r    s        r   __init__zUpFIRDnCase.__init__=   s=    	q!99((,r   c                 @   | j                  t        j                  d| j                               | j                  t        j                  d| j                               | j                  j                  d      j                  | j                        }| j                  t        j                  t        j                  fv r!|d| j                  j                  d      z  z  }| j                  |       | j                  t        j                  d      j                  | j                               d} | j                  j
                  | j                  | j                        }| j                  t        j                  t        j                  fv r|d | j                  j
                  | z  z  }t        t        |            D ]  }| j                  ||        |d d d d ddd df   j                  }t        t        |            D ]  }| j                  ||        y )N   
                 ?)         axisr*   r+   )scrubr   onesr    r#   randnastype	complex64
complex128arangeranger   T)r$   r   sizer.   s       r   __call__zUpFIRDnCase.__call__D   s   

2771dll+,

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

1

299R=''56DHHNND!((6<<BLL"--88ndhhnnd+++A#d)$DJJqtJ$ %a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 r7t         j                  |v r%t        |j                  t         j                         nt        d |D              r%t        |j                  t         j                         nmt         j                  |v st         j                  |v r%t        |j                  t         j                         n$t        |j                  t         j                          t#        ||       y )Nr-   c              3   B   K   | ]  }|t         j                  k(    y wN)r   r3   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>d   s     1&QqBLL &   c              3   B   K   | ]  }|t         j                  k(    y wr<   )r   float32r=   s     r   r@   z$UpFIRDnCase.scrub.<locals>.<genexpr>h   s     1&Qbjj&rA   )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[   sw     a!%$))=s466{AGGDM477DIINxx~)))DFFAtww		=wwt}(((ww"(("""&&,,(1&11",,/\\V#

f(<",,/1&11"**-]]f$(>"--0"**-Ar   N))__name__
__module____qualname____doc__r%   r9   r/    r   r   r   r   ;   s    -%.r   r   c                      e Zd Zd Zej
                  j                  dg d      ej
                  j                  dg d      d               Zd Zej
                  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
                  j                  dg d      d        Z
ej
                  j                  de      ej
                  j                  dd      ej
                  j                  dg d      d                      Zej
                  j                  de      ej
                  j                  de      ej
                  j                  d e edd                  d                       Zd! Zej
                  j                  d"e      d#        Zej
                  j                  d$ ed%gg d&eej(                  ej*                  ej,                  ej.                  g            d'        Zy())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       y )Nr'   r   )assert_raises
ValueErrorr   )r$   s    r   test_valid_inputzTestUpfirdn.test_valid_inputv   sD    j'A3Q:j'2sAq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        ||       y )N      ?r*   r'   constant)r   r   r0   r   padr   )r$   rX   rZ   r   r   rJ   wants          r   test_singletonzTestUpfirdn.test_singleton{   si     HHUO%1*GGENAq!Qvva%1*uqyQ&67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       y )Nr'   r\   g        )r   r'   r'   )r   r   )r$   rJ   s     r   test_shift_xzTestUpfirdn.test_shift_x   sH    QFRD!Q'Aq6"QFRHa+9%r   z len_h, len_x, up, down, expectedr*   r,   )r'   r   r   r   r+      )r'   r   r'   r   r'   rY   )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	        ||       y )Nr\   r   )r   r   r0   r   r   )	r$   rX   rZ   r   r   expectedr   r   rJ   s	            r   test_length_factorszTestUpfirdn.test_length_factors   sA     HHUO!GGENAq"d#8$r   zdown, want_len))r*   i  )rd   i  )O      c                 D   t         j                  j                  d      }t        t         j                  t         j
                  t        t        f}d}|D ]  }|j                  |      j                  |      }|t         j
                  t         j                  fv r|d|j                  |      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        y )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     yy,,R0"**bllE7C	E""4(//6Ar}}55R,,,T222r29Y7Aq!Q-B1.A77xk)))88A;!''!*,,,B48 r   r    r   )r\   r)   zup, down)r'   r'   )r*   r*   )r+   r*   )r*   r+   c                 *     t        ||||              y 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                 H    | j                  ||||      }|D ]	  } |         y r<   )_random_factors)r$   r    r{   p_maxq_maxteststests          r   test_vs_naivezTestUpfirdn.test_vs_naive   s)    
 $$UE7GDDF r   c           	         d}d}t         j                  j                  d      }g }t        |      D ]  }	||kD  r|nd}
||kD  r|nd}|j	                  |      |
z   }|j	                  |      |z   }|j	                  |      dz   }t        j
                  |j	                  |            }|j                  |      }|t        k(  r|d|j	                  |      z  z  }|j                  t        ||||              |S )Nr+      r   r'   r)   )
r   r!   r"   r6   randintr   r2   rs   appendr   )r$   r   r   r{   r    n_rep	longest_hrt   r   _p_addq_addpqrX   r   s                   r   r~   zTestUpfirdn._random_factors   s    	yy,,R0uA"U]EE"U]EE$$U+e3A$$U+e3A !((3a7El2259:A!A'!R,..u555LLQ1g67   r   modec                 V   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(  rv|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        ||       y)z@Test vs. manually computed results for modes not in numpy's pad.)r'   r*   r+   r'   r   )rc   rc   nprenpostr   antisymmetric)r+   r'   rL   rL   r'   r*   r+   r'   rL   r   r   rL   r'   r*   antireflect)r'   r*   r+   r'   rL   r   r'   r*   r+   r'   rL   r   r'   r*   r+   r'   smooth)r   r   rL   r   r'   r*   r+   r'   rL   r   r   iiilinerL   r   r'   r   N)
r   arrayrr   r   r   r   r5   concatenater^   r   )
r$   r   r   r   r   rJ   
y_expected	lin_slopeleftrights
             r   test_extensionszTestUpfirdn.test_extensions   s    HH\/ead%d;?"HJJ]"BDJXLNJV^21#a&1*5IQ4"))TE1a09<<DbEBIIa3i??Eq%(89JD%=t<J:&r   zsize, h_len, mode, dtype   )rY   r,      c                 f   t         j                  j                  d      }|j                  |      j	                  |      }|t         j
                  t         j                  fv r|d|j                  |      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        ||||       y )Nr,   r)   r'   r   )r   r   r   )r   r   r   r   r   r   r]   g      Y@rn   )r   r!   r"   r1   r2   r3   r4   r5   realr   r   r   r^   finfoepsr   )r$   r8   h_lenr   r   rt   r   r   rJ   npadxpadypadr   ro   rp   s                  r   
test_modeszTestUpfirdn.test_modes   s    yy,,Q/t$++E2R\\2==11l((...AIIaU!&&,,7AqQQT2qyEEQTDAD66!T-Dq$11:>$u%
hhuo))C//t:Dt<r   N)rM   rN   rO   rW   pytestmarkparametrizer`   rb   rg   rw   _UPFIRDN_TYPESrz   listr   r   r~   r
   r   r   rC   rG   r3   r4   r   rQ   r   r   rS   rS   t   s(   =
 [[Wo6[[Wo6! 7 7!& [[?	
Aq!\"	
Aq!_%	
Aq!_%	
Aq!_%	
B1+,B %% [[- 0 
9
9$ [[Y7[[S(+[[Z)IJ, K , 8, [[Y7[[Y7[[^!')Y"?@BB 8 8
0 [[V^4' 5'. [["CZZR\\2==A		
==r   rS   c                  >    d} d}d}d}t        | |||      }|dk(  sJ y )Ni  i i@  i  i6S)r	   )rX   in_lenr   r   out_lens        r   test_output_len_long_inputr     s8     EF	BD%T2G hr   rx   )numpyr   	itertoolsr   numpy.testingr   r   r   r   rU   scipy.signalr   r   scipy.signal._upfirdnr	   r
   scipy.signal._upfirdn_applyr   r   r   rq   rC   r3   rr   rs   r   rS   r   rQ   r   r   <module>r      s\   F   7 *  ( = 1	3 3l rzz2<<@]= ]=@r   