U
    Hvf6T                     @   s   d dl Zd dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ G dd dZG dd dZG d	d
 d
ZG d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_equalassert_array_almost_equalassert_array_equalassert_allcloseassert_assert_almost_equalsuppress_warnings)raises)dlsimdstepdimpulsetf2zpkltidlti
StateSpaceTransferFunctionZerosPolesGain	dfreqrespdbodeBadCoefficientsc                   @   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 )TestDLTIc                 C   s  t ddgddgg}t dddgdddgg}t ddgg}t dddgg}d	}t t jd
dddd d t jf t ddt ddf}t jd
ddd}t dddddggj}t d
d
gddgddgddgddgg}	t|||||f||\}
}}t	|| t	|	| t	||
 tdd  |d
d gd d f }t ddg}t|||||f||\}
}}t	|| t	|	| t
t|
|jd
  t d!dg}t dd!d"g}t ddd#d$d%ggj}t||d	f|d d d
f |\}
}t	|| t	||
 t |d d d
f }|d&}t||d	f||\}
}t	|| t	||
 t d	d'g}t d(t d) d*t d) g}d!}t dd!dd+d,ggj}t|||d	f|d d d
f |\}
}t	|| t	||
 td-gd-d-g}ttt|| d S ).N?皙?皙ɿ皙?皙        皙?333333?      ?r   g      @   )num)r       g{Gz?gMb`g       @gMbPgc#GgD2?gъo?g#Y?ga2U0*S?gMb@?gTƿ?gkHcCG?g'h'?g56Ng9!@gbmӿ)r"                  ?皙?g
@gqqg^B{	7@)r                        ?r#   y             g      @g      @r"   )npasarrayZhstacklinspaceZnewaxisfullarrayTr
   r   r   lenshapereshapesqrtr   assert_raisesAttributeError)selfabcddtuZt_inZ
yout_truthZ
xout_truthtoutyoutxoutZu_sparseZt_sparser!   denZuflatZzdpdksystem rD   C/tmp/pip-unpacked-wheel-96ln3f52/scipy/signal/tests/test_dltisys.py
test_dlsim   st     










"




"$

zTestDLTI.test_dlsimc                 C   s  t ddgddgg}t dddgdddgg}t ddgg}t dddgg}d	}t dd
ddddddddg
t ddddddddddg
t dddddd d!d"d#d$g
f}t|||||fd%d&\}}tt|d' td(t|D ].}	t||	 jd( d% t||	  ||	  qd)gd)d)gd	f}
t dd)dg}t|
d'd&\}}tt|d* t|d(  | t	|
d( |
d* d+ }t|d'd&\}}tt|d* t|d(  | t
d*gd*d*g}ttt| d S ),Nr   r   r   r   r   r   r   r   r   {Gz?g9v?gMO?gNz1?g0g >㷿gW	N3Ŀg+(ͿgGӿg333333gV-g,Ԛga̦ۢgQo&g*~gIطgp,%Բg[W{Gzg9vgMOgNz1cg0?g >?gW	N3?g+(?gG?
   nr$   r   r&   r"   r   )r*   r+   r   r   r0   ranger1   r   flattenr   r   r4   r5   )r6   r7   r8   r9   r:   r;   Zyout_step_truthr=   r>   itfinZyout_tfstepzpkinrC   rD   rD   rE   
test_dstepf   sX             zTestDLTI.test_dstepc                 C   s  t ddgddgg}t dddgdddgg}t ddgg}t dddgg}d	}t dd
ddddddddg
t ddddddddddg
t dddddd d!d"d#d$g
f}t|||||fd%d&\}}tt|d' td(t|D ].}	t||	 jd( d% t||	  ||	  qd)gd)d)gd	f}
t dd)d*g}t|
d'd&\}}tt|d+ t|d(  | t	|
d( |
d+ d, }t|d'd&\}}tt|d+ t|d(  | t
d+gd+d+g}ttt| d S )-Nr   r   r   r   r   r   r   r   r   rG   g~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`rH   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?rI   rJ   r$   r   r&   g      r"   rL   )r*   r+   r   r   r0   rM   r1   r   rN   r   r   r4   r5   )r6   r7   r8   r9   r:   r;   Zyout_imp_truthr=   r>   rO   rP   Zyout_tfimpulserQ   rC   rD   rD   rE   test_dimpulse   sV             
zTestDLTI.test_dimpulsec           
      C   s   t dgg}t dgg}t dgg}t dgg}d}t |dd}t||||df|\}}}	t|t t| t|t |df t|	t |df d S )Nr   r    r"   r*   r.   zerosr2   r
   r   arangefloat)
