
    Ug6T                     F   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          Z G d d          Z G d	 d
          Z G d d          Z G d d          Z G d d          Z G d d          Z  G 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                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestDLTIc                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        t          j        d	d
d          d d t           j        f         t          j        dd          t          j        dd          f          }t          j        d	dd          }t          j        g dg          j        }t          j        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          j        ddg          }t          |||||f||          \  }
}}t          ||           t          |	|           t          t          |
          |j        d	                    t          j        ddg          }t          j        g d          }t          j        g d g          j        }t          ||df|d d d	f         |          \  }
}t          ||           t          ||
           t          j        |d d d	f                   }|                    d!          }t          ||df||          \  }
}t          ||           t          ||
           t          j        dd"g          }t          j        d#t          j        d$          z  d%t          j        d$          z  g          }d}t          j        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   r   lenshape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systems                         ^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/signal/tests/test_dltisys.py
test_dlsimzTestDLTI.test_dlsim   s&   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** Ir{1cq111!!!RZ-@wvt,,wvv..0 1 1 {1cq))) X  ,  ,  , - . . /0	 	
 Z!Q"(&!1")7!3"*I!6"+Z!8	!: ; ;
 !!Q1b!11d;;dD!*d333!*d333!$--- 	i aVQQQY<:sCj)) !Q1b!18XFFdD!*d333!*d333SYY
1... j#t%%j))X  2  2  2 3 4 4 56	 	 Cc?AaaadGT::
d!$
333!$--- 
1QQQT7##d##Cc?E488
d!$
333!$--- XsDk""XsRWQZZ'

):;<<X999:;;=
BAs+Qqqq!tWd;;
d!$
333!$--- aS1a&!!neVQ77777    c                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        g d	          t          j        g d
          t          j        g d          f}t          |||||fd          \  }}t          t	          |          d           t          dt	          |                    D ]Q}	t          ||	         j        d         d           t          ||	                                         ||	                    Rdgddgdf}
t          j        g d          }t          |
d          \  }}t          t	          |          d           t          |d                                         |           t          |
d         |
d                   dz   }t          |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    {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$   )r0   r1   r   r   r8   ranger9   r   flattenr   r   r<   r=   )r>   r?   r@   rA   rB   rC   yout_step_truthrH   rI   itfinyout_tfstepzpkinrR   s                 rS   
test_dstepzTestDLTI.test_dstepf   s   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** : 'D 'D 'D E E : '7 '7 '7 8 8 : 'B 'B 'B C C	D Aq!Q+r222
dSYY"""q#d))$$ 	M 	MAaq)2...%d1goo&7&79KLLLL Sz3'j1141%%%
dSYY"""!$q'//"3"3[AAAtAwQ((615A&&&
dSYY"""!$q'//"3"3[AAA aS1a&!!neV44444rU   c                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        g d	          t          j        g d
          t          j        g d          f}t          |||||fd          \  }}t          t	          |          d           t          dt	          |                    D ]Q}	t          ||	         j        d         d           t          ||	                                         ||	                    Rdgddgdf}
t          j        g d          }t          |
d          \  }}t          t	          |          d           t          |d                                         |           t          |
d         |
d                   dz   }t          |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    rW   g~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%)
r   g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`)
r    rX   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?rY   rZ   r*   r   r,   )r    r,   g      r'   r\   )r0   r1   r   r   r8   r]   r9   r   r^   r   r   r<   r=   )r>   r?   r@   rA   rB   rC   yout_imp_truthrH   rI   r`   ra   yout_tfimpulserc   rR   s                 rS   test_dimpulsezTestDLTI.test_dimpulse   s   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** * &C &C &C D D * &D &D &D E E * &A &A &A B BC q!Q2."555
dSYY"""q#d))$$ 	L 	LAaq)2...%d1goo&7&79JKKKK Sz3'$4$4$455da(((
dSYY"""!$q'//"3"3^DDDtAwQ((61eq)))
dSYY"""!$q'//"3"3^DDD aS1a&!!nh77777rU   c                 *   t          j        dgg          }t          j        dgg          }t          j        dgg          }t          j        dgg          }d}t          j        |                              dd          }t	          ||||df|          \  }}}	t          |t          j        t          |                               t          |t          j        |df                     t          |	t          j        |df                     d S )Nr    r%   r'   r0   r6   zerosr:   r   r   arangefloat)
r>   r?   r@   rA   rB   r[   rD   rH   rI   rJ   s
             rS   test_dlsim_trivialzTestDLTI.test_dlsim_trivial   s    HseWHseWHseWHseWHQKKA&& !Q1a!44dD4588!4!455541a&!1!122241a&!1!122222rU   c                 N   t          j        dgg          }t          j        dgg          }t          j        dgg          }t          j        dgg          }d}t          j        |                              dd          }t	          ||||df|d          \  }}}	t          |t          j        t          |                               dt          j        t          |                    z                      dd          }
