U
    Hvf.                     @   s   d dl Zd dlmZmZmZmZmZ d dlm	Z
 d dlm  mZ dd ZdddZd	d
 Zdd Zdd ZG dd dZG dd dZG dd dZG dd dZdS )    N)assert_almost_equalassert_equalassert_assert_allcloseassert_array_equal)raisesc                 C   s   ||| |  |  }|S N tf0f1t1fr	   r	   E/tmp/pip-unpacked-wheel-96ln3f52/scipy/signal/tests/test_waveforms.pychirp_linear   s    r   Tc                 C   sF   |r"||| | d  |d   }n ||| ||  d  |d   }|S )N   r	   )r   r   r   r   vertex_zeror   r	   r	   r   chirp_quadratic   s     r   c                 C   s   ||| | |   }|S r   r	   r
   r	   r	   r   chirp_geometric   s    r   c                 C   s$   || | || |  ||   }|S r   r	   r
   r	   r	   r   chirp_hyperbolic   s     r   c                 C   sL   | d | d  }t |dt j  | }d| dd | dd   }||fS )zR
    Compute theta'(t)/(2*pi), where theta'(t) is the derivative of theta(t).
       r   r   g      ?N)npZdiffpi)r   thetadtr   tfr	   r	   r   compute_frequency#   s    r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(	TestChirpc                 C   s"   t jdddddd}t|d d S )Nr         ?       @linearr   r   r   r   method	waveformschirpr   selfwr	   r	   r   test_linear_at_zero1   s    zTestChirp.test_linear_at_zeroc           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )Nr"   r    r!   r   d   ư>	r   linspacer&   _chirp_phaser   maxabsr   r   
r)   r$   r   r   r   r   phaser   r   abserrr	   r	   r   test_linear_freq_015   s    zTestChirp.test_linear_freq_01c           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )Nr"         i@      Y@      $@r   r,   r-   r.   r3   r	   r	   r   test_linear_freq_02@   s    zTestChirp.test_linear_freq_02c                 C   s"   t jdddddd}t|d d S )Nr   r    r!   	quadraticr#   r%   r(   r	   r	   r   test_quadratic_at_zeroK   s    z TestChirp.test_quadratic_at_zeroc                 C   s$   t jddddddd}t|d d S )Nr   r    r!   r;   F)r   r   r   r   r$   r   r%   r(   r	   r	   r   test_quadratic_at_zero2O   s    z!TestChirp.test_quadratic_at_zero2c           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )Nr;   r    r!   r     r-   	r   r/   r&   r0   r   r1   r2   r   r   r3   r	   r	   r   test_quadratic_freq_01T   s    z TestChirp.test_quadratic_freq_01c           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )Nr;         4@r9   r   r>   r-   r?   r3   r	   r	   r   test_quadratic_freq_02_   s    z TestChirp.test_quadratic_freq_02c                 C   s"   t jdddddd}t|d d S )Nr   r    r!   logarithmicr#   r%   r(   r	   r	   r   test_logarithmic_at_zeroj   s    z"TestChirp.test_logarithmic_at_zeroc           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )NrC   r    r!   r   '  r-   	r   r/   r&   r0   r   r1   r2   r   r   r3   r	   r	   r   test_logarithmic_freq_01n   s    z"TestChirp.test_logarithmic_freq_01c           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )NrC   r7   r8   r9   r   rE   r-   rF   r3   r	   r	   r   test_logarithmic_freq_02y   s    z"TestChirp.test_logarithmic_freq_02c           
   
   C   sl   d}d}d}d}t d|d}t|||||}t||\}}t t |t|||| }	t|	dk  d S )NrC   r8   r9   r   rE   r-   rF   r3   r	   r	   r   test_logarithmic_freq_03   s    z"TestChirp.test_logarithmic_freq_03c                 C   s"   t jdddddd}t|d d S )Nr   r9   r    
