
    e!h;,                         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y)    N)product)xp_assert_close)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        g/var/www/html/diagnosisapp-backend/venv/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|j                  t         j                  k(  sJ t         j                  |v r1t         j                  |v r|j                  t         j                  k(  sJ t        d |D              r|j                  t         j                  k(  sdJ t         j                  |v st         j                  |v r|j                  t         j                  k(  s!J |j                  t         j                  k(  sJ t!        |j#                  |j                        |       y )Nr,   c              3   B   K   | ]  }|t         j                  k(    y wN)r   r2   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>d   s     1QqBLL 1   c              3   B   K   | ]  }|t         j                  k(    y wr;   )r   float32r<   s     r   r?   z$UpFIRDnCase.scrub.<locals>.<genexpr>h   s     1Qbjj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!%$))=s466{AGGDM477DIINxx~)))DFFAtww		=wwt}(((ww"(("""&&,,(1&1177bll***\\V#

f(<77bll***1&1177bjj(((]]f$(>77bmm+++77bjj(((		!''*A.r   N))__name__
__module____qualname____doc__r$   r8   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   r/   r   padr   )r#   rW   rY   r   r   rI   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        |t        j                  ddg             t        ddgddgdd      }t        |t        j                  g d             y )Nr&   r[           )ra   r[   r[   )r   r   r   r   )r#   rI   s     r   test_shift_xzTestUpfirdn.test_shift_x   sZ    QFRD!Q'2::sCj12QFRHa+2::o67r   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        j                  |t         j
                        }t        ||       y )Nr[   r   r   )r   r   r/   r   r   rF   r   )	r#   rW   rY   r   r   expectedr   r   rI   s	            r   test_length_factorszTestUpfirdn.test_length_factors   sU     HHUO!GGENAq"d#::hbjj9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!   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     yy,,R0"**bllE7C	 
	9E""4(//6Ar}}55R,,,T222r29Y7Aq!Q-B1.A77xk)))88A;!''!*,,,B48
	9r   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        u r|d|j	                  |      z  z  }|j                  t        ||||              |S )Nr*      r   r&   r(   )
r   r    r!   r5   randintr   r1   rt   appendr   )r#   r   r   r|   r   n_rep	longest_hru   r   _p_addq_addpqrW   r   s                   r   r   zTestUpfirdn._random_factors   s    	yy,,R0u 	8A"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	8  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&   rf   )rc   rc   nprenpostr   antisymmetric)g      @r&   rK   rK   r&   r)   r*   r&   rK   r   r   rK   r&   r)   antireflect)r[   r)   r*   r&   rK   r   r&   r)   r*   r&   rK   r   r&   r)   r*   r&   smooth)g      r   r   rK   r   r&   r)   r*   r&   rK   r   iiilinerK   r   r&   r   N)
r   arrayrs   r
   r   r   r4   concatenater]   r   )
r#   r   r   r   r   rI   
y_expected	lin_slopeleftrights
             r   test_extensionszTestUpfirdn.test_extensions   s    HH\/ead%d;?"JLJ]"DFJXNP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   )rX   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&   rf   )r   r   r   )r   r   r   r   r   r   r\   g      Y@ro   )r   r    r!   r0   r1   r2   r3   r4   realr   r   r
   r]   finfoepsr   )r#   r7   h_lenr   r   ru   r   r   rI   npadxpadypadr   rp   rq   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)rL   rM   rN   rV   pytestmarkparametrizer_   rb   rh   rx   _UPFIRDN_TYPESr{   listr   r   r   r	   r   r   rB   rF   r2   r3   r   rP   r   r   rR   rR   t   s(   =
 [[Wo6[[Wo6! 7 7!8 [[?	
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   rR   c                  >    d} d}d}d}t        | |||      }|dk(  sJ y )Ni  i i@  i  i6S)r   )rW   in_lenr   r   out_lens        r   test_output_len_long_inputr     s8     EF	BD%T2G hr   ry   )numpyr   	itertoolsr   scipy._lib._array_apir   r   r   rT   scipy.signalr   r   scipy.signal._upfirdnr   r	   scipy.signal._upfirdn_applyr
   r   r   rr   rB   r2   rs   rt   r   rR   r   rP   r   r   <module>r      s\   F   1 *  ( = 1	3/ 3/l rzz2<<@^= ^=Br   