t          ||
           t          |	|
           d S )Nr$   r    r,   r%   rj   r'   x0rk   )r>   r?   r@   rA   rB   r[   rD   rH   rI   rJ   expecteds              rS   test_dlsim_simple1dzTestDLTI.test_dlsim_simple1d   s   HseWHseWHseWHseWHQKKA&& !Q1a!:::dD4588!4!455529U1XX...77A>>4***4*****rU   c                    d}d}t          j        |dgd|gg          }t          j        dgdgg          }t          j        ddgddgg          }t          j        dgdgg          }d}t          j        |                              dd          }t	          ||||df|d          \  }	}
}t          |	t          j        t          |                               t          j        ||g          t          j        t          |                                        dd          z  }t          |
|           t          ||           d S )	Nr$   g      ?r    r,   r%   rj   r'   rq   rk   )r>   lambda1lambda2r?   r@   rA   rB   r[   rD   rH   rI   rJ   rs   s                rS   test_dlsim_simple2dzTestDLTI.test_dlsim_simple2d   sZ   HwnGn& ' 'Hsee  HsCjCj" # #Hsee  HQKKA&& !Q1a!:::dD4588!4!4555Hgw/00 "	%(( 3 3 ; ;B B BC4***4*****rU   c                 `   d}d}t          j        |dgd|gg          }t          j        ddgddgg          }t          j        ddgg          }t          j        ddgg          }d}t          ||||df|          \  }}	dd|z
  z  d|t          j        |          z  z
  z  }
dd|z
  z  d|t          j        |          z  z
  z  }t	          |	d         d d df         |
           t	          |	d         d d df         |           t          j        ddg          }t          ||||df||	          \  }}t          j        ||g          t          j        d