hyperbolicr#   r%   r(   r	   r	   r   test_hyperbolic_at_zero   s    z!TestChirp.test_hyperbolic_at_zeroc                 C   s|   d}d}t d|d}ddgddgddgddgg}|D ]@\}}t|||||}t||\}}	t||||}
t|	|
 q6d S )NrJ   r    r   rE   r9   g      $      )r   r/   r&   r0   r   r   r   )r)   r$   r   r   Zcasesr   r   r4   r   r   expectedr	   r	   r   test_hyperbolic_freq_01   s    z!TestChirp.test_hyperbolic_freq_01c                 C   sF   d}d}t d|d}tttj|d|d| tttj|d|d| d S )NrJ   r    r      r   r   r/   assert_raises
ValueErrorr&   r'   )r)   r$   r   r   r	   r	   r   test_hyperbolic_zero_freq   s
    z#TestChirp.test_hyperbolic_zero_freqc                 C   s8   d}d}d}d}t d|d}tttj||||| d S )NZfoor9   rA   r    r   
   rP   )r)   r$   r   r   r   r   r	   r	   r   test_unknown_method   s    zTestChirp.test_unknown_methodc                 C   sT   d}d}t ddd}d}t||||}d}t||||}d}t|||d	 d S )
Nr9   rA   r   r            @   z'Integer input 't1=3' gives wrong resulterr_msgr   r/   r&   r'   r   )r)   r   r   r   r   float_result
int_resultrZ   r	   r	   r   test_integer_t1   s    zTestChirp.test_integer_t1c                 C   sT   d}d}t ddd}d}t||||}d}t||||}d}t|||d	 d S )
NrA   rW   r   r   rV   r9   rT   z(Integer input 'f0=10' gives wrong resultrY   r[   )r)   r   r   r   r   r\   r]   rZ   r	   r	   r   test_integer_f0   s    zTestChirp.test_integer_f0c                 C   sT   d}d}t ddd}d}t||||}d}t||||}d}t|||d	 d S )
Nr9   rW   r   r   rV   rA      z(Integer input 'f1=20' gives wrong resultrY   r[   )r)   r   r   r   r   r\   r]   rZ   r	   r	   r   test_integer_f1   s    zTestChirp.test_integer_f1c                 C   s\   d}d}d}t ddd}t|t|t|t|}t||||}d}t|||d d S )	NrT   rX   r`   r   r   rV   z5Integer input 'f0=10, t1=3, f1=20' gives wrong resultrY   )r   r/   r&   r'   floatr   )r)   r   r   r   r   r\   r]   rZ   r	   r	   r   test_integer_all   s    zTestChirp.test_integer_allN)__name__
__module____qualname__r+   r6   r:   r<   r=   r@   rB   rD   rG   rH   rI   rK   rN   rS   rU   r^   r_   ra   rc   r	   r	   r	   r   r   /   s&   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSweepPolyc                 C   sd   t dddg}t ddd}t||}t||\}}||}t t || }t|dk  d S )Nr            r   rW   rE   r-   	r   poly1dr/   r&   _sweep_poly_phaser   r1   r2   r   r)   pr   r4   r   r   rM   r5   r	   r	   r   test_sweep_poly_quad1   s    z#TestSweepPoly.test_sweep_poly_quad1c                 C   s^   t d}t ddd}t||}t||\}}||}t t || }t|dk  d S )Nr!   r   rW   rE   r-   ri   rl   r	   r	   r   test_sweep_poly_const   s    
z#TestSweepPoly.test_sweep_poly_constc                 C   sb   t ddg}t ddd}t||}t||\}}||}t t || }t|dk  d S )NrL   r9   r   rW   rE   r-   ri   rl   r	   r	   r   test_sweep_poly_linear   s    z$TestSweepPoly.test_sweep_poly_linearc                 C   sd   t dddg}t ddd}t||}t||\}}||}t t || }t|dk  d S )Nr    rh          r   rW   rE   r-   ri   rl   r	   r	   r   test_sweep_poly_quad2   s    z#TestSweepPoly.test_sweep_poly_quad2c                 C   sf   t ddddg}t ddd}t||}t||\}}||}t t || }t|dk  d S )Nr!   r    rh   rq   r   rE   r-   ri   rl   r	   r	   r   test_sweep_poly_cubic  s    z#TestSweepPoly.test_sweep_poly_cubicc                 C   sl   t ddddg}t ddd}t||}t||\}}t ||}t t || }t	|dk  dS )	z1Use an array of coefficients instead of a poly1d.r!   r    rh   rq   r   rE   r-   N)
r   arrayr/   r&   rk   r   rj   r1   r2   r   rl   r	   r	   r   test_sweep_poly_cubic2  s    z$TestSweepPoly.test_sweep_poly_cubic2c                 C   sf   ddddg}t ddd}t||}t||\}}t ||}t t || }t|dk  dS )	z/Use a list of coefficients instead of a poly1d.r!   r    rh   rq   r   rE   r-   N)	r   r/   r&   rk   r   rj   r1   r2   r   rl   r	   r	   r   test_sweep_poly_cubic3  s    z$TestSweepPoly.test_sweep_poly_cubic3N)
rd   re   rf   rn   ro   rp   rr   rs   ru   rv   r	   r	   r	   r   rg      s   					
rg   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestGaussPulsec                 C   s2   t jddd}t jddd}d}t|||d d S )Ncutoffg     @@)Zfci  z*Integer input 'fc=1000' gives wrong resultrY   r&   Z
gausspulser   r)   r\   r]   rZ   r	   r	   r   test_integer_fc$  s    zTestGaussPulse.test_integer_fcc                 C   s2   t jddd}t jddd}d}t|||d d S )Nrx   r    )Zbwr   z'Integer input 'bw=1' gives wrong resultrY   ry   rz   r	   r	   r   test_integer_bw*  s    zTestGaussPulse.test_integer_bwc                 C   s2   t jddd}t jddd}d}t|||d d S )Nrx   g      )Zbwriz)Integer input 'bwr=-6' gives wrong resultrY   ry   rz   r	   r	   r   test_integer_bwr0  s    zTestGaussPulse.test_integer_bwrc                 C   s2   t jddd}t jddd}d}t|||d d S )Nrx   g      N)Ztpriz*Integer input 'tpr=-60' gives wrong resultrY   ry   rz   r	   r	   r   test_integer_tpr6  s    zTestGaussPulse.test_integer_tprN)rd   re   rf   r{   r|   r}   r~   r	   r	   r	   r   rw   "  s   rw   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestUnitImpulsec              	   C   sJ   t tddddddddg t tddddgdddgdddgg d S )N   r   r   rX   rX   r   r&   unit_impulser)   r	   r	   r   test_no_index?  s    
zTestUnitImpulse.test_no_indexc                 C   s   t tddddddddddddg
 t tdddddgdddgdddgg tdd}t |tddddgddddgddddgddddgg d S )	NrT   rX   r   r   r   )r   r   )   r   r   )r   r&   r   r   rt   r)   impr	   r	   r   
test_indexD  s    


zTestUnitImpulse.test_indexc                 C   sR   t tdddddgdddgdddgg t tdddddddddddg	 d S )Nr   Zmidr   r   	   r   r   r	   r	   r   test_midQ  s    zTestUnitImpulse.test_midc                 C   sj   t d}tt|jtj t jddtd}tt|jtj t jddt	d}tt|jtj
 d S )Nr   rO   rX   )dtype)rO   r   )rX   r   )r&   r   r   r   Z
issubdtyper   ZfloatingintintegercomplexZcomplexfloatingr   r	   r	   r   
test_dtypeW  s    
zTestUnitImpulse.test_dtypeN)rd   re   rf   r   r   r   r   r	   r	   r	   r   r   =  s   r   )T)Znumpyr   Znumpy.testingr   r   r   r   r   Zpytestr   rQ   Zscipy.signal._waveformssignalZ
_waveformsr&   r   r   r   r   r   r   rg   rw   r   r	   r	   r	   r   <module>   s   
 0D