o
    Ö­jëS  ã                   @   sä   d dl Zd dlmZ d dlmZ d dlmZm	Z	m
Z
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)Úsuppress_warnings)Úraises)Úassert_array_almost_equalÚassert_almost_equalÚxp_assert_closeÚxp_assert_equal)ÚdlsimÚdstepÚdimpulseÚtf2zpkÚltiÚdltiÚ
StateSpaceÚTransferFunctionÚZerosPolesGainÚ	dfreqrespÚdbodeÚBadCoefficientsc                   @   óD   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
|ƒks¿J ‚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ÚasarrayÚhstackÚlinspaceÚnewaxisÚfullÚarrayÚTr   r   ÚlenÚreshapeÚsqrtr   Úassert_raisesÚAttributeError)ÚselfÚaÚbÚcÚdÚdtÚuÚt_inÚ
yout_truthÚ
xout_truthÚtoutÚyoutÚxoutÚu_sparseÚt_sparser"   ÚdenÚuflatÚzdÚpdÚkÚsystem© rN   ú\/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/signal/tests/test_dltisys.pyÚ
test_dlsim   sh    

þü
ü





ü"




"$

zTestDLTI.test_dlsimc                 C   óš  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|ƒdksQJ ‚tdt|ƒƒD ]}	||	 jd dkseJ ‚t||	  ¡ ||	 ƒ qXdgddgdf}
t  g d¢¡}t|
dd�\}}t|ƒdks�J ‚t|d  ¡ |ƒ t|
d |
d ƒd }t|dd�\}}t|ƒdks´J ‚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	   r4   ÚrangeÚshaper   Úflattenr   r   r7   r8   )r9   r:   r;   r<   r=   r>   Úyout_step_truthrC   rD   ÚiÚtfinÚyout_tfstepÚzpkinrM   rN   rN   rO   Ú
test_dstepg   s2   ùzTestDLTI.test_dstepc                 C   rQ   )Nr   r   r   r   r   r   r   r    )
r   rR   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   rS   gú~j¼t“h¿gàœ¥½Ág?g†r¢]…”?g{¿ÑŽ~‡?gBî"LQ.�?g°E_nƒ�?gRPÉº1�‘?g‰ã1%Èÿ‘?rT   rU   r&   r   r(   )r   r(   g      ð¿r#   rW   )r,   r-   r
   r4   rX   rY   r   rZ   r   r   r7   r8   )r9   r:   r;   r<   r=   r>   Úyout_imp_truthrC   rD   r\   r]   Úyout_tfimpulser_   rM   rN   rN   rO   Ú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,   r2   Úzerosr5   r   r   ÚarangeÚfloat)
r9   r:   r;   r<   r=   rV   r?   rC   rD   rE   rN   rN   rO   Ú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!   rd   r#   ©Úx0re   )r9   r:   r;   r<   r=   rV   r?   rC   rD   rE   ÚexpectedrN   rN   rO   Ú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!   rd   r#   rj   re   )r9   Úlambda1Úlambda2r:   r;   r<   r=   rV   r?   rC   rD   rE   rl   rN   rN   rO   Ú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(   rT   r#   rU   r   )rV   rk   rd   r*   r   r&   )r   r   r)   )r   r(   g      ø?)r   r#   r    )
r,   r2   r	   rg   r   r
   r5   Údotr   r3   )r9   rn   ro   r:   r;   r<   r=   rV   ÚtsÚysÚstp0Ústp1rk   ÚtiÚyiÚimpÚy0Úy1rM   ÚtÚyrN   rN   rO   Útest_more_step_and_impulseî   sB   