r6   r7   r8   r9   r:   rK   r<   r=   r>   r?   rD   rD   rE   test_dlsim_trivial   s    zTestDLTI.test_dlsim_trivialc                 C   s   t dgg}t dgg}t dgg}t dgg}d}t |dd}t||||df|dd\}}}	t|t t| dt t| dd}
t||
 t|	|
 d S )Nr   r   r&   r    rT   r"   x0rU   )r6   r7   r8   r9   r:   rK   r<   r=   r>   r?   expectedrD   rD   rE   test_dlsim_simple1d   s    
zTestDLTI.test_dlsim_simple1dc                 C   s   d}d}t |dgd|gg}t dgdgg}t ddgddgg}t dgdgg}d}t |dd}t||||df|dd\}	}
}t|	t t| t ||gt t|dd }t|
| t|| d S )	Nr   g      ?r   r&   r    rT   r"   rZ   rU   )r6   lambda1lambda2r7   r8   r9   r:   rK   r<   r=   r>   r?   r\   rD   rD   rE   test_dlsim_simple2d   s.    


zTestDLTI.test_dlsim_simple2dc                 C   sV  d}d}t |dgd|gg}t ddgddgg}t ddgg}t ddgg}d}t||||df|d\}}	dd|  d|t |   }
dd|  d|t |   }t|	d d d df |
 t|	d d d df | t ddg}t||||df||d	\}}t ||gt d
