
    Yh:1                         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 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dd           G d d                      Z edd          d             ZdS )    N)product)raises)array_api_extra)xp_assert_closearray_namespace)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        q/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/signal/tests/test_upfirdn.pyupfirdn_naiver   5   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 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__D   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__K   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   r4   .0ds     r   	<genexpr>z$UpFIRDnCase.scrub.<locals>.<genexpr>k   s)      11QqBL 111111r   c              3   6   K   | ]}|t           j        k    V  d S r>   )r   float32r?   s     r   rB   z$UpFIRDnCase.scrub.<locals>.<genexpr>o   s(      11Qbj111111r   )r   apply_along_axisr   r   r   r   r
   r   shaper   r   allr4   rD   r5   float64r   r3   )r&   r   r/   yrwant_lenydtypess          r   r0   zUpFIRDnCase.scrubb   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)r;   )__name__
__module____qualname____doc__r'   r:   r0    r   r   r   r   B   sL        - - -% % %./ / / / / /r   r   int64rD   r4   rH   r5   TzCython implementation)cpu_onlyreasonc                      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dd          ej                            de          ej                            dd          ej                            d g d!          d"                                                 Z edd          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 )0TestUpfirdnTzenough to only test on numpy)np_onlyrU   c                     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&   xps     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   r+   r,      r-   len_xc                 D   |                     |          }t          j        |          |dz                               d          }|                    |          }t          ||dd          }t          j        ||dz  |dz
  dz  fd|          }t          ||           d S )Nr+         ?r   constant)r\   )r   xpxatsetr1   r   padr   )r&   r^   r`   r\   r   r   rK   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   rb   r           )rl   rb   rb   )r   r   r   rH   )r&   r\   rK   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, expectedr+   r-   )r   r   r   r   r,      )r   r   r   r   r   r_   )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   rb   rk   )	r   rd   re   rf   r1   rH   r   r   r   )
r&   r^   r`   r   r   expectedr\   r   r   rK   s
             r   test_length_factorszTestUpfirdn.test_length_factors   s     HHUOOF1IIaLR  GGEG,,Aq"d##::hbj:998$$$$$r   r   rR   zdown, want_len))r+   i  )ro   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          ||	d	|                    }
t          |	|d	|
          }|j        |fk    sJ |
j        d         |j        d         k    sJ t          |
|dd           d S )Nr    i'  r*   rk      rb   hamming)windowr   )r   r   r   gHz>atolrtol)r   r#   r$   getattrr2   r3   r4   r5   r   r	   r   r   rF   r   )r&   r   rJ   r   r\   random_stater9   np_dtyper   r   ylrK   s               r   test_vs_convolvezTestUpfirdn.test_vs_convolve   sK    y,,R002u%%t$$++H55bm444l((....AE""JJqJ&&JJvb"t)I>>>??ZZaAt4455AqQT***w8+%%%%x{agaj((((ADt444444r   rE   r"   r   )rb   r*   zup, down)r   r   )r+   r+   )r,   r+   )r+   r,   c                 :     t          ||||                       d S r>   )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_maxr\   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$   r7   randintr!   r3   complexappendr   )r&   r   r   r   r"   n_rep	longest_hr}   r   _p_addq_addpqr^   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           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          j        |          ||f|          }|                    |          }|                    ||j                  }t          ||           dS )z@Test vs. manually computed results for modes not in numpy's pad.)r   r+   r,   r   rk   )rn   rn   nprenpostr   antisymmetric)g      @r   r;   r;   r   r+   r,   r   r;   r   r   r;   r   r+   antireflect)rb   r+   r,   r   r;   r   r   r+   r,   r   r;   r   r   r+   r,   r   smooth)g      r   r   r;   r   r   r+   r,   r   r;   r   iiiliner;   r   r   r   N)
r   r   rH   r   rF   r6   r   concatrg   r   )r&   r   r\   r   r   r   rK   
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e}4HHHJJ//JZZ
"*Z==
:&&&&&r   zsize, h_len, mode, dtype   )r_   r-      )rD   rH   r4   r5   c                 `   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          j	        |	          |||          }n)t          j        t          j	        |	          ||	          }|	                    |          }t          |
|ddd
          }|||          }|                    |          j        dz  x}}t          ||||           d S )Nr-   )r4   r5   r*   r   rk   )r   r   r   )r   r   r   r   r   r   rc   g      Y@ry   )r|   r   r#   r$   r2   r3   r6   realr   r   r   r   rg   finfoepsr   )r&   r9   h_lenr   r   r\   dtype_npdtype_xpr}   r   r   rK   npadxpadypadr   rz   r{   s                     r   
test_modeszTestUpfirdn.test_modes  s    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RZ]]TMMMDD6"*Q--D999Dzz$q$11:>>>$u*%
hhx((,s22t:Dt<<<<<<r   N)rM   rN   rO   skip_xp_backendsr]   pytestmarkparametrizeri   rm   rr   r   _UPFIRDN_TYPESr   listr   r   r   r   r   r   rQ   r   r   rW   rW   {   st        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( d+=>>>[Y77[S(++[Z)I)I)IJJ, , KJ ,+ 87 ?>, d+=>>>[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   rW   c                 J    d}d}d}d}t          ||||          }|dk    sJ d S )Ni  i i@  i  i6S)r
   )r\   r^   in_lenr   r   out_lens         r   test_output_len_long_inputr   6  sD    
 EF	BD%T22G hr   r   )numpyr   	itertoolsr   r   r   rZ   
scipy._libr   rd   scipy._lib._array_apir   r   scipy.signalr   r	   scipy.signal._upfirdnr
   r   scipy.signal._upfirdn_applyr   r   r   r   r   r   rW   r   rQ   r   r   <module>r      s  F           * * * * * *  - - - - - -        ) ( ( ( ( ( ( ( = = = = = = = = 1 1 1 1 1 1;/ 
 
 
 
3/ 3/ 3/ 3/ 3/ 3/ 3/ 3/l L 4(?@@@w= w= w= w= w= w= w= A@w=t 4(?@@@  A@  r   