U
    Q»{j6T  ã                   @   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{®Gáz„?gü©ñÒMb`¿g       @gü©ñÒMbP¿g²c#¯ëG¿g�êD2¤?gºÑŠo·?g#£YäÀ?ga2U0*©S?gü©ñÒMb@?g�ÇTÆ¿Ù?gkHÜcéCG?g'h“Ã'�ò?g5–°6ÆN´¿g9¶ž!ì@g°b§¨mÓ¿)r"   é   é   é   ç      ð?çš™™™™™É?g£ªªªªª
@gÊqÇ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uflatÚzdÚpdÚkÚsystem© rE   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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||	  ¡ ||	 ƒ qäd)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   ç{®Gáz¤?g9´Èv¾Ÿª?gM„O¯¤?gùNÌz1”ƒ?g½«0™¢¿gÿÌ >°ã·¿gW	’N�3Ä¿g€±ö+(Í¿g¢ÑGÓ¿g333333³¿gV-²­¿g,Ôšæ§¨¿g»aÛ¢Ì¦¿g±QÖo&¦§¿g*œî†~·ª¿gIØ·“ˆ¯¿gŽ‡p,%Ô²¿g’ [W¶¿ç{®Gáz„¿g9´Èv¾ŸŠ¿gM„O¯„¿gùNÌz1”c¿g½«0™‚?gÿÌ >°ã—?gW	’N�3¤?g€±ö+(­?g¢ÑG³?é
   ©Ú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ÚzpkinrD   rE   rE   rF   Ú
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||	  ¡ ||	 ƒ qäd)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   rH   gú~j¼t“ˆ?gàœ¥½Á‡¿g†r¢]…”Ÿ¿g{¿ÑŽ~§¿gBî"LQ.­¿g°E_nƒ°¿gRPÉº1�±¿g‰ã1%Èÿ±¿gš™™™™™™?gœÄ °rh‘?g±¿ìž<,„?gd’‘³°§m?gZÕ’Žr0[¿gÍSÂ¸ÀŠx¿g^³¦ÃTDƒ¿gg#„Ú~ˆ¿g}T`�³Œ¿rI   gú~j¼t“h¿gàœ¥½Ág?g†r¢]…”?g{¿ÑŽ~‡?gBî"LQ.�?g°E_nƒ�?gRPÉº1�‘?g‰ã1%Èÿ‘?rJ   rK   r$   r   r&   g      ð¿r"   rM   )r*   r+   r   r   r0   rN   r1   r   rO   r   r   r4   r5   )r6   r7   r8   r9   r:   r;   Zyout_imp_truthr=   r>   rP   rQ   Zyout_tfimpulserR   rD   rE   rE   rF   Ú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:   rL   r<   r=   r>   r?   rE   rE   rF   Ú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    rU   r"   ©Úx0rV   )r6   r7   r8   r9   r:   rL   r<   r=   r>   r?   ÚexpectedrE   rE   rF   Ú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    rU   r"   r[   rV   )r6   Úlambda1Úlambda2r7   r8   r9   r:   rL   r<   r=   r>   r?   r]   rE   rE   rF   Ú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&   rJ   r"   rK   r   )rL   r\   rU   r(   r   r$   r'   g      ø?)
r*   r.   r   rX   r   r   r2   Údotr   r/   )r6   r_   r`   r7   r8   r9   r:   rL   ÚtsZysZstp0Zstp1r\   ÚtiÚyiÚimpZy0Úy1rD   ÚtÚyrE   rE   rF   Útest_more_step_and_impulseí   sB    
ÿ
ÿÿ00z#TestDLTI.test_more_step_and_impulseN)
Ú__name__Ú
__module__Ú__qualname__rG   rS   rT   rZ   r^   ra   rj   rE   rE   rE   rF   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"   rU   ©r;   r$   )r   r   Ú
isinstancer   r   r   r;   r*   r.   r   r   r4   Ú
ValueError)r6   r;   ÚsrE   rE   rF   Útest_dlti_instantiation  s$    z TestDlti.test_dlti_instantiationN)rk   rl   rm   rs   rE   rE   rE   rF   rn     s   rn   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"   ro   r#   r$   r%   r   T)r   r*   r.   ©r6   r;   rE   rE   rF   Ú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   ro   )r   r   rp   Úto_ssÚto_tfr   Úto_zpkr   ©r6   rr   rE   rE   rF   Ú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   ro   r   )r   r   ÚpolesrW   rz   rE   rE   rF   Útest_propertiesP  s    z"TestStateSpaceDisc.test_propertiesN©rk   rl   rm   rv   r{   r}   rE   rE   rE   rF   rt   ;  s   	rt   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"   ro   r#   T)r   r*   r.   ru   rE   rE   rF   rv   [  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   rU   r   ro   )r   r   rp   rw   r   rx   ry   r   rz   rE   rE   rF   r{   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   r|   rW   rz   rE   rE   rF   r}   n  s    z$TestTransferFunction.test_propertiesNr~   rE   rE   rE   rF   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.   ru   rE   rE   rF   rv   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   ro   )r   r   rp   rw   r   rx   r   ry   rz   rE   rE   rF   r{   �  s    z"TestZerosPolesGain.test_conversionN)rk   rl   rm   rv   r{   rE   rE   rE   rF   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   ro   rJ   ©ÚwgU0*©Ðó?g;ßO�—nÚ?gÏfÕçj+è¿r%   ©Údecimalg�•C‹lçÃ¿g�&Â†§Wð¿gZd;ßOÙ?)r   r   r   ÚrealÚimag)r6   rD   r…   ÚHÚexpected_reÚexpected_imrE   rE   rF   Ú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   ro   rJ   éd   r„   r)   )
r   r   r*   ÚexpÚpolyvalr!   r@   rˆ   r   r‰   )r6   rD   r…   rŠ   Újwri   r‹   rŒ   rE   rE   rF   Ú	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   ro   rJ   r   F©ZendpointrK   )r   r*   r,   Úpir   r   )r6   rD   rL   Ú
expected_wr…   rŠ   rE   rE   rF   Ú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"   rU   r   ro   zdivide by zero)Úmessagezinvalid value encounteredr#   rK   r   r   )r   r   ÚfilterÚRuntimeWarningr   r   )r6   rD   Úsupr…   rŠ   rE   rE   rF   Ú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   rD   rE   rE   rF   Ú
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/   rX   r   r™   r   r   r   )r6   Ú	system_TFÚAÚBÚCÚDZ	system_SSr…   r›   Úw1ÚH1Úw2ÚH2rE   rE   rF   Ú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   rJ   rŽ   r„   )r   r   r   )r6   Z
system_ZPKr¡   r…   r¦   r§   r¨   r©   rE   rE   rF   Útest_from_zpkÞ  s    zTest_dfreqresp.test_from_zpkN)
rk   rl   rm   r�   r’   r–   rœ   rŸ   rª   r«   rE   rE   rE   rF   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   ro   r   r„   g©ÐDØ!Àgvqà­!Àg$—ÿ�~;#Àg¾0™*(Àr%   r†   gáz®G¡ÀgŒJê¤AÀg_)ËÇþPÀg     €fÀ)r   r*   r”   r   r   r   r.   )	r6   r;   rD   r…   r¨   ÚmagÚphaseÚexpected_magÚexpected_phaserE   rE   rF   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   ro   r   r„   r)   g      4@)r   r*   r.   r”   r   r�   r�   r!   r@   Úlog10Úabsr   Zrad2degZangle)
r6   rD   r…   r¨   r­   r®   r‘   ri   r¯   r°   rE   rE   rF   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   ro   rJ   r   Fr“   rK   )r   r*   r,   r”   r   r   )r6   r;   rD   rL   r•   r…   r­   r®   rE   rE   rF   Ú
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   rD   r›   r…   r­   r®   rE   rE   rF   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   ro   r#   rK   )r   r   rž   rE   rE   rF   Ú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ž   rE   rE   rF   rŸ   *  s    zTest_bode.test_errorN)	rk   rl   rm   r�   r’   r³   rœ   r´   rŸ   rE   rE   rE   rF   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den2rE   rE   rF   Ú	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¹   rE   rE   rF   Ú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¹   rE   rE   rF   Útest_denominatorK  s    


z0TestTransferFunctionZConversion.test_denominatorN)rk   rl   rm   Ú__doc__rº   r»   r¼   rE   rE   rE   rF   rµ   0  s   rµ   )"Ú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   rn   rt   r   r‚   rƒ   r¬   rµ   rE   rE   rE   rF   Ú<module>   s   $8  [H