|d d
d }d|dd d f< |d |df t |d|d d d f | }|d |df t |d|d d d f | }t|d d d df | t|d d d df | dgddgdf}t|dd\}\}t|dddg t|j	dddgg t|dd\}\}t|dddg t|j	dddgg d S )Nr   g      ?r   r&   rI   r"   rJ   r   )rK   r[   rT   r(   r   r$   r'   g      ?)
r*   r.   r   rW   r   r   r2   dotr   r/   )r6   r^   r_   r7   r8   r9   r:   rK   tsZysZstp0Zstp1r[   ZtiyiimpZy0y1rC   tyrD   rD   rE   test_more_step_and_impulse   sB    

00z#TestDLTI.test_more_step_and_impulseN)
__name__
__module____qualname__rF   rR   rS   rY   r]   r`   rh   rD   rD   rD   rE   r      s   U-,r   c                   @   s   e Zd Zdd ZdS )TestDltic                 C   s  d}t dgdg|d}tt|t tt|t  tt|t  t|j| t tg tdgd|d}tt|t	 tt|t  tt|t  t|j| t dgdgdd|d}tt|t
 tt|t  tt|t  t|j| ttt d ttt ddddd d S )Nr   r"   rT   r;   r$   )r   r   
isinstancer   r   r   r;   r*   r.   r   r   r4   
ValueError)r6   r;   srD   rD   rE   test_dlti_instantiation  s$    z TestDlti.test_dlti_instantiationN)ri   rj   rk   rq   rD   rD   rD   rE   rl     s   rl   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestStateSpaceDiscc                 C   s   d}t dddd|d t dgdgdgdg|d t tddgddggtdgdggtddggtdgg|d t dddddd d S )	Nr   r"   rm   r#   r$   r%   r   T)r   r*   r.   r6   r;   rD   rD   rE   test_initialization<  s    &  z&TestStateSpaceDisc.test_initializationc                 C   sl   t dddddd}tt| t  tt| t tt| t tt ||k	 t| |k	 d S )Nr"   r#   r$   r%   r   rm   )r   r   rn   to_ssto_tfr   to_zpkr   r6   rp   rD   rD   rE   test_conversionE  s    z"TestStateSpaceDisc.test_conversionc                 C   s2   t dddddd}t|jdg t|jdg d S )Nr"   r   rm   r   )r   r   polesrV   rx   rD   rD   rE   test_propertiesP  s    z"TestStateSpaceDisc.test_propertiesNri   rj   rk   rt   ry   r{   rD   rD   rD   rE   rr   ;  s   	rr   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestTransferFunctionc                 C   sT   d}t dd|d t dgdg|d t tdgtdg|d t dddd d S Nr   r"   rm   r#   T)r   r*   r.   rs   rD   rD   rE   rt   [  s
    z(TestTransferFunction.test_initializationc                 C   sp   t ddgddgdd}tt| t tt| t  tt| t tt ||k	 t| |k	 d S Nr"   r   rT   r   rm   )r   r   rn   ru   r   rv   rw   r   rx   rD   rD   rE   ry   c  s    z$TestTransferFunction.test_conversionc                 C   s6   t ddgddgdd}t|jdg t|jdg d S r   )r   r   rz   rV   rx   rD   rD   rE   r{   n  s    z$TestTransferFunction.test_propertiesNr|   rD   rD   rD   rE   r}   Z  s   r}   c                   @   s   e Zd Zdd Zdd ZdS )TestZerosPolesGainc                 C   s\   d}t ddd|d t dgdgd|d t tdgtdgd|d t ddddd d S r~   )r   r*   r.   rs   rD   rD   rE   rt   y  s
     z&TestZerosPolesGain.test_initializationc                 C   sj   t ddddd}tt| t tt| t tt| t  tt ||k	 t| |k	 d S )Nr"   r#   r$   r   rm   )r   r   rn   ru   r   rv   r   rw   rx   rD   rD   rE   ry     s    z"TestZerosPolesGain.test_conversionN)ri   rj   rk   rt   ry   rD   rD   rD   rE   r   x  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 )Test_dfreqrespc                 C   sd   t dddgdd}dddg}t||d\}}ddd	g}t|j|d
d dddg}t|j|d
d d S )Nr"   r   r   rm   rI   wgU0*?g;On?gfj+r%   decimalgClÿg&WgZd;O?)r   r   r   realimag)r6   rC   r   Hexpected_reexpected_imrD   rD   rE   test_manual  s    


zTest_dfreqresp.test_manualc                 C   s   t dddgdd}ddddg}t||d\}}t|d }t|j|t|j| }|j}t|j| |j	}t|j	| d S )	Nr"   r   r   rm   rI   d   r   r)   )
r   r   r*   exppolyvalr!   r@   r   r   r   )r6   rC   r   r   jwrg   r   r   rD   rD   rE   	test_auto  s    zTest_dfreqresp.test_autoc                 C   sH   t dddgdd}d}tjdtjddd}t||d	\}}t|| d S )
Nr"   r   r   rm   rI   r   FZendpointrJ   )r   r*   r,   pir   r   )r6   rC   rK   
expected_wr   r   rD   rD   rE   test_freq_range  s
    zTest_dfreqresp.test_freq_rangec              	   C   sd   t dgddgdd}t 2}|jtdd |jtdd t|dd	\}}W 5 Q R X t|d
 d d S Nr"   rT   r   rm   zdivide by zero)messagezinvalid value encounteredr#   rJ   r   r   )r   r   filterRuntimeWarningr   r   )r6   rC   supr   r   rD   rD   rE   test_pole_one  s    zTest_dfreqresp.test_pole_onec                 C   s    t dgddg}ttt| d S Nr"   )r   r4   r5   r   r6   rC   rD   rD   rE   
test_error  s    zTest_dfreqresp.test_errorc              	   C   s   t dgddddg}tdddgdddgdddgg}tdddggj}tdddgg}d}t ||||}dtddd }t 0}|t t||d\}	}
t||d\}}W 5 Q R X t	|
| d S )	Nr#   r"   r(   r   r   g      $@r   )
r   r*   r.   r/   rW   r   r   r   r   r   )r6   	system_TFABCDZ	system_SSr   r   w1H1w2H2rD   rD   rE   test_from_state_space  s    
z$Test_dfreqresp.test_from_state_spacec                 C   sV   t g dgd}t dddg}ddddg}t||d\}}t||d\}}t|| d S )	Nr'   r   r"   r   r   rI   r   r   )r   r   r   )r6   Z
system_ZPKr   r   r   r   r   r   rD   rD   rE   test_from_zpk  s    zTest_dfreqresp.test_from_zpkN)
ri   rj   rk   r   r   r   r   r   r   r   rD   rD   rD   rE   r     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S )	Test_bodec           	      C   s   d}t dddg|d}dddtjg}t||d\}}}dd	d
dg}t||dd ddddg}t||dd tt|| | d S )Nr   r   r"   r   rm   r   r   gD!gvq!g$~;#g0*(r%   r   gzGgJAg_)Pg     f)r   r*   r   r   r   r   r.   )	r6   r;   rC   r   r   magphaseexpected_magexpected_phaserD   rD   rE   r     s    zTest_bode.test_manualc           
      C   s   t dddgdd}tdddtjg}t||d\}}}t|d }t|j|t|j| }d	t	t
| }t|| tt|}	t||	 d S )
Nr   r"   r   r   rm   r   r   r)   g      4@)r   r*   r.   r   r   r   r   r!   r@   log10absr   Zrad2degZangle)
r6   rC   r   r   r   r   r   rg   r   r   rD   rD   rE   r     s    
zTest_bode.test_autoc                 C   sR   d}t dddgdd}d}tjdtj|dd	| }t||d
\}}}t|| d S )Nr   r   r"   r   rm   rI   r   Fr   rJ   )r   r*   r,   r   r   r   )r6   r;   rC   rK   r   r   r   r   rD   rD   rE   
test_range  s    zTest_bode.test_rangec              	   C   sf   t dgddgdd}t 4}|jtdd |jtdd t|dd	\}}}W 5 Q R X t|d
 d d S r   )r   r   r   r   r   r   )r6   rC   r   r   r   r   rD   rD   rE   r     s    zTest_bode.test_pole_onec                 C   s&   t dgdddgdd}t|dd d S )Nr"   r   r   r   rm   r#   rJ   )r   r   r   rD   rD   rE   test_imaginary$  s    zTest_bode.test_imaginaryc                 C   s    t dgddg}ttt| d S r   )r   r4   r5   r   r   rD   rD   rE   r   *  s    zTest_bode.test_errorN)	ri   rj   rk   r   r   r   r   r   r   rD   rD   rD   rE   r     s   r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestTransferFunctionZConversionz=Test private conversions between 'z' and 'z**-1' polynomials.c                 C   s`   dddg}dddg}t ||\}}t|| t|| t ||\}}t|| t|| d S )Nr#   r$   r%   r          r   Z
_z_to_zinvr   Z
_zinv_to_zr6   r!   r@   Znum2Zden2rD   rD   rE   	test_full3  s    




z)TestTransferFunctionZConversion.test_fullc                 C   sj   ddg}dddg}t ||\}}tdddg| t|| t ||\}}tdddg| t|| d S )Nr#   r$   r    r   r   r   r   r   rD   rD   rE   test_numerator?  s    

z.TestTransferFunctionZConversion.test_numeratorc                 C   sj   dddg}ddg}t ||\}}t|| tdddg| t ||\}}t|| tdddg| d S )Nr#   r$   r%   r    r   r   r   r   rD   rD   rE   test_denominatorK  s    


z0TestTransferFunctionZConversion.test_denominatorN)ri   rj   rk   __doc__r   r   r   rD   rD   rD   rE   r   0  s   r   )"Znumpyr*   Znumpy.testingr   r   r   r   r   r   r   Zpytestr	   r4   Zscipy.signalr
   r   r   r   r   r   r   r   r   r   r   r   r   rl   rr   r}   r   r   r   r   rD   rD   rD   rE   <module>   s   $8  [H