o
    Ö­j;,  ã                   @   s¤   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	d
„ZG dd„ dƒZeejejeefZG dd„ dƒZdd„ ZdS )é    N)Úproduct)Úxp_assert_close)Úraises)ÚupfirdnÚfirwin)Ú_output_lenÚ_upfirdn_modes)Ú	_pad_testé   c                 C   sb   t  |¡}t  t| ƒ| | j¡}| |dd|…< t  ||¡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Úout© r   ú\/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/signal/tests/test_upfirdn.pyÚupfirdn_naive/   s
   
0r   c                   @   s*   e Zd ZdZdd„ Zdd„ Zd
dd„Zd	S )ÚUpFIRDnCasezTest _UpFIRDn objectc                 C   s0   || _ || _t |¡| _|| _tj d¡| _d S )Né   )	r   r   r   Ú
atleast_1dr   Úx_dtypeÚrandomÚRandomStateÚrng)Úselfr   r   r   r   r   r   r   Ú__init__=   s
   zUpFIRDnCase.__init__c                 C   s&  |   t d| j¡¡ |   t d| j¡¡ | j d¡ | j¡}| jtjtjfv r1|d| j d¡ 7 }|   |¡ |   t 	d¡ | j¡¡ d}| jj|Ž  | j¡}| jtjtjfv ra|d| jj|Ž  7 }t
t|ƒƒD ]	}| j ||d� qg|d d …d d d…dd d…f j}t
t|ƒƒD ]	}| j ||d� q‡d S )Nr
   é
   ù              ð?)é   é   é   ©Úaxisr$   r%   )Úscrubr   Úonesr   r   ÚrandnÚastypeÚ	complex64Ú
complex128ÚarangeÚranger   ÚT)r    r   Úsizer(   r   r   r   Ú__call__D   s"   
 ÿzUpFIRDnCase.__call__éÿÿÿÿc                 C   sL  t  t||| j| j| j¡}tt| jƒ|j| | j| jƒ}|j| |ks%J ‚t	| j|| j| j|d�}|j| |ks:J ‚|j|jksBJ ‚| jj
|j
f}tdd„ |D ƒƒr[|j
t jksZJ ‚n@t j|v rnt j|v rn|j
t jksmJ ‚n-tdd„ |D ƒƒr€|j
t jksJ ‚nt 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                 s   ó   � | ]}|t jkV  qd S ©N)r   r-   ©Ú.0Údr   r   r   Ú	<genexpr>d   ó   € z$UpFIRDnCase.scrub.<locals>.<genexpr>c                 s   r5   r6   )r   Úfloat32r7   r   r   r   r:   h   r;   )r   Úapply_along_axisr   r   r   r   r   r   Úshaper   r   Úallr-   r<   r.   Úfloat64r   r,   )r    r   r(   ÚyrÚwant_lenÚyÚdtypesr   r   r   r)   [   s&   
ÿzUpFIRDnCase.scrubN)r4   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r3   r)   r   r   r   r   r   ;   s
    r   c                   @   sŽ  e Zd Zdd„ Zej dg d¢¡ej dg d¢¡dd„ ƒƒZd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d„ ƒZ	ej dg d¢¡dd„ ƒZ
ej de¡ej dd¡ej dg d ¢¡d!d"„ ƒƒƒZej de¡ej d#e¡ej d$eed%d%ƒƒ¡d&d'„ ƒƒƒZd(d)„ Zej d*e¡d+d,„ ƒZej d-ed.gg d/¢eejejejejgƒ¡d0d1„ ƒZd2S )3ÚTestUpfirdnc                 C   sF   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    r   r   r   Útest_valid_inputv   s   zTestUpfirdn.test_valid_inputÚlen_h)r
   r$   r%   é   r&   Úlen_xc                 C   sZ   t  |¡}d||d < t  |¡}t||ddƒ}t  ||d |d d fd¡}t||ƒ d S )Nç      ð?r$   r
   Úconstant)r   r   r*   r   Úpadr   )r    rM   rO   r   r   rC   Úwantr   r   r   Útest_singleton{   s   

zTestUpfirdn.test_singletonc                 C   sV   t ddgdgddƒ}t|t ddg¡ƒ t ddgddgddƒ}t|t g d¢¡ƒ d S )Nr
   rP   ç        )rU   rP   rP   )r   r   r   r   )r    rC   r   r   r   Útest_shift_x†   s   zTestUpfirdn.test_shift_xz len_h, len_x, up, down, expectedr$   r&   )r
   r   r   r   r%   é   )r
   r   r
   r   r
   rN   )r
   r   r   r   r
   )r
   r   r   r
   r   é   )r
   r   r   r
   r   r   r
   c           	      C   sH   t  |¡}d|d< t  |¡}t||||ƒ}t j|t jd�}t||ƒ d S )NrP   r   ©r   )r   r   r*   r   r   r@   r   )	r    rM   rO   r   r   Úexpectedr   r   rC   r   r   r   Útest_length_factors�   s   
	
zTestUpfirdn.test_length_factorszdown, want_len))r$   i—  )rX   i�  )éO   é   c                 C   sÊ   t j d¡}tt jt jttf}d}|D ]O}| |¡ 	|¡}|t jt j
fv r.|d| |¡ 7 }tdd| dd�}t||d|ƒ}	t||d|d	�}
|
j|fksNJ ‚|	jd
 |
