o
    ?HhS                     @   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sJ 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{Gz?gMb`       @)gMbPgc#GgD2?gъo?g#Y?ga2U0*S?gMb@?gTƿ?gkHcCG?g'h'?g56Ng9!@gbmӿ)r#            r         ?r   )r   r(   皙?)r   r   g
@gq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   _/home/air/sanwanet/gpt-api/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sJ t|d  | t|
d |
d d }t|dd\}}t|dksJ 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ӿ)
r   g333333gV-g,Ԛga̦ۢgQo&g*~gIطgp,%Բg[W)
r   {Gzg9vgMOgNz1cg0?g >?gW	N3?g+(?gG?
   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~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%)
r   g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`)
r   rS   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?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;On?gfj+r'   decimal)gClÿg&Wg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$~;#g0*(r'   r   )gzGgJAg_)Pg     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