a
    ˆù»jŒV  ã                   @   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  g d¢g d¢g¡}t  ddgg¡}t  g d¢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  g d¢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  g d¢¡}t  g d ¢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  g d&¢g¡j}t|||df|d d …d	f |ƒ\}
}t	||ƒ t	||
ƒ td'gd'd'gƒ}ttt||ƒ d S )(NçÍÌÌÌÌÌì?çš™™™™™¹?çš™™™™™É¿©gš™™™™™Ù?r   çš™™™™™¹¿©ç        çš™™™™™©?r   ç333333Ó?©r   r   r   ç      à?r   g      @é   )Únum)r"   é   g{®Gáz„?gü©ñÒMb`¿ç       @)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$   é   é   é   r   ç      ð?r   )r   r)   çš™™™™™É?)r   r   g£ªªªªª
@gÊqÇqÀg�Ð^B{	7@)r"   ç      à¿ù              ð?r&   y       €      ð¿)r   r)   r%   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© rG   úEE:\soccer\ml_env\Lib\site-packages\scipy/signal/tests/test_dltisys.pyÚ
test_dlsim   s`     

þ
ü





"




"$

zTestDLTI.test_dlsimc                 C   s’  t  ddgddgg¡}t  g d¢g d¢g¡}t  ddgg¡}t  g d¢g¡}d}t  g d	¢¡t  g d
¢¡t  g d¢¡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  g d¢¡}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Ó¿)
r   g333333³¿gV-²­¿g,Ôšæ§¨¿g»aÛ¢Ì¦¿g±QÖo&¦§¿g*œî†~·ª¿gIØ·“ˆ¯¿gŽ‡p,%Ô²¿g’ [W¶¿)
r   ç{®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-   r.   r   r   r3   Úranger4   r   Úflattenr   r   r7   r8   )r9   r:   r;   r<   r=   r>   Zyout_step_truthr@   rA   ÚiÚtfinZyout_tfstepÚzpkinrF   rG   rG   rH   Ú
test_dstepf   s2    ùzTestDLTI.test_dstepc                 C   s’  t  ddgddgg¡}t  g d¢g d¢g¡}t  ddgg¡}t  g d¢g¡}d}t  g d	¢¡t  g d
¢¡t  g d¢¡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  g d¢¡}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   rJ   gú~j¼t“ˆ?gàœ¥½Á‡¿g†r¢]…”Ÿ¿g{¿ÑŽ~§¿gBî"LQ.­¿g°E_nƒ°¿gRPÉº1�±¿g‰ã1%Èÿ±¿)
r   gš™™™™™™?gœÄ °rh‘?g±¿ìž<,„?gd’‘³°§m?gZÕ’Žr0[¿gÍSÂ¸ÀŠx¿g^³¦ÃTDƒ¿gg#„Ú~ˆ¿g}T`�³Œ¿)
r   rK   gú~j¼t“h¿gàœ¥½Ág?g†r¢]…”?g{¿ÑŽ~‡?gBî"LQ.�?g°E_nƒ�?gRPÉº1�‘?g‰ã1%Èÿ‘?rL   rM   r'   r   r)   )r   r)   g      ð¿r$   rO   )r-   r.   r   r   r3   rP   r4   r   rQ   r   r   r7   r8   )r9   r:   r;   r<   r=   r>   Zyout_imp_truthr@   rA   rR   rS   Zyout_tfimpulserT   rF   rG   rG   rH   Útest_dimpulse“   s2    ú
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-   r1   Úzerosr5   r
   r   ÚarangeÚfloat)