ÿ
ÿÿ00z#TestDLTI.test_more_step_and_impulseN)
Ú__name__Ú
__module__Ú__qualname__rP   r`   rc   ri   rm   rp   r}   rN   rN   rN   rO   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ƒsJ ‚t|t ƒsJ ‚t|tƒr J ‚|j|ks'J ‚t t g ¡t dg¡d|d�}t|tƒs=J ‚t|t ƒsDJ ‚t|tƒrKJ ‚|j|ksRJ ‚t dgdgdd|d�}t|tƒsdJ ‚t|t ƒskJ ‚t|tƒrrJ ‚|j|ksyJ ‚t	t
t dƒ t	t
t dddddƒ d S )Nr   r#   rd   ©r>   r&   )r   Ú
isinstancer   r   r>   r,   r2   r   r   r7   Ú
ValueError)r9   r>   ÚsrN   rN   rO   Útest_dlti_instantiation  s$   z TestDlti.test_dlti_instantiationN)r~   r   r€   r†   rN   rN   rN   rO   r�     s    r�   c                   @   ó$   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#   r‚   r%   r&   r'   r   T)r   r,   r2   ©r9   r>   rN   rN   rO   Útest_initialization=  s   &ÿz&TestStateSpaceDisc.test_initializationc                 C   sl   t dddddd�}t| ¡ t ƒsJ ‚t| ¡ tƒsJ ‚t| ¡ tƒs$J ‚t |ƒ|us,J ‚| ¡ |us4J ‚d S )Nr#   r%   r&   r'   r   r‚   )r   rƒ   Úto_ssÚto_tfr   Úto_zpkr   ©r9   r…   rN   rN   rO   Útest_conversionF  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   r‚   r(   r   )r   r   Úpolesrf   rŽ   rN   rN   rO   Útest_propertiesQ  s   z"TestStateSpaceDisc.test_propertiesN©r~   r   r€   rŠ   r�   r‘   rN   rN   rN   rO   rˆ   <  s    	rˆ   c                   @   r‡   )Ú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#   r‚   r%   T)r   r,   r2   r‰   rN   rN   rO   rŠ   \  s
   z(TestTransferFunction.test_initializationc                 C   sp   t ddgddgdd�}t| ¡ tƒsJ ‚t| ¡ t ƒsJ ‚t| ¡ tƒs&J ‚t |ƒ|us.J ‚| ¡ |us6J ‚d S )Nr#   r   rd   r   r‚   )r   rƒ   r‹   r   rŒ   r�   r   rŽ   rN   rN   rO   r�   d  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 )Nr#   r   rd   r   r‚   r(   r   )r   r   r�   rf   rŽ   rN   rN   rO   r‘   o  s   z$TestTransferFunction.test_propertiesNr’   rN   rN   rN   rO   r“   [  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,   r2   r‰   rN   rN   rO   rŠ   z  s
    z&TestZerosPolesGain.test_initializationc                 C   sj   t ddddd�}t| ¡ tƒsJ ‚t| ¡ tƒsJ ‚t| ¡ t ƒs#J ‚t |ƒ|us+J ‚| ¡ |us3J ‚d S )Nr#   r%   r&   r   r‚   )r   rƒ   r‹   r   rŒ   r   r�   rŽ   rN   rN   rO   r�   ‚  s   z"TestZerosPolesGain.test_conversionN)r~   r   r€   rŠ   r�   rN   rN   rN   rO   r•   y  s    r•   c                   @   r   )Ú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   r‚   )r   r#   rT   ©Úw)gU0*©Ðó?g;ßO�—nÚ?gÏfÕçj+è¿r'   ©Údecimal)g�•C‹lçÃ¿g�&Â†§Wð¿gZd;ßOÙ?)r   r   r   ÚrealÚimag)r9   rM   r˜   ÚHÚexpected_reÚexpected_imrN   rN   rO   Ú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   r‚   ©r   r#   rT   éd   r—   r+   )
r   r   r,   ÚexpÚpolyvalr"   rH   r›   r   rœ   )r9   rM   r˜   r�   Újwr|   rž   rŸ   rN   rN   rO   Ú	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   r‚   rT   r   F©ÚendpointrU   )r   r,   r/   Úpir   r   )r9   rM   rV   Ú
expected_wr˜   r�   rN   rN   rO   Útest_freq_range°  s
   zTest_dfreqresp.test_freq_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.w   Y  |d
 dks;J ‚d S ©Nr#   rd   r   r‚   zdivide by zero)Úmessagezinvalid value encounteredr%   rU   r   r   )r   r   ÚfilterÚRuntimeWarningr   )r9   rM   Úsupr˜   r�   rN   rN   rO   Útest_pole_oneº  s   ýzTest_dfreqresp.test_pole_onec                 C   ó    t dgddgƒ}ttt|ƒ d S ©Nr#   )r   r7   r8   r   ©r9   rM   rN   rN   rO   Ú
test_errorÅ  ó   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\w   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,   r2   r3   rg   r   r®   r   r   r   )r9   Ú	system_TFÚAÚBÚCÚDÚ	system_SSr˜   r°   Úw1ÚH1Úw2ÚH2rN   rN   rO   Ú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   Ú
system_ZPKr¸   r˜   r¾   r¿   rÀ   rÁ   rN   rN   rO   Útest_from_zpkß  s   zTest_dfreqresp.test_from_zpkN)
r~   r   r€   r    r¦   r«   r±   rµ   rÂ   rÄ   rN   rN   rN   rO   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   r‚   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   r2   )	r9   r>   rM   r˜   rÀ   ÚmagÚphaseÚexpected_magÚexpected_phaserN   rN   rO   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   r‚   r    r—   r+   g      4@)r   r,   r2   r©   r   r£   r¤   r"   rH   Úlog10Úabsr   Úrad2degÚangle)
r9   rM   r˜   rÀ   rÆ   rÇ   r¥   r|   rÈ   rÉ   rN   rN   rO   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   r‚   rT   r   Fr§   rU   )r   r,   r/   r©   r   r   )r9   r>   rM   rV   rª   r˜   rÆ   rÇ   rN   rN   rO   Ú
test_range  s   zTest_bode.test_rangec                 C   s|   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/w   Y  |d
 dks<J ‚d S r¬   )r   r   r®   r¯   r   )r9   rM   r°   r˜   rÆ   rÇ   rN   rN   rO   r±     s   ý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   r‚   r%   rU   )r   r   r´   rN   rN   rO   Útest_imaginary%  s   zTest_bode.test_imaginaryc                 C   r²   r³   )r   r7   r8   r   r´   rN   rN   rO   rµ   +  r¶   zTest_bode.test_errorN)	r~   r   r€   r    r¦   rÎ   r±   rÏ   rµ   rN   rN   rN   rO   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   sh   t  g d¢¡}t  g d¢¡}t ||¡\}}t||ƒ t||ƒ t ||¡\}}t||ƒ t||ƒ d S )N©r$   r&   r'   )ç      @é   é   ©r,   r-   r   Ú
_z_to_zinvr   Ú
_zinv_to_z©r9   r"   rH   Únum2Úden2rN   rN   rO   Ú	test_full4  s   


z)TestTransferFunctionZConversion.test_fullc                 C   sp   t  ddg¡}t  g d¢¡}t ||¡\}}tg d¢|ƒ t||ƒ t ||¡\}}tg d¢|ƒ t||ƒ d S )Nr$   r&   )é2   rÓ   rÔ   )r   r%   r&   )r$   r&   r   rÕ   rØ   rN   rN   rO   Útest_numerator@  s   
z.TestTransferFunctionZConversion.test_numeratorc                 C   sp   t  g d¢¡}t  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Ø   rN   rN   rO   Útest_denominatorL  s   

z0TestTransferFunctionZConversion.test_denominatorN)r~   r   r€   Ú__doc__rÛ   rÝ   rÞ   rN   rN   rN   rO   rÐ   1  s
    rÐ   )!Únumpyr,   Únumpy.testingr   Úpytestr   r7   Úscipy._lib._array_apir   r   r   r   Úscipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r�   rˆ   r“   r•   r–   rÅ   rÐ   rN   rN   rN   rO   Ú<module>   s   8  [H