|dz                                 d
d          z  }d|dd d f<   |d |df         t          j        |d|dz   d d f         |          z   }|d |df         t          j        |d|dz   d d f         |          z   }t	          |d         d d df         |           t	          |d         d d df         |           dgddgdf}t          |d          \  }\  }t	          |g d           t          |j	        g dg           t          |d          \  }\  }t	          |g d           t          |j	        g dg           d S )Nr$   g      ?r    r,   rY   r'   rZ   r   )r[   rr   rj   r.   r   r*   )r   r   r-   )r   r,   g      ?)r   r'   r$   )
r0   r6   r   rm   r   r   r:   dotr   r7   )r>   rv   rw   r?   r@   rA   rB   r[   tsysstp0stp1rr   tiyiimpy0y1rR   tys                        rS   test_more_step_and_impulsez#TestDLTI.test_more_step_and_impulse   s   HwnGn& ' 'HsCjCj" # #HsCj\""HsCj\"" 1aA!,,,B q7{#g1.E(EFq7{#g1.E(EF1aaadT***1aaadT*** XsCj!!1aAq/Q2666B x'*++Ib!a%0088Q??@AqqqD	!QZ"&Qq1uWaaaZ"555!QZ"&Qq1uWaaaZ"5551aaadR(((1aaadR((( %#tc*!$$$4A===)))130006Q'''4A===)))13.....rU   N)
__name__
__module____qualname__rT   rd   rh   ro   rt   rx   r    rU   rS   r   r      s        S8 S8 S8j+5 +5 +5Z*8 *8 *8X
3 
3 
3+ + ++ + +*,/ ,/ ,/ ,/ ,/rU   r   c                       e Zd Zd ZdS )TestDltic           	      *   d}t          dgdg|          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        |           t          t          j        g           t          j        dg          d|          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        |           t          dgdg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'   rj   rC   r*   )r   r   
isinstancer   r   r   rC   r0   r6   r   r   r<   
ValueError)r>   rC   ss      rS   test_dlti_instantiationz TestDlti.test_dlti_instantiation  s    !rdr"""
1.//000
1d##$$$Jq#&&&'''QT2 "rx~~qR888
1n--...
1d##$$$Jq#&&&'''QT2 !rdAqR(((
1j))***
1d##$$$Jq#&&&'''QT2 	j$***j$1aA66666rU   N)r   r   r   r   r   rU   rS   r   r     s#        7 7 7 7 7rU   r   c                        e Zd Zd Zd Zd ZdS )TestStateSpaceDiscc                 `   d}t          dddd|           t          dgdgdgdg|           t          t          j        ddgddgg          t          j        dgdgg          t          j        ddgg          t          j        dgg          |           t          ddddd           d S )	Nr!   r'   r   r)   r*   r+   r   T)r   r0   r6   r>   rC   s     rS   test_initializationz&TestStateSpaceDisc.test_initialization<  s    1aA"%%%%A3aS1#"----28aVaV,--rx!qc
/C/C8aVH%%rx!2	? 	? 	? 	?1aA$''''''rU   c                    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+   r!   r   )r   r   r   to_ssto_tfr   to_zpkr   r>   r   s     rS   test_conversionz"TestStateSpaceDisc.test_conversionE  s    q!Qd+++
17799j11222
17799&677888
188::~66777 	
1Q&'''		"#####rU   c                     t          ddddd          }t          |j        dg           t          |j        dg           d S )Nr'   r!   r   r   )r   r   polesrl   r   s     rS   test_propertiesz"TestStateSpaceDisc.test_propertiesP  sJ    
 q!Qd+++QWqc"""QWqc"""""rU   Nr   r   r   r   r   r   r   rU   rS   r   r   ;  sA        ( ( (	$ 	$ 	$# # # # #rU   r   c                        e Zd Zd Zd Zd ZdS )TestTransferFunctionc                     d}t          dd|           t          dgdg|           t          t          j        dg          t          j        dg          |           t          ddd           d S Nr!   r'   r   r)   T)r   r0   r6   r   s     rS   r   z(TestTransferFunction.test_initialization[  sy    A"%%%%!qcb))))1#!"====A$''''''rU   c                    t          ddgddgd          }t          t          |                                t                               t          t          |                                t                                t          t          |                                t                               t          t          |          |u           t          |                                |u           d S Nr'   r   rj   r!   r   )r   r   r   r   r   r   r   r   r   s     rS   r   z$TestTransferFunction.test_conversionc  s    aVaW666
17799j11222
17799&677888
188::~66777 	 ##1,---		"#####rU   c                     t          ddgddgd          }t          |j        dg           t          |j        dg           d S r   )r   r   r   rl   r   s     rS   r   z$TestTransferFunction.test_propertiesn  sN    
 aVaW666QWqc"""QWqc"""""rU   Nr   r   rU   rS   r   r   Z  sA        ( ( (	$ 	$ 	$# # # # #rU   r   c                       e Zd Zd Zd ZdS )TestZerosPolesGainc                     d}t          ddd|           t          dgdgd|           t          t          j        dg          t          j        dg          d|           t          dddd           d S r   )r   r0   r6   r   s     rS   r   z&TestZerosPolesGain.test_initializationy  s    q!Q2&&&&sQCr****rx}}bhsmmQ2>>>>q!Q4((((((rU   c                    t          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   )r   r   r   r   r   r   r   r   r   s     rS   r   z"TestZerosPolesGain.test_conversion  s    1at,,,
17799j11222
17799&677888
188::~66777 	q!!*+++

!#$$$$$rU   N)r   r   r   r   r   r   rU   rS   r   r   x  s2        ) ) )	% 	% 	% 	% 	%rU   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Test_dfreqrespc                     t          dddgd          }g d}t          ||          \  }}g d}t          |j        |d	           g d
}t          |j        |d	           d S )Nr'   r   r   r   )r   r'   rY   w)gU0*?g;On?gfj+r+   decimal)gClÿg&WgZd;O?)r   r   r   realimag)r>   rR   r   Hexpected_reexpected_ims         rS   test_manualzTest_dfreqresp.test_manual  s     "!aY3777LL1%%%1 0//AFK;;;; 100AFK;;;;;;rU   c                 f   t          dddgd          }g d}t          ||          \  }}t          j        |dz            }t          j        |j        |          t          j        |j        |          z  }|j        }t          |j        |           |j	        }t          |j	        |           d S )Nr'   r   r   r   r   r'   rY   d   r   r/   )
r   r   r0   exppolyvalr&   rM   r   r   r   )r>   rR   r   r   jwr   r   r   s           rS   	test_autozTest_dfreqresp.test_auto  s     "!aY37771%%%1VAF^^Jvz2&&FJ)C)CC fAFK000 fAFK00000rU   c                     t          dddgd          }d}t          j        dt          j        dd          }t	          ||	          \  }}t          ||           d S )
Nr'   r   r   r   rY   r   FendpointrZ   )r   r0   r3   pir   r   )r>   rR   r[   
expected_wr   r   s         rS   test_freq_rangezTest_dfreqresp.test_freq_range  sg     "!aY3777[BE2>>>
1%%%1Az*****rU   c                 @   t          dgddgd          }t                      5 }|                    t          d           |                    t          d           t	          |d	          \  }}d d d            n# 1 swxY w Y   t          |d
         d           d S Nr'   rj   r   r   zdivide by zero)messagezinvalid value encounteredr)   rZ   r   r    )r   r	   filterRuntimeWarningr   r   )r>   rR   supr   r   s        rS   test_pole_onezTest_dfreqresp.test_pole_one  s     "1#2w3777   	*CJJ~/?J@@@JJ~/JJKKKVq)))DAq	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	QqT2s   AA==BBc                 b    t          dgddg          }t          t          t          |           d S Nr'   )r   r<   r=   r   r>   rR   s     rS   
test_errorzTest_dfreqresp.test_error  s/    aS1a&!!ni88888rU   c                    t          dgg d          }t          j        g dg dg dg          }t          j        g dg          j        }t          j        g dg          }d}t          ||||          }dt          j        d	dd
          z  }t                      5 }|                    t                     t          ||          \  }	}
t          ||          \  }}d d d            n# 1 swxY 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   r0   r6   r7   rm   r	   r   r   r   r   )r>   	system_TFABCD	system_SSr   r   w1H1w2H2s                rS   test_from_state_spacez$Test_dfreqresp.test_from_state_space  sV    !ooo..	Hkkkiiii! " " Hiii[!!#Hiii[!!Aq!$$	")Bq$$$   	/CJJ'''yA...FByA...FB	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 	B#####s   AC..C25C2c                     t          g dgd          }t          dddg          }g d}t          ||          \  }}t          ||          \  }}t          ||           d S )Nr-   r"   r'   r   r   r   )r   r   r   )r>   
system_ZPKr   r   r   r   r   r   s           rS   test_from_zpkzTest_dfreqresp.test_from_zpk  su    "cU3''
q$i((	:+++B9***BB#####rU   N)
r   r   r   r   r   r   r   r   r   r   r   rU   rS   r   r     s}        < < <1 1 1"+ + +	 	 	9 9 9
$ $ $*$ $ $ $ $rU   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )	Test_bodec                    d}t          dddg|          }dddt          j        g}t          ||          \  }}}g d}t	          ||d	
           g d}t	          ||d	
           t          t          j        |          |z  |           d S )Nr   r"   r'   r   r   r$   r   )gD!gvq!g$~;#g0*(r+   r   )gzGgJAg_)Pg     f)r   r0   r   r   r   r   r6   )	r>   rC   rR   r   r   magphaseexpected_magexpected_phases	            rS   r   zTest_bode.test_manual  s     !#4yR888#q"% v+++C =<<Cq9999 BAAE>1==== 	RXa[[2%r*****rU   c                    t          dddgd          }t          j        dddt          j        g          }t	          ||          \  }}}t          j        |dz            }t          j        |j        |          t          j        |j        |          z  }d	t          j	        t          |                    z  }t          ||           t          j        t          j        |                    }	t          ||	           d S )
Nr"   r'   r   r   r   r$   r   r/   g      4@)r   r0   r6   r   r   r   r   r&   rM   log10absr   rad2degangle)
r>   rR   r   r   r   r   r   r   r   r   s
             rS   r   zTest_bode.test_auto  s     "#4yS999Hc325)**v+++CVAF^^Jvz2&&FJ)C)CC bhs1vv...C... BHQKK00E>22222rU   c                     d}t          dddgd          }d}t          j        dt          j        |d	          |z  }t	          ||
          \  }}}t          ||           d S )Nr   r"   r'   r   r   rY   r   Fr   rZ   )r   r0   r3   r   r   r   )r>   rC   rR   r[   r   r   r   r   s           rS   
test_rangezTest_bode.test_range  ss     !#4yS999[BE1u===B
f***3Az*****rU   c                 B   t          dgddgd          }t                      5 }|                    t          d           |                    t          d           t	          |d	          \  }}}d d d            n# 1 swxY w Y   t          |d
         d           d S r   )r   r	   r   r   r   r   )r>   rR   r   r   r   r   s         rS   r   zTest_bode.test_pole_one  s     "1#2w3777   	/CJJ~/?J@@@JJ~/JJKKK!&A...MAsE	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	QqT2s   AA>>BBc                 R    t          dgg dd          }t          |d           d S )Nr'   )r'   r   r   r   r   r)   rZ   )r   r   r   s     rS   test_imaginaryzTest_bode.test_imaginary$  s7     "1#{{{s;;;frU   c                 b    t          dgddg          }t          t          t          |           d S r   )r   r<   r=   r   r   s     rS   r   zTest_bode.test_error*  s/    aS1a&!!neV44444rU   N)	r   r   r   r   r   r   r   r   r   r   rU   rS   r   r     sn        + + +&3 3 3"	+ 	+ 	+	 	 	  5 5 5 5 5rU   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestTransferFunctionZConversionz=Test private conversions between 'z' and 'z**-1' polynomials.c                     g d}g d}t          j        ||          \  }}t          ||           t          ||           t          j        ||          \  }}t          ||           t          ||           d S )Nr)   r*   r+   r%         r   
_z_to_zinvr   
_zinv_to_zr>   r&   rM   num2den2s        rS   	test_fullz)TestTransferFunctionZConversion.test_full3  s    iiii%0c::
dS$S$%0c::
dS$S$rU   c                     ddg}g d}t          j        ||          \  }}t          g d|           t          ||           t          j        ||          \  }}t          g d|           t          ||           d S )Nr)   r*   r   )r   r)   r*   )r)   r*   r   r   r   s        rS   test_numeratorz.TestTransferFunctionZConversion.test_numerator?  s    !fii%0c::
dYYY%%%S$%0c::
dYYY%%%S$rU   c                     g d}ddg}t          j        ||          \  }}t          ||           t          g d|           t          j        ||          \  }}t          ||           t          g d|           d S )Nr   r%   r   )r   r%   r   )r%   r   r   r   r   s        rS   test_denominatorz0TestTransferFunctionZConversion.test_denominatorK  s    ii!f%0c::
dS$YYY%%%%0c::
dS$YYY%%%%%rU   N)r   r   r   __doc__r  r  r  r   rU   rS   r   r   0  sG        GG
  
  
 
  
  
 
& 
& 
& 
& 
&rU   r   )"numpyr0   numpy.testingr   r   r   r   r   r   r	   pytestr
   r<   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   rS   <module>r     sr      . . . . . . . . . . . . . . . . . . + * * * * *= = = = = = = = = = = = = = = = = = = = = = = = = = = =
J/ J/ J/ J/ J/ J/ J/ J/Z7 7 7 7 7 7 7 7># # # # # # # #># # # # # # # #<% % % % % % % %*X$ X$ X$ X$ X$ X$ X$ X$vE5 E5 E5 E5 E5 E5 E5 E5P%& %& %& %& %& %& %& %& %& %&rU   