r9   r:   r;   r<   r=   rN   r?   r@   rA   rB   rG   rG   rH   Ú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"   rW   r$   ©Úx0rX   )r9   r:   r;   r<   r=   rN   r?   r@   rA   rB   ÚexpectedrG   rG   rH   Ú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"   rW   r$   r]   rX   )r9   Úlambda1Úlambda2r:   r;   r<   r=   rN   r?   r@   rA   rB   r_   rG   rG   rH   Útest_dlsim_simple2dØ   s.    
ÿÿ
ÿÿÿ
zTestDLTI.test_dlsim_simple2dc                 C   sN  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|g d¢ƒ t|j	g d¢gƒ t|dd�\}\}t|g d¢ƒ t|j	g d¢gƒ d S )Nr!   g      è?r   r)   rL   r$   rM   r   )rN   r^   rW   r+   r   r'   )r   r   r*   )r   r)   g      ø?)r   r$   r!   )
r-   r1   r   rZ   r   r   r5   Údotr   r2   )r9   ra   rb   r:   r;   r<   r=   rN   ÚtsZysZstp0Zstp1r^   ÚtiÚyiÚimpZy0Úy1rF   ÚtÚyrG   rG   rH   Útest_more_step_and_impulseí   sB    
ÿ
ÿÿ00z#TestDLTI.test_more_step_and_impulseN)
Ú__name__Ú
__module__Ú__qualname__rI   rU   rV   r\   r`   rc   rl   rG   rG   rG   rH   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$   rW   ©r>   r'   )r   r   Ú
isinstancer   r   r   r>   r-   r1   r   r   r7   Ú
ValueError)r9   r>   ÚsrG   rG   rH   Útest_dlti_instantiation  s$    z TestDlti.test_dlti_instantiationN)rm   rn   ro   ru   rG   rG   rG   rH   rp     s   rp   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$   rq   r&   r'   r(   r   T)r   r-   r1   ©r9   r>   rG   rG   rH   Ú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 |ƒ|uƒ t| ¡ |uƒ d S )Nr$   r&   r'   r(   r   rq   )r   r   rr   Úto_ssÚto_tfr   Úto_zpkr   ©r9   rt   rG   rG   rH   Ú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   rq   r   )r   r   ÚpolesrY   r|   rG   rG   rH   Útest_propertiesP  s    z"TestStateSpaceDisc.test_propertiesN©rm   rn   ro   rx   r}   r   rG   rG   rG   rH   rv   ;  s   	rv   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$   rq   r&   T)r   r-   r1   rw   rG   rG   rH   rx   [  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 |ƒ|uƒ t| ¡ |uƒ d S ©Nr$   r   rW   r   rq   )r   r   rr   ry   r   rz   r{   r   r|   rG   rG   rH   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~   rY   r|   rG   rG   rH   r   n  s    z$TestTransferFunction.test_propertiesNr€   rG   rG   rG   rH   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-   r1   rw   rG   rG   rH   rx   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 |ƒ|uƒ t| ¡ |uƒ d S )Nr$   r&   r'   r   rq   )r   r   rr   ry   r   rz   r   r{   r|   rG   rG   rH   r}   �  s    z"TestZerosPolesGain.test_conversionN)rm   rn   ro   rx   r}   rG   rG   rG   rH   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   s^   t dddgdd�}g d¢}t||d�\}}g d¢}t|j|dd	� g d
¢}t|j|dd	� d S )Nr$   r   r   rq   )r   r$   rL   ©Úw)gU0*©Ðó?g;ßO�—nÚ?gÏfÕçj+è¿r(   ©Údecimal)g�•C‹lçÃ¿g�&Â†§Wð¿gZd;ßOÙ?)r   r   r   ÚrealÚimag)r9   rF   r‡   ÚHÚexpected_reÚexpected_imrG   rG   rH   Útest_manual�  s    zTest_dfreqresp.test_manualc                 C   s|   t dddgdd�}g d¢}t||d�\}}t |d ¡}t |j|¡t |j|¡ }|j}t|j|ƒ |j	}t|j	|ƒ d S )Nr$   r   r   rq   ©r   r$   rL   éd   r†   r,   )
r   r   r-   ÚexpÚpolyvalr#   rC   rŠ   r   r‹   )r9   rF   r‡   rŒ   Újwrk   r�   rŽ   rG   rG   rH   Ú	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   rq   rL   r   F©ZendpointrM   )r   r-   r/   Úpir   r   )r9   rF   rN   Ú
expected_wr‡   rŒ   rG   rG   rH   Útest_freq_range¯  s
    zTest_dfreqresp.test_freq_rangec                 C   sx   t dgddgdd�}tƒ �<}|jtdd� |jtdd� t|dd	�\}}W d   ƒ n1 s\0    Y  t|d
 dƒ d S ©Nr$   rW   r   rq   zdivide by zero)Úmessagezinvalid value encounteredr&   rM   r   r   )r   r   ÚfilterÚRuntimeWarningr   r   )r9   rF   Úsupr‡   rŒ   rG   rG   rH   Ú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   r7   r8   r   ©r9   rF   rG   rG   rH   Ú
test_errorÄ  s    zTest_dfreqresp.test_errorc                 C   sÐ   t dgg d¢ƒ}t g d¢g d¢g d¢g¡}t g d¢g¡j}t g d¢g¡}d}t ||||ƒ}dt d	dd
¡ }tƒ �:}| t¡ t||d�\}	}
t||d�\}}W d   ƒ n1 s¸0    Y  t	|
|ƒ d S )Nr&   )r$   r+   r   r   )r!   r   r   )r$   r   r   )r   r$   r   )r   r   r&   r   g      $@éýÿÿÿr!   r†   )
r   r-   r1   r2   rZ   r   rœ   r   r   r   )r9   Ú	system_TFÚAÚBÚCÚDZ	system_SSr‡   rž   Úw1ÚH1Úw2ÚH2rG   rG   rH   Útest_from_state_spaceÉ  s    
þ
.z$Test_dfreqresp.test_from_state_spacec                 C   sR   t g dgdƒ}t dddgƒ}g d¢}t||d�\}}t||d�\}}t||ƒ d S )Nr*   r   r$   r   r�   r†   )r   r   r   )r9   Z
system_ZPKr¤   r‡   r©   rª   r«   r¬   rG   rG   rH   Útest_from_zpkÞ  s    zTest_dfreqresp.test_from_zpkN)
rm   rn   ro   r�   r•   r™   rŸ   r¢   r­   r®   rG   rG   rG   rH   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   sz   d}t dddg|d�}dddtjg}t||d�\}}}g d¢}t||d	d
� g d¢}t||d	d
� tt |¡| |ƒ d S )Nr   r   r$   r   rq   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   r1   )	r9   r>   rF   r‡   r«   ÚmagÚphaseÚexpected_magÚexpected_phaserG   rG   rH   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   rq   r!   r†   r,   g      4@)r   r-   r1   r—   r   r’   r“   r#   rC   Úlog10Úabsr   Zrad2degZangle)
r9   rF   r‡   r«   r°   r±   r”   rk   r²   r³   rG   rG   rH   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   rq   rL   r   Fr–   rM   )r   r-   r/   r—   r   r   )r9   r>   rF   rN   r˜   r‡   r°   r±   rG   rG   rH   Ú
test_range  s    zTest_bode.test_rangec                 C   sz   t dgddgdd�}tƒ �>}|jtdd� |jtdd� t|dd	�\}}}W d   ƒ n1 s^0    Y  t|d
 dƒ d S rš   )r   r   rœ   r�   r   r   )r9   rF   rž   r‡   r°   r±   rG   rG   rH   rŸ     s    0zTest_bode.test_pole_onec                 C   s$   t dgg d¢dd�}t|dd� d S )Nr$   )r$   r   r‘   r   rq   r&   rM   )r   r   r¡   rG   rG   rH   Útest_imaginary$  s    zTest_bode.test_imaginaryc                 C   s    t dgddgƒ}ttt|ƒ d S r    )r   r7   r8   r   r¡   rG   rG   rH   r¢   *  s    zTest_bode.test_errorN)	rm   rn   ro   r�   r•   r¶   rŸ   r·   r¢   rG   rG   rG   rH   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\   g d¢}g d¢}t  ||¡\}}t||ƒ t||ƒ t  ||¡\}}t||ƒ t||ƒ d S )N©r&   r'   r(   ©r"   é   é   ©r   Z
_z_to_zinvr   Z
_zinv_to_z©r9   r#   rC   Znum2Zden2rG   rG   rH   Ú	test_full3  s    


z)TestTransferFunctionZConversion.test_fullc                 C   sd   ddg}g d¢}t  ||¡\}}tg d¢|ƒ t||ƒ t  ||¡\}}tg d¢|ƒ t||ƒ d S )Nr&   r'   rº   )r   r&   r'   )r&   r'   r   r½   r¾   rG   rG   rH   Útest_numerator?  s    
z.TestTransferFunctionZConversion.test_numeratorc                 C   sd   g d¢}ddg}t  ||¡\}}t||ƒ tg d¢|ƒ t  ||¡\}}t||ƒ tg d¢|ƒ d S )Nr¹   r"   r»   )r   r"   r»   )r"   r»   r   r½   r¾   rG   rG   rH   Útest_denominatorK  s    

z0TestTransferFunctionZConversion.test_denominatorN)rm   rn   ro   Ú__doc__r¿   rÀ   rÁ   rG   rG   rG   rH   r¸   0  s   r¸   )"Únumpyr-   Znumpy.testingr   r   r   r   r   r   r   Zpytestr	   r7   Zscipy.signalr
   r   r   r   r   r   r   r   r   r   r   r   r   rp   rv   r�   r„   r…   r¯   r¸   rG   rG   rG   rH   Ú<module>   s   $8  [H