jd
 ksZJ ‚t|	|
ddd� qd S )Nr   i'  r#   é   rP   Úhamming)Úwindowr
   )r   r   r   gH¯¼šò×z>©ÚatolÚrtol)r   r   r   Úintr<   r-   ÚfloatÚcomplexr+   r,   r.   r   r   r   r>   r   )r    r   rB   Úrandom_stateÚ	try_typesr2   r   r   r   ÚylrC   r   r   r   Útest_vs_convolve    s   özTestUpfirdn.test_vs_convolver   r   )rP   r#   zup, down)©r
   r
   )r$   r$   )r%   r$   )r$   r%   c                 C   s   t ||||ƒƒ  d S r6   )r   )r    r   r   r   r   r   r   r   Útest_vs_naive_delta·   s   zTestUpfirdn.test_vs_naive_deltaÚh_dtypezp_max, q_max)r"   éd   c                 C   s$   |   ||||¡}|D ]}|ƒ  q
d S r6   )Ú_random_factors)r    r   rm   Úp_maxÚq_maxÚtestsÚtestr   r   r   Útest_vs_naive½   s   ÿzTestUpfirdn.test_vs_naivec                 C   s¼   d}d}t j d¡}g }t|ƒD ]K}	||kr|nd}
||kr |nd}| |¡|
 }| |¡| }| |¡d }t  | |¡¡}| |¡}|tu rQ|d| |¡ 7 }| t	||||ƒ¡ q|S )Nr%   é   r   r
   r#   )
r   r   r   r0   Úrandintr   r,   rf   Úappendr   )r    rp   rq   rm   r   Ún_repÚ	longest_hrg   rr   Ú_Úp_addÚq_addÚpÚqrM   r   r   r   r   ro   Æ   s    
zTestUpfirdn._random_factorsÚmodec           
      C   s  t jg d¢td�}d\}}t||||d�}|dkr!t  g d¢¡}nY|dkr-t  g d¢¡}nM|d	kr9t  g d
¢¡}nA|dkrp|d |d  t|ƒd  }|d t  | dd¡|  }|d t  d|d ¡|  }	t  |||	f¡}n
t j|||f|d�}t	||ƒ dS )z@Test vs. manually computed results for modes not in numpy's pad.)r
   r$   r%   r
   rY   )rW   rW   ©ÚnpreÚnpostr   Úantisymmetric)g      @r
   r4   éýÿÿÿéþÿÿÿr4   r
   r$   r%   r
   r4   r„   r…   r4   r
   r$   Úantireflect)rP   r$   r%   r
   r4   r   r
   r$   r%   r
   r4   r   r
   r$   r%   r
   Úsmooth)g      Àéüÿÿÿr„   r…   r4   r   r
   r$   r%   r
   r4   r„   éûÿÿÿiùÿÿÿi÷ÿÿÿiõÿÿÿÚliner4   r   r
   ©r   N)
r   Úarrayre   r	   r   r   r/   ÚconcatenaterR   r   )
r    r   r   r�   r‚   rC   Ú
y_expectedÚ	lin_slopeÚleftÚrightr   r   r   Útest_extensionsÞ   s,   ÿÿÿzTestUpfirdn.test_extensionszsize, h_len, mode, dtypeé   )rN   r&   é   c                 C   sâ   t j d¡}| |¡ |¡}|t jt jfv r|d| |¡ 7 }t jdd| |jj	d�}t
||dd|d�}|d }	|dv rEt||	|	|d�}
nt j||	|d�}
t
||
ddd	d�}||	|	 … }t  |¡jd
  }}t||||d� d S )Nr&   r#   r
   rY   )r   r   r   )rƒ   r†   r‡   rŠ   r€   r‹   rQ   g      Y@ra   )r   r   r   r+   r,   r-   r.   r/   Úrealr   r   r	   rR   ÚfinfoÚepsr   )r    r2   Úh_lenr   r   rg   r   r   rC   ÚnpadÚxpadÚypadrŽ   rb   rc   r   r   r   Ú
test_modesö   s   
zTestUpfirdn.test_modesN)rE   rF   rG   rL   ÚpytestÚmarkÚparametrizerT   rV   r[   rj   Ú_UPFIRDN_TYPESrl   Úlistr   rt   ro   r   r’   r   r<   r@   r-   r.   rœ   r   r   r   r   rI   t   sN    	
û
	
ÿ
üþ	rI   c                  C   s.   d} d}d}d}t | |||ƒ}|dksJ ‚d S )Nié  i áõi@  i¹  i¸6S)r   )rM   Úin_lenr   r   Úout_lenr   r   r   Útest_output_len_long_input  s   r¤   rk   )Únumpyr   Ú	itertoolsr   Úscipy._lib._array_apir   r�   r   rJ   Úscipy.signalr   r   Úscipy.signal._upfirdnr   r   Úscipy.signal._upfirdn_applyr	   r   r   rd   r<   r-   re   rf   r    rI   r¤   r   r   r   r   Ú<module>   s   "
6 "