U
    »mœd6T  ã                   @   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uflatZzdÚpdÚkÚsystem© rD   úX/home/sam/Atlas/atlas_env/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Ú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||	  ¡ ||	 ƒ 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   rG   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`�³Œ¿rH   gú~j¼t“h¿gàœ¥½Ág?g†r¢]…”?g{¿ÑŽ~‡?gBî"LQ.�?g°E_nƒ�?gRPÉº1�‘?g‰ã1%Èÿ‘?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[   Ú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`   ri   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)rj   rk   rl   rr   rD   rD   rD   rE   rm     s   rm   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"   rn   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   rn   )r   r   ro   Úto_ssÚto_tfr   Úto_zpkr   ©r6   rq   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   rn   r   )r   r   ÚpolesrV   ry   rD   rD   rE   Útest_propertiesP  s    z"TestStateSpaceDisc.test_propertiesN©rj   rk   rl   ru   rz   r|   rD   rD   rD   rE   rs   ;  s   	rs   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"   rn   r#   T)r   r*   r.   rt   rD   rD   rE   ru   [  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   rn   )r   r   ro   rv   r   rw   rx   r   ry   rD   rD   rE   rz   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{   rV   ry   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.   rt   rD   rD   rE   ru   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   rn   )r   r   ro   rv   r   rw   r   rx   ry   rD   rD   rE   rz   �  s    z"TestZerosPolesGain.test_conversionN)rj   rk   rl   ru   rz   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   rn   rI   ©ÚwgU0*©Ðó?g;ßO�—nÚ?gÏfÕçj+è¿r%   ©Údecimalg�•C‹lçÃ¿g�&Â†§Wð¿g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   rn   rI   éd   rƒ   r)   )
r   r   r*   ÚexpÚpolyvalr!   r@   r‡   r   rˆ   )r6   rC   r„   r‰   Újwrh   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   rn   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   rn   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)
rj   rk   rl   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   rn   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;   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   rn   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�   rh   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   rn   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   rn   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)	rj   rk   rl   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)rj   rk   rl   Ú__doc__r¹   rº   r»   rD   rD   rD   rE   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   rm   rs   r~   r�   r‚   r«   r´   rD   rD   rD   rE   Ú<module>   s   $8  [H