
    BpjY                        S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	J
r
JrJrJr  S SKJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJ r   S"S jr! " S S	5      r" " S
 S5      r# " S S5      r$ " S S5      r% " S S5      r& " S S5      r' " S S5      r( " S S5      r) " S S5      r*\" \5       " S S5      5       r+ " S S5      r, " S S5      r-\R\                  R_                  S \\\\\/5      S! 5       r0g)#    N)GenericAlias)raises)assert_almost_equalxp_assert_equalxp_assert_closemake_xp_test_casexp_result_type)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficientsc           
         UR                  5       nU  H  nSn[        UR                  S   5       H  n[        R                  " [        R
                  " U5      [        R                  " U5      /[        R
                  " X   5      [        R                  " X   5      /X#5      (       d  Mz  Sn[        R                  " X5          O   U(       a  M  [        S[        U5      -   S-   [        U5      -   5      e   g)a  
Check each pole in P1 is close to a pole in P2 with a 1e-8
relative tolerance or 1e-8 absolute tolerance (useful for zero poles).
These tolerances are very strict but the systems tested are known to
accept these poles so we should not be far from what is requested.
Fr   TzCan't find pole z in N)
copyrangeshapenpallcloserealimagdelete
ValueErrorstr)P1P2rtolatolp1foundp2_idxs          Z/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer,      s     
BBHHQK(F{{BGGBK5GGBJ/1DE' ' 		"% ) u/#b'9FBSWLMM     c                   2    \ rS rSrS rS rS rS rS rSr	g)	TestPlacePoles*   c                 "   [        XU40 UD6n[        R                  R                  U[        R                  " X%R
                  5      -
  5      u  pg[        XeR                  5        [        XeR                  5        [        X5R                  5        U$ )z{
Perform the most common tests on the poles computed by place_poles
and return the Bunch object for further specific tests
)	r   r   linalgeigdotgain_matrixr,   requested_polescomputed_poles)selfABPkwargsfsfexpected_s           r+   _checkTestPlacePoles._check,   sj    
 !,V,iimmAq//(B$BCH&9&9:H&8&89A112
r-   c                    [         R                  " / SQ5      R                  SS5      n[         R                  " / SQ5      R                  SS5      n[         R                  " / SQ5      nU R                  XUSS9  U R                  XUSS9  [         R                  " S	S
9   U R                  XS5        S S S 5        g ! , (       d  f       g = f)NgGz?gʿg\(@gNbX9g<,Ԛg)\(r   g?gOn?d;O@gV-gOn@g~jt?rD   grh|?gE    )r   K@V-?rG   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rI   rI      rS   )r   arrayreshaper@   errstate)r8   r9   r:   r;   s       r+   	test_realTestPlacePoles.test_real8   s     HH % &&-gam 	
 HH=>FFq!LHH34 	A!F+A!D) [[*KKi( +**s   B;;
C	c                    [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " SS/SS/SS/SS//5      n[         R                  " / SQ5      n[         R                  " SSS9   U R                  XU5        S S S 5        / S	Qn[         R                  " SSS9   U R                  XUS
S9  S S S 5        [         R                  " / SQ5      R	                  SS5      n[         R                  " / SQ5      R	                  SS5      n/ SQnU R                  XU5        [         R
                  " S5      [         R                  " S5      -
  n[         R
                  " S5      [         R                  " S/S-  S5      S S 2SS 24   -
  nXS S2S S24'   X%S S2S S24'   / SQn[         R                  " SSS9   U R                  XEU5        S S S 5        / SQnU R                  US S2S S24   US S2S S24   U5        / SQnU R                  US S2S S24   US S2S S24   U5        [         R                  " / SQ5      R	                  SS5      n[         R                  " / SQ5      R	                  SS5      n[         R                  " / SQ5      n[         R                  " SSS9   [        XU5        S S S 5        [         R                  " / SQ5      n[         R                  " SSS9   U R                  XU5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNd= f! , (       d  f       GN`= f! , (       d  f       N= f! , (       d  f       g = f)N)r      r   r   )r   r   r   竪@)r   r   r   r   r      )                          ?rQ   )dividerR   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirI   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rh   rh   )rh   rc   rc   )rb   (   2   <   F   y      4      y      4      @y      @      @y      @      )
rb   ri   rj   iiiir^   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rZ   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   rg   r   r   r   r   	   )
r   r   r   r   r\   r   r   r\   rI   rS   rI   )y            ?y                        ?            )rs   r]   rt   ru   )	r   rT   rV   r@   rU   oneseyediagr   )r8   r9   r:   r;   big_Abig_Bs         r+   test_complexTestPlacePoles.test_complexN   s    HHl%""$ % HHq!f!f!f!f 
 HH+, [[(;KKa  < %[[(;KKaK. < HHG
 WQq\ 	
 HH(
 wq| 	
 KA!
  + !R!21QR4!88bqb!ebqb!e=[[(;KKa( < 7E#2#crc'NE#2#crc'NA66E#2#crc'NE#2#crc'NA6 HH ) **1'!A, 	
HH*+33Aa8HH56[[(;a  <
 HH/0[[(;KKa  <;{ <; <;> <;  <; <;s<   2L&L;L'%L9'M

L
L$'
L69
M

Mc                 J   [         R                  " / SQ5      R                  SS5      n[         R                  " / SQ5      R                  SS5      n[         R                  " / SQ5      nU R                  XU5      n[         R                  " UR
                  5      (       d   e[         R                  " UR                  5      (       d   e[         R                  " S5      nU R                  XU5      n[         R                  " UR
                  5      (       d   e[         R                  " UR                  5      (       d   eUS S 2S4   R                  SS5      n[         R                  " S5      nU R                  XU5      nUR
                  S:X  d   eUR                  S:X  d   eg )NrC   rE   )r   rF   rG   rG   r   r   rH   r   r\   rI   rS   rE   rg   rf   rZ      rJ   )r`   r_   r]   rs   r   r\   )r   rT   rU   r@   isnanr&   nb_iter)r8   r9   r:   r;   r=   s        r+   test_tricky_BTestPlacePoles.test_tricky_B   sM    HH % &&-gam 	
 HH " ##*71a= 	

 HH34kk!" xx!!!!xx$$$$ HH()kk!"xx!!!!xx$$$$ acFNN1QHH()kk!" xx1}}{{ar-   c           
         [         R                  " / SQ5      R                  SS5      n[         R                  " / SQ5      R                  SS5      n[        [        [
        XSSS9  [        [        [
        X[         R                  " S5      R                  SS5      5        [        [        [
        US S 2S S 2[         R                  4   US5        [        [        [
        XS S 2S S 2[         R                  4   S5        [        [        [
        XS	5        [        [        [
        XS
5        [        [        [
        XSSS9  [        [        [
        XSSS9  [        [        [
        XS5        [        [        [
        [         R                  " S5      [         R                  " S5      S5        [        R                  " SS9 n[        R                  " S5        [        XSSSS9n[        U5      S:X  d   e[        US   R                  [        5      (       d   eS[        US   R                   5      ;   d   eUR"                  S:X  d   e S S S 5        [        [        [
        XS5        [        [        [
        US S 2S S24   US5        [        [        [
        XS S2S S 24   S5        [        [        [
        XSSS9  g ! , (       d  f       Ny= f) N)r   rZ   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   rE   )r   r   r   r   r\   r   r   r\   rI   ) 皙ffffff333333foorN   r\   )r   r   r   r   r]   )r   r   r   r0   r&   ird   )rs   rs   rs   rs   )rE   rE   )rE   rI   r\   rI   rS   rE   T)recordalways)r^   rs   r]   rv   gؗҜ<)r&   re   r^   z4Convergence was not reached after maxiter iterations)r`   r_                @rs   rS   )rs   r]   rv   )r`   r_   r   y             rM   )r   rT   rU   assert_raisesr"   r   newaxisrw   warningscatch_warningssimplefilterlen
issubclasscategoryUserWarningr#   messager   )r8   r9   r:   wr=   s        r+   test_errorsTestPlacePoles.test_errors   sB   HH9:BB1QGHH&'//!4 	j+q5J"	$ 	j+qhh45==aB	D 	j+q1RZZ/@!+	- 	j+qAa

N2C+	- 	j+q5MN 	j+q5EF 	j+q5J	 	j+q5J!	# 	j+q]C 	j+rwwu~ggeni	1
 $$D1Q!!(+aMrJCq6Q;;aennk::::J1R5==)* + *;;"$$$ 2 	j+q5KL 	j+q2A2w=I 	j+qBQBqD'=I 	j+q/	@' 21s   <BJ88
K N)
__name__
__module____qualname____firstlineno__r@   rW   r|   r   r   __static_attributes__r   r-   r+   r/   r/   *   s     
),N!`  D@@r-   r/   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)	TestSS2TFi  c           	          [        [        R                  " X45      [        R                  " X45      [        R                  " X145      [        R                  " X245      S5        g )Nr   )r
   r   zerosr8   pqrs       r+   check_matrix_shapesTestSS2TF.check_matrix_shapes  sC    bhhvhhvhhvhhv	#r-   c                 @    S H  u  pnU R                  XU5        M     g )N))rS   rS   rS   )r\   rS   rS   r\   r\   r\   )r   r   s       r+   test_shapesTestSS2TF.test_shapes  s"     9GA!$$Q1- 9r-   c                 B   [         R                  " / SQ5      n[         R                  " / SQ5      n[        X5      u  p4pV[        USS/SS//SS9  [        US	/S//SS9  [        US	S
//SS9  [        US	//SS9  [	        X4XV5      u  px[        US   USS9  [        XSS9  g )N)      ?      @      @)r          @r          r]   r\   r   vIh%<=r   r   rI   +=)r   rT   r   r   r
   )	r8   bar9   r:   CDbbaas	            r+   
test_basicTestSS2TF.test_basic  s    HH_%HH_%1[
aS"I1v.U;RD1#;U3RG951RD6.qQ"1qu-E*r-   c                    Sn[        U6 u  p#pE[        US//SS9  [        US//SS9  [        US//SS9  [        US//SS9  [        X#XE5      u  pg[        USS//SS9  [        USS/SS9  S/S	//S
4n[        U6 u  p#pE[        US//SS9  [        US//SS9  [        US/S//SS9  [        US/S	//SS9  [        X#XE5      u  pg[        USS/S	S//SS9  [        USS/SS9  g )N)rI   r\           r   r   r   r   r   rg   rI   r\   r   )r   r   r
   r8   tfr9   r:   r   r   numdens           r+   test_zero_order_round_trip$TestSS2TF.test_zero_order_round_trip   s!   BZ
aRD6.RD6.RD6.RD6.q$r1gYU3b!W51sQCj!_BZ
aRD6.RD6.RD1#;U3RD1#;U3q$r1g1v.U;b!W51r-   c                 d   SS/SS//SS/4n[        U6 u  p#pE[        US//SS9  [        US//SS9  [        US/S//SS9  [        US/S//SS9  [        X#XE5      u  pg[        USS	/SS//SS9  [        USS	/SS9  / S
Q/ SQ// SQ4n[        U6 u  p#pE[        USS/SS//SS9  [        US/S//SS9  [        USS/SS//SS9  [        US/S//SS9  [        X#XE5      u  pg[        U/ SQ/ SQ/SS9  [        U/ SQSS9  / SQ/ SQ// SQ4n[        U6 u  p#pE[        U/ SQ/ SQ/ SQ/SS9  [        US/S/S//SS9  [        U/ SQ/ SQ/SS9  [        US/S//SS9  [        X#XE5      u  pg[        U/ SQ/ SQ/SS9  [        U/ SQSS9  [        R                  " SSS//[
        S9SS/4n[        U6 u  p#pE[        US//SS9  [        US//SS9  [        US/S//SS9  [        US/S//SS9  [        X#XE5      u  pg[        USS/SS//SS9  [        USS/SS9  [        R                  " SS// SQ/[
        S9/ SQ4n[        U6 u  p#pE[        USS /SS//SS9  [        US/S//SS9  [        USS/S!S"//SS9  [        US/S//SS9  [        X#XE5      u  pg[        U/ S#Q/ SQ/SS9  [        U/ S$QSS9  g )%Nr\   rI   r   r   r   r   r         r   )r\   r   r\   r   )r   r   r   )r   r   r   )r\   rI   rS   r   )r   r]   rv   )r\   r   r   r   r\   r   r   )r   rI   rS   )r   r\   rI   rS   )r   r\   rI   rS   )r   rI   rS   rE   rS   dtyperf   g      ghe99ir]   )r\   rf   rg   r   rv   rs   )r   r\   r]   )r   rf   rg   )r   r   r
   r   rT   objectr   s           r+   test_simo_round_tripTestSS2TF.test_simo_round_trip8  s?   1v1vA'BZ
aSE7/RD6.RD3%=u5RD2$<e4q$r2hR1>b"XE2)$i0BZ
aS#JR1>RD2$<e4S"IBx0u=RD2$<e4q$lL9F\6)$l3BZ
aM9i@uMRD1#s+%8J	2?RD1#;U3q$m\:G]7hhAq6{&1Aq6:BZ
aSE7/RD6.RD2$<e4RD1#;U3q$r1g1v.U;b!W51hhB+6:IFBZ
aS"I1v.U;RD1#;U3RHr2h/e<RD1#;U3q$k95EBZe4r-   c                     / SQ/ SQ/ SQ/nS/S/S//n/ SQ/nS//n[        XX45      u  pV[        U/ SQ/SS	S
9  [        U/ SQSS9  g )Nr   )r   r   r\   )r]   rv   rs   r   r\   )rg   r\   r   )r   r   r   r   r   r   r&   r'   )r   r         @r   r   )r
   r   )r8   r9   r:   r   r   r   r   s          r+   test_all_int_arraysTestSS2TF.test_all_int_arraysq  s\    	<0S1#sOKSEq$23%eL1>r-   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " S/S/S/S//5      n[         R                  " / SQ/ S	Q/ S
Q/5      n[         R                  " S/S/S//5      n[        XX45      u  pV[        XUS   US   5      u  px[        XUS   US   5      u  p[        XUS   US   5      u  p[        XSS9  [        XSS9  [        XSS9  [        U[         R                  " XyU45      SSS9  g )N)r   r   r   r   )r   r   r   r   )g      r   r   r   )g              @r   r   333333?r   g      @)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r\   rI   r   r   r   r   )r   rT   r
   r   vstack)r8   r9   r:   r   r   b_allr   b0a0b1a1b2a2s                r+   test_multioutputTestSS2TF.test_multioutputz  s!    HH++++- . HHseeee  HH***, - HHseee 
 q$ qQqT1Q4(qQqT1Q4(qQqT1Q4( 	E*E*E*ryy""6UOr-   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r+   r   r     s'    #.+2075r?$Pr-   r   c                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)TestLsimi  rZ   c                     [         R                  " 5          [         R                  " S[        5        [	        U6 nS S S 5        U$ ! , (       d  f       W$ = f)NrQ   )r   r   r   r   r   )r8   argssystems      r+   
lti_nowarnTestLsim.lti_nowarn  sC    $$&!!(O<$ZF '  '& s   $A
Ac                     U R                  SSSS5      n[        R                  " SS5      n[        R                  " U5      n[	        XUS/S9u  pEn[        R
                  " U* 5      n[        Xg5        [        XW5        g Nr   r   r   r   rg   X0r   r   linspace
zeros_liker   expr   r8   r   tutoutyx
expected_xs           r+   test_first_orderTestLsim.test_first_order  si     R2.KK!MM!&QC51
VVTE]
A*A*r-   c                 
   [         R                  " SSS5      n[         R                  " U5      nU R                  S// SQ5      n[	        X2USS/S9u  pEnSU-
  [         R
                  " U* 5      -  n[        US S 2S4   U5        g )Nr   rc   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r8   r   r   r   r   r   r   r   s           r+   test_second_orderTestLsim.test_second_order  sv    KK2t$MM! #8&QC:6
DjBFFD5M1
AadGZ0r-   c                     U R                  SSSS5      n[        R                  " SS5      nUn[        XU5      u  pEnSUS-  -  n[	        XgU R
                  S9  [	        XWU R
                  S9  g )Nr   r   r   rg         ?rI   decimal)r   r   r   r   r   digits_accuracyr   s           r+   test_integratorTestLsim.test_integrator  sh    RR0KK!&Q'
47]
A43G3GHA43G3GHr-   c                 v   [         R                  " SS/SS//5      n[         R                  " SS/SS//5      n[         R                  " SS/5      n[         R                  " S5      nU R                  XX45      n[         R                  " SSS5      n[         R                  " [        U5      S	45      n[        XWUSS/S
9u  pn
[         R                  " U* 5      n[         R                  " U* 5      n[         R                  " SU-  5      n[        X5        [        U
S S 2S4   U5        [        U
S S 2S4   U5        g )Nr   r   r   r   r\   rI   r   g      $@   rI   )UTr   r\   	r   rT   r   r   r   r   r   r   r   r8   r9   r:   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r+   test_two_statesTestLsim.test_two_states  s   HHtSkC;/0HHsCj3*-.HHc3Z HHVq,KK4$HHc!fa[!&Sz:
VVTE]
ffdUmffTD[)A*AadG[1AadG[1r-   c                    [         R                  " SS/SS//5      n[         R                  " S/S//5      n[         R                  " SS//5      nU R                  XUS5      n[         R                  " SS5      n[         R                  " U5      n[        XFU5      u  pxn	[         R                  " [         R                  " SUS-  -  U/5      5      n
US-  n[        XU R                  S9  [        XU R                  S9  g )	Nr   r   r   r   rg   r   rI   r  )	r   rT   r   r   	ones_liker   	transposer   r  )r8   r9   r:   r   r   r   r   r   r   r   r   r  s               r+   test_double_integratorTestLsim.test_double_integrator  s    HHr2hR)*HHrdRD\"HHr2hZ q"-KK!LLO&Q'
\\"((C$'M4+@"AB
1W
A43G3GHA43G3GHr-   c                    [         R                  " SS/SS//5      n[         R                  " S/S//5      n[         R                  " SS//5      nU R                  XUS5      n[         R                  " SS5      n[         R                  " U5      n[        XFUSS/S9u  pxn	U[         R                  " U* 5      -  n
[        X5        g r   )r   rT   r   r   r   r   r   r   )r8   r9   r:   r   r   r   r   r   r   r   r  s              r+   test_jordan_blockTestLsim.test_jordan_block  s     HHsBi"c+,HHrdRD\"HHr2hZ q"-KK!MM!&QC:6
BFFD5M)
A*r-   c                 v   [         R                  " SS/SS//5      n[         R                  " SS/SS//5      n[         R                  " SS/5      n[         R                  " S5      nU R                  XX45      n[         R                  " SSS5      n[         R                  " [        U5      S	45      n[        XWUSS/S
9u  pn
[         R                  " U* 5      n[         R                  " U* 5      n[         R                  " SU-  5      n[        X5        [        U
S S 2S4   U5        [        U
S S 2S4   U5        g )Nr   r   r   r   r  r   r   e   rI   r   r\   r  r  s                 r+   	test_misoTestLsim.test_miso  s   HHtSkC;/0HHsCj3*-.HHc3Z HHUOq,KK3$HHc!fa[!&QC:6
VVTE]
ffdUmffT$Y'A*AacFK0AacFK0r-   c                     U R                  SSSS5      n[        R                  " SS5      n[        R                  " U5      n[	        XUS/S9u  pEn[        R
                  " U* 5      n[        XW5        g )Nr   r   r   r\   rI   r   r   )r8   r   r   r   r   r   r   r  s           r+   test_nonzero_initial_time"TestLsim.test_nonzero_initial_time  s_    R2.KK!MM!&QC51
VVTE]
A*r-   c                     [         R                  " / SQ5      n[         R                  " / SQ5      nS/SS/4n[        [        SS9   [	        X2US/S9u  pEnS S S 5        g ! , (       d  f       g = f)N)r   r   r   r   )r   r   r   r   r   r   z"Time steps are not equally spaced.)matchr   )r   rT   r   r"   r   )r8   r   r   r   r   r   r   s          r+   test_nonequal_timesteps TestLsim.test_nonequal_timesteps  se    HH)*HH)*%#s$:!EGfu5JDQG G Gs   A
A-r   N)r   r   r   r   r  r   r   r   r  r  r  r  r  r  r#  r   r   r-   r+   r   r     s;    O	+	1I2&I+ 1$+6r-   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestImpulsei  c                 p    S/SS/4n[        U5      u  p#[        R                  " U* 5      n[        X45        g Nr   r   r   r   r   r8   r   r   r   r  s        r+   r   TestImpulse.test_first_order   s6     %#c#&/VVTE]
A*r-   c                     S/SS/4nSn[         R                  " SSU5      n[        XS9u  pEUR                  U4:X  d   e[	        XC5        [         R
                  " U* 5      n[	        XV5        g )Nr   r  r   r   r
  )r   r   r   r   r   r   r8   r   nr   r   r   r  s          r+   test_first_order_fixed_time'TestImpulse.test_first_order_fixed_time(  sj    
 %#c#KK3"&&zzaT!!!D$VVQBZ
A*r-   c                 t    S/SS/4n[        USS9u  p#S[        R                  " U* 5      -  n[        X45        g Nr   r   r   r   r)  r*  s        r+   test_first_order_initial$TestImpulse.test_first_order_initial6  s>    
 %#c#&S)2664%=(
A*r-   c                 v    S/SS/4n[        US/S9u  p#S[        R                  " U* 5      -  n[        X45        g r3  r)  r*  s        r+   test_first_order_initial_list)TestImpulse.test_first_order_initial_list@  s@    
 %#c#&cU+2664%=(
A*r-   c                 n    S/SS/4n[        U5      u  p#[        R                  " U5      n[        X45        g Nr   r   )r   r   r  r   r*  s        r+   r  TestImpulse.test_integratorJ  s3    %#c#&/\\$'
A*r-   c                 v    S// SQ4n[        U5      u  p#U[        R                  " U* 5      -  n[        X45        g )Nr   r   r)  r*  s        r+   r   TestImpulse.test_second_orderQ  s7     %)&/BFFD5M)
A*r-   c                 P    S// SQ4n[        US/SS/S9u  p#[        US/S/S9u  p#g )Nr   r   rS   rg   rf   r   r
  r   r8   r   r   r   s       r+   test_array_likeTestImpulse.test_array_likeZ  s:    %)&aSQF3&aSQC0ar-   c                 ,    S// SQ4n[        USSS9u  p#g )Nr   r   rS   rg   r?  r@  rA  s       r+   test_array_like2TestImpulse.test_array_like2a  s     %)&Q!,ar-   r   N)r   r   r   r   r   r0  r4  r7  r  r   rB  rE  r   r   r-   r+   r&  r&    s*    ++++++1-r-   r&  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestStepif  c                 v    S/SS/4n[        U5      u  p#S[        R                  " U* 5      -
  n[        X45        g r(  r   r   r   r   r*  s        r+   r   TestStep.test_first_orderg  s;     %#c#v,2664%=(
A*r-   c                     S/SS/4nSn[         R                  " SSU5      n[        XS9u  pEUR                  U4:X  d   e[	        XC5        S[         R
                  " U* 5      -
  n[	        XV5        g )Nr   r  r   r   r-  r\   )r   r   r   r   r   r   r.  s          r+   r0  $TestStep.test_first_order_fixed_timeo  sn    
 %#c#KK3"v#zzaT!!!D$^
A*r-   c                 z    S/SS/4n[        USS9u  p#SS[        R                  " U* 5      -  -   n[        X45        g Nr   r   r   r\   r   rJ  r*  s        r+   r4  !TestStep.test_first_order_initial}  sC    
 %#c#v#&RVVTE]**
A*r-   c                 |    S/SS/4n[        US/S9u  p#SS[        R                  " U* 5      -  -   n[        X45        g rO  rJ  r*  s        r+   r7  &TestStep.test_first_order_initial_list  sE    
 %#c#v3%(RVVTE]**
A*r-   c                 F    S/SS/4n[        U5      u  p#Un[        X45        g r:  )r   r   r*  s        r+   r  TestStep.test_integrator  s,     %S	"v,
A*r-   c                     S// SQ4n[        U5      u  p#SSU-   [        R                  " U* 5      -  -
  n[        X45        g )Nr   r   r\   rJ  r*  s        r+   r   TestStep.test_second_order  s@     %)v,!d(bffdUm33
A*r-   c                 .    S// SQ4n[        USS/S9u  p#g )Nr   r   rg   rf   r-  r   rA  s       r+   rB  TestStep.test_array_like  s"    %)v!Q(ar-   c                 "    [        / S/S45        g )Nr^   y      ?        rX  r8   s    r+   test_complex_inputTestStep.test_complex_input  s     	b2$r-   r   N)r   r   r   r   r   r0  r4  r7  r  r   rB  r\  r   r   r-   r+   rH  rH  f  s*    ++++++)r-   rH  c                       \ rS rSrS rSrg)TestLtii  c                    [        S/S/5      n[        U[        5      (       d   e[        U[         5      (       d   e[        U[        5      (       a   eUR                  b   e[        [
        R                  " / 5      [
        R                  " S/5      S5      n[        U[        5      (       d   e[        U[         5      (       d   e[        U[        5      (       a   eUR                  b   e[        / S/S5      n[        S/S/SS5      n[        U[        5      (       d   e[        U[         5      (       d   e[        U[        5      (       a   eUR                  b   eg )Nr\   r^   rS   )	r   
isinstancer   r   dtr   rT   r   r   r8   ss     r+   test_lti_instantiationTestLti.test_lti_instantiation  s1   
 bTN!-....!S!!!!a&&&&tt|| bhhtna0!^,,,,!S!!!!a&&&&tt|| RD!bT1a !Z((((!S!!!!a&&&&tt||r-   r   N)r   r   r   r   re  r   r   r-   r+   r_  r_    s    r-   r_  c                   ,    \ rS rSrS rS rS rS rSrg)TestStateSpacei  c                    [        SSSS5        [        S/S/S/S/5        [        [        R                  " SS/SS//5      [        R                  " S/S//5      [        R                  " SS//5      [        R                  " S//5      5        [        R                  " S/[        R                  S9n[        USSS5      nUR                  R
                  UR                  R
                  s=:X  aK  UR                  R
                  s=:X  a0  UR                  R
                  s=:X  a  [        R                  :X  d   e   e[        USSS5      nUR                  R
                  UR                  R
                  s=:X  aK  UR                  R
                  s=:X  a0  UR                  R
                  s=:X  a  [        R                  :X  d   e   eg )Nr\   rI   rS   rE   r   r   y      ?      ?)r   r   rT   int64r9   r   r:   r   r   float64
complex128)r8   AAss0ss1s       r+   test_initialization"TestStateSpace.test_initialization  s?   1aAA3aS1#&288aVaV,-rxx!qc
/C88aVH%rxx!	8 XXqc*Q1%uu{{ceekkUSUU[[UCEEKKU2::UUUUUQ4(uu{{ceekkXSUU[[XCEEKKX2==XXXXXr-   c                 H   [        SSSS5      n[        UR                  5       [         5      (       d   e[        UR                  5       [        5      (       d   e[        UR                  5       [        5      (       d   e[        U5      ULd   eUR                  5       ULd   eg )Nr\   rI   rS   rE   )r   ra  to_ssto_tfr   to_zpkr   rc  s     r+   test_conversionTestStateSpace.test_conversion  s    q!Q"!'')Z0000!'')%56666!((*n5555 !}A%%%wwy!!!r-   c                     [        SSSS5      n[        UR                  S/5        [        UR                  S/5        UR                  b   eg )Nr\   r   r   )r   r   polesr   rb  rc  s     r+   test_propertiesTestStateSpace.test_properties  sB    
 q!Q""&"&tt||r-   c                     " S S5      n[        [        R                  " SS/SS//5      [        R                  " S/S//5      [        R                  " SS//5      [        R                  " S//5      5      n[        [        R                  " S	S
/SS
//5      [        R                  " S/S//5      [        R                  " SS//5      [        R                  " S//5      5      nUR                  S5      nUR                  S5      nUR                  S5      n[        R                  " SSS5      n[        R
                  " U5      nSUS'   [        [        [        [        R                  [        R                  [        R                  4 H  n	[        [        U	" S5      U-  XS9S   U	" S5      [        X(US9S   -  5        [        [        X)" S5      -  XS9S   [        X(US9S   U	" S5      -  5        [        [        X)" S5      -  XS9S   [        X(US9S   U	" S5      -  5        [        [        5         U	" S5      U-    S S S 5        M     [        [        US-  XS9S   [        USU-  US9S   5        [        [        X#-  XS9S   [        U[        X8US9S   US9S   SS9  [        [        5         X"-    S S S 5        [        [        5         X$-    S S S 5        [        [        5         XE-    S S S 5        [        [        5         X!" 5       -    S S S 5        [        [        5         U" 5       U-    S S S 5        [        [        5         X!" 5       -    S S S 5        [        [        5         U" 5       U-    S S S 5        [        [        US-   XS9S   SU-  [        X(US9S   -   5        [        [        5         U[        R                  " SS/5      -     S S S 5        [        [        5         [        R                  " SS/5      U-     S S S 5        [        [        5         X$-     S S S 5        [        [        5         U[        R                  " SS/SS//5      -    S S S 5        [        [        5         XE-     S S S 5        [        [        5         X!" 5       -     S S S 5        [        [        5         U" 5       U-     S S S 5        [        [        X#-   XS9S   [        X(US9S   [        X8US9S   -   5        [        [        US-
  XS9S   SU-  [        X(US9S   -   5        [        [        SU-
  XS9S   SU-  [        U* XS9S   -   5        [        [        X#-
  XS9S   [        X(US9S   [        X8US9S   -
  5        [        [        5         X!" 5       -
    S S S 5        [        [        5         U" 5       U-
    S S S 5        XF-   n
U
R                   S:X  d   eXF-  n
U
R                   S:X  d   eSU-  n
U
R                   S:X  d   eU* n
U
R                   S:X  d   eg ! , (       d  f       GM  = f! , (       d  f       GNz= f! , (       d  f       GNp= f! , (       d  f       GNf= f! , (       d  f       GNW= f! , (       d  f       GNG= f! , (       d  f       GN8= f! , (       d  f       GN(= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNs= f! , (       d  f       GNc= f! , (       d  f       GN= f! , (       d  f       GN= f)Nc                       \ rS rSrSrg).TestStateSpace.test_operators.<locals>.BadTypei  r   N)r   r   r   r   r   r   r-   r+   BadTyper~    s    r-   r  rL   gffffff?r   gr\   r   rK   gg?皙?g?d   rI   )r	  r
  gh㈵>)r'   rS   rE   rs   )r   r   rT   to_discreter   r   intfloatcomplexfloat32rl  r   r   r   	TypeErrorr"   rb  )r8   r  s1s2
s_discretes2_discretes3_discreter   r   typrd  s              r+   test_operatorsTestStateSpace.test_operators  s   	 	 4+T{!;<1#s,1a&*1# 4,d!<=1#s,1a&*1# ^^C(
nnS)nnS) KK1c"MM!! R]]BHHMCDQ"7:FT"Q%7%::< Dc!f7: A.q1CF:< Dc!f7: A.q1CF:< y)A *) N 	R!Vq.q1R1q5A.q1	3 	RW/2R41#5a#8A>qA!	# 9%G & 9%O & 9%$ & 9%N & 9%IN & 9%N & 9%IN & 	R!Vq.q1AR 21 55	7 :&1a&!! ' :&HHaVr! ' 9%O & :&Aq6Aq6*++ ' 9%$ & 9%N & 9%IN & 	RW/2R*1-R0B10EE	G 	R!Vq.q1Qb!3A!66	8 	QVq.q1AbSA 3A 66	8 	RW/2R*1-R0B10EE	G 9%N & 9%IN & $tts{{$tts{{
Ntts{{Ktts{{q *) &% &% &% &% &% &% &% '& '& &% '& &% &% &%  &% &%s   5X4X,X>,Y
Y")Y4
Z,Z9Z*,Z<[; [ 2[2
\/\
\(-\:
X)	,
X;>
Y
Y"
Y14
Z
Z
Z'*
Z9<
[
[ 
[/2
\
\
\%(
\7:
]	r   N)	r   r   r   r   rp  rv  rz  r  r   r   r-   r+   rh  rh    s    Y	"~r-   rh  c                   &    \ rS rSrS rS rS rSrg)TestTransferFunctionio  c                     [        SS5        [        S/S/5        [        [        R                  " S/5      [        R                  " S/5      5        g Nr\   rI   )r   r   rT   r[  s    r+   rp  (TestTransferFunction.test_initializationp  s8    A!qc"1#!6r-   c                 L   [        SS/SS/5      n[        UR                  5       [        5      (       d   e[        UR	                  5       [         5      (       d   e[        UR                  5       [        5      (       d   e[        U5      ULd   eUR	                  5       ULd   eg )Nr\   r   r^   )r   ra  rs  r   rt  ru  r   rc  s     r+   rv  $TestTransferFunction.test_conversionv  s    aVaW-!'')Z0000!'')%56666!((*n5555  "!+++wwy!!!r-   c                     [        SS/SS/5      n[        UR                  S/5        [        UR                  S/5        g )Nr\   r   r^   r   r   )r   r   ry  r   rc  s     r+   rz  $TestTransferFunction.test_properties  s8    
 aVaW-"&"&r-   r   N)r   r   r   r   rp  rv  rz  r   r   r-   r+   r  r  o  s    7	"'r-   r  c                        \ rS rSrS rS rSrg)TestZerosPolesGaini  c                     [        SSS5        [        S/S/S5        [        [        R                  " S/5      [        R                  " S/5      S5        g r  )r   r   rT   r[  s    r+   rp  &TestZerosPolesGain.test_initialization  s>    q!QsQC#rxx}bhhsmQ7r-   c                 F   [        SSS5      n[        UR                  5       [        5      (       d   e[        UR	                  5       [
        5      (       d   e[        UR                  5       [         5      (       d   e[        U5      ULd   eUR                  5       ULd   eg )Nr\   rI   rS   )r   ra  rs  r   rt  r   ru  rc  s     r+   rv  "TestZerosPolesGain.test_conversion  s    1a#!'')Z0000!'')%56666!((*n5555 a )))xxz"""r-   r   N)r   r   r   r   rp  rv  r   r   r-   r+   r  r    s    8	#r-   r  c            	          \ rS rSrSS/SS//rS/S//rSS//rS//rS	 rS
 r	S r
S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\R<                  R?                  S/ SQ5      \R<                  R?                  S / SQ5      \R<                  R?                  S!/ S"Q5      \R<                  R?                  S#/ S"Q5      \R<                  R?                  S$S/// //5      S% 5       5       5       5       5       r S&r!g')(Test_abcd_normalizei  r   r   r   r   r   r         @c                 ,    [        [        [        5        g N)r   r"   r   r[  s    r+   test_no_matrix_fails(Test_abcd_normalize.test_no_matrix_fails  s    j.1r-   c                 t    [        [        [        SS/U R                  U R                  U R
                  5        g )Nr\   r^   )r   r"   r   r:   r   r   r[  s    r+   test_A_nosquare_fails)Test_abcd_normalize.test_A_nosquare_fails  s'    j."gtvvtvvtvv	7r-   c                 t    [        [        [        U R                  SS/U R                  U R
                  5        g Nr^   rg   r   r"   r   r9   r   r   r[  s    r+   test_AB_mismatch_fails*Test_abcd_normalize.test_AB_mismatch_fails  '    j.ffr1gtvvtvv	7r-   c                 x    [        [        [        U R                  U R                  S/S//U R
                  5        g )Nr   r   )r   r"   r   r9   r:   r   r[  s    r+   test_AC_mismatch_fails*Test_abcd_normalize.test_AC_mismatch_fails  s+    j.ffdffusendff	>r-   c           	      t    [        [        [        U R                  U R                  U R
                  SS/5        g )Nr  r   )r   r"   r   r9   r:   r   r[  s    r+   test_CD_mismatch_fails*Test_abcd_normalize.test_CD_mismatch_fails  s'    j.ffdffdffsAh	8r-   c                 t    [        [        [        U R                  SS/U R                  U R
                  5        g r  r  r8   xps     r+   test_BD_mismatch_fails*Test_abcd_normalize.test_BD_mismatch_fails  r  r-   c                    ^ [        U4S jU R                  U R                  U R                  U R                  45      u  p#pE[        X#XES9u  pgp[        Xb5        [        Xs5        [        X5        [        X5        g )Nc                 8   > TR                  U TR                  S9$ Nr   asarrayrk  r   r  s    r+   <lambda>HTest_abcd_normalize.test_normalized_matrices_unchanged.<locals>.<lambda>      bjj"**j5r-   r9   r:   r   r   )mapr9   r:   r   r   r   r   )
r8   r  A_B_C_D_r9   r:   r   r   s
    `        r+   "test_normalized_matrices_unchanged6Test_abcd_normalize.test_normalized_matrices_unchanged  sb    5VVTVVTVVTVV,
 $b";
ar-   c                    [        U R                  U R                  SS/S5      u  pp4UR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eg )Nr\   r   )r   r9   r:   r   )r8   r9   r:   r   r   s        r+   r   Test_abcd_normalize.test_shapes  s    #DFFDFFQFA>
awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''r-   c                    UR                  U R                  UR                  S9nUR                  SUR                  S9nUR                  SUR                  S9n[	        X#US9u  pVpx[        XR5        [        Xc5        [        X5        UR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eg )Nr   rI   r   )r   r   r9   r:   r   r   r\   r  r9   rk  r   r   r   r   	r8   r  r  r  r  r9   r:   r   r   s	            r+    test_zero_dimension_is_not_none14Test_abcd_normalize.test_zero_dimension_is_not_none1      ZZbjjZ1XXfBJJX/XXfBJJX/#b"5
awwqzRXXa[(((wwqzRXXa[(((r-   c                    UR                  U R                  UR                  S9nUR                  SUR                  S9nUR                  SUR                  S9n[	        X#US9u  pVpx[        XR5        [        Xc5        [        Xt5        UR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eg )Nr   r  )r   rI   r9   r:   r   r   r\   r  	r8   r  r  r  r  r9   r:   r   r   s	            r+    test_zero_dimension_is_not_none24Test_abcd_normalize.test_zero_dimension_is_not_none2  r  r-   c                 l  ^ [        U4S jU R                  U R                  U R                  45      u  p#n[	        X#US9u  pVpxUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )Nc                 8   > TR                  U TR                  S9$ r  r  r  s    r+   r  4Test_abcd_normalize.test_missing_A.<locals>.<lambda>  r  r-   )r:   r   r   r   r\   )r  r:   r   r   r   r   )	r8   r  r  r  r  r9   r:   r   r   s	    `       r+   test_missing_A"Test_abcd_normalize.test_missing_A      5VVTVVTVV$

 $b"5
awwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444r-   c                 v   [        UR                  U R                  U R                  U R                  45      u  p#n[        X#US9u  pVpxUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eUR                  UR                  S   UR                  S   4:X  d   eg )N)r9   r   r   r   r\   )r  r  r9   r   r   r   r   )	r8   r  r  r  r  r9   r:   r   r   s	            r+   test_missing_B"Test_abcd_normalize.test_missing_B      dffdffdff%=>
#b"5
awwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444r-   c                 l  ^ [        U4S jU R                  U R                  U R                  45      u  p#n[	        X#US9u  pVpxUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )Nc                 8   > TR                  U TR                  S9$ r  r  r  s    r+   r  4Test_abcd_normalize.test_missing_C.<locals>.<lambda>  r  r-   r  r   r\   )r  r9   r:   r   r   r   r  s	    `       r+   test_missing_C"Test_abcd_normalize.test_missing_C  r  r-   c                 v   [        UR                  U R                  U R                  U R                  45      u  p#n[        X#US9u  pVpxUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   eUR                  UR                  S   UR                  S   4:X  d   eg )Nr  r   r\   )r  r  r9   r:   r   r   r   r  s	            r+   test_missing_D"Test_abcd_normalize.test_missing_D   r  r-   c                    [        UR                  U R                  U R                  45      u  p#[	        X#S9u  pEpgUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )N)r   r   r   r\   )r  r  r   r   r   r   )r8   r  r  r  r9   r:   r   r   s           r+   test_missing_AB#Test_abcd_normalize.test_missing_AB  s    RZZ$&&$&&!12#b/
awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444ww288A;4444r-   c                 @   [        UR                  U R                  U R                  45      u  p#[	        X#S9u  pEpgUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )N)r:   r   r   r\   )r  r  r:   r   r   r   )r8   r  r  r  r9   r:   r   r   s           r+   test_missing_AC#Test_abcd_normalize.test_missing_AC      RZZ$&&$&&!12#b/
awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444ww288A;4444r-   c                 @   [        UR                  U R                  U R                  45      u  p#[	        X#S9u  pEpgUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )N)r:   r   r   r\   )r  r  r:   r   r   r   )r8   r  r  r  r9   r:   r   r   s           r+   test_missing_AD#Test_abcd_normalize.test_missing_AD  r  r-   c                 @   [        UR                  U R                  U R                  45      u  p#[	        X#S9u  pEpgUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  S   UR
                  S   :X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eUR
                  UR
                  S   UR
                  S   4:X  d   eg )N)r9   r   r   r\   )r  r  r9   r   r   r   )r8   r  r  r  r9   r:   r   r   s           r+   test_missing_BC#Test_abcd_normalize.test_missing_BC$  r  r-   c                 \    [        [        [        UR                  U R                  5      S9  g )N)r   )r   r"   r   r  r   r  s     r+   test_missing_ABC_fails*Test_abcd_normalize.test_missing_ABC_fails.  s    j.BJJtvv4FGr-   c                     UR                  U R                  5      UR                  U R                  5      p2[        [        [
        X#S9  g )N)r9   r   )r  r9   r   r   r"   r   )r8   r  r9   r   s       r+   test_missing_BD_fails)Test_abcd_normalize.test_missing_BD_fails1  s/    zz$&&!"**TVV"41j.A;r-   c                     UR                  U R                  5      UR                  U R                  5      p2[        [        [
        X#S9  g )N)r9   r:   )r  r9   r:   r   r"   r   )r8   r  r9   r:   s       r+   test_missing_CD_fails)Test_abcd_normalize.test_missing_CD_fails5  s/    zz$&&!2::dff#51j.A;r-   A_dtype)Nrj  r  rk  	complex64rl  B_dtypeC_dtype)rj  r  rk  r  rl  D_dtyper   c           
         / n[        U R                  U R                  U R                  U/X#XE/5       H2  u  pUR	                  U	b  UR                  U[        Xi5      S9OS 5        M4     Uu  pp[        XXUSS9n[        XXS9u  ppU
R                  UR                  s=:X  a)  UR                  s=:X  a  UR                  s=:X  a  U:X  d   e   eg )Nr   T)r  force_floatingr  )
zipr9   r:   r   appendr  getattrr	   r   r   )r8   r   r  r  r  r  r  r   XX_dtyper9   r:   r   expected_dtypes                 r+   test_dtypesTest_abcd_normalize.test_dtypes:  s    * +74
JA KK& 

1GB$8
9,0	
 
a'ar$O#a7
aww!''IQWWII>IIIIIr-   r   N)"r   r   r   r   r9   r:   r   r   r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   pytestmarkparametrizer  r   r   r-   r+   r  r    sL   
sc3Z A
#A
sA
A277>87	(	)	)55555555H<<
 [[H
 [[H [[B [[B
 [[SSE7RD/2J 3		&Jr-   r  c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)	Test_bodei^  c                 ^    [        S/SS/5      n/ SQn[        XS9u  p#n/ SQn[        X5SS9  g )Nr\   r  r\   rc   r  r   )r   r]   ri   ro   r  r   r   r   )r8   r   r   magphaseexpected_mags         r+   test_01Test_bode.test_01`  s8     aS1a&!V)(Cq9r-   c                 ^    [        S/SS/5      n/ SQn[        XS9u  p#n/ SQn[        XESS9  g )Nr\   r  r\   rc   r  )gig33333Ur  r  )r8   r   r   r  r  expected_phases         r+   test_02Test_bode.test_02n  s8     aS1a&!V)+E1=r-   c                 ,   [        S/SS/5      n/ SQn[        XS9u  p#nUS-  n[        R                  " UR                  U5      [        R                  " UR
                  U5      -  nS[        R                  " [        U5      5      -  n[        X75        g )Nr\   r  r                ?g      4@)	r   r   r   polyvalr   r   log10absr   )r8   r   r   r  r  jwr   r  s           r+   test_03Test_bode.test_03z  sy     aS1a&!V)VJJvzz2&FJJ)CCbhhs1v..C.r-   c                 f   [        S/SS/5      n/ SQn[        XS9u  p#nUS-  n[        R                  " UR                  U5      [        R                  " UR
                  U5      -  n[        R                  " UR                  UR                  5      S-  [        R                  -  n[        XG5        g )Nr\   r  r  r%  g     f@)r   r   r   r&  r   r   arctan2r    r   pir   )r8   r   r   r  r  r)  r   r!  s           r+   test_04Test_bode.test_04  s     aS1a&!V)VJJvzz2&FJJ)CCAFFAFF3e;beeCE2r-   c                     [        S/SS/5      nSn[        R                  " SSU5      n[        XS9u  pEn[	        XC5        g Nr\   rc   rs   r/  )r   r   logspacer   r   )r8   r   r/  
expected_wr   r  r  s          r+   test_05Test_bode.test_05  sC     aS1a&![[Q*
V)A*r-   c                 R    [        S/SS/5      n[        USS9u  p#nUS   S:X  d   eg Nr\   r   rI   r3  g{Gz?r   r   r8   r   r   r  r  s        r+   test_06Test_bode.test_06  s6     aS1a&!Vq)tt||r-   c                 <    [        S// SQ5      n[        USS9u  p#ng )Nr\   )r\   r   r  rI   r3  r:  r;  s        r+   test_07Test_bode.test_07  s"     aS+&Vq)r-   c                     [        / / SQS5      nUR                  [        R                  " SSS5      S9u  p#n[	        [        U5      SSS	9  g )
N)rb   rj   ro   rp   rq   r\   r]   rk   r  r  i>   r  )r   r   r   r4  r   minr;  s        r+   test_08Test_bode.test_08  sB    R2A6bkk"b#&>?CJb9r-   c           	      X   [         R                  " / SQ5      n[        R                  " U5      R                  n[         R                  " S/S/S//5      n[         R                  " / SQ/5      n[         R                  " S//5      n[
        R                  " 5          [
        R                  " S[        5        [        X#XE5      n[        USS9u  pxn	S S S 5        S[         R                  " [         R                  " SSWS	-  -   -  5      5      -  n
[        WU
5        g ! , (       d  f       NQ= f)
Nr   r   r   r   r   r   r   r   r   rQ   r  r3     rf   )r   rT   r2   	companionr
  r   r   r   r   r   r   r'  sqrtr   )r8   r   r9   r:   r   r   r   r   r  r  expected_magnitudes              r+   test_from_state_spaceTest_bode.test_from_state_space  s     HH)*Q!!HHsecUSE*+HHo&'HHseW$$&!!(O<q_F 3/MAE '
  "((2773#1*3E+F"GGC!34 '&s   5D
D)r   N)r   r   r   r   r  r"  r*  r/  r6  r<  r?  rD  rM  r   r   r-   r+   r  r  ^  s/    :
>	/	3+*:5r-   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
Test_freqrespi  c                     [        S/SS/5      n/ SQn[        XS9u  p#/ SQn/ SQn[        UR                  USS9  [        UR                  USS9  g )Nr\   r   r  )gGz?r   gׁsF?)MbXrL   rR  r  r   r   r   r   r    )r8   r   r   Hexpected_reexpected_ims         r+   test_output_manual Test_freqresp.test_output_manual  sQ     aS1a&!$),AFFK;AFFK;r-   c                 P   [        S/SS/5      n/ SQn[        XS9u  p#US-  n[        R                  " UR                  U5      [        R                  " UR
                  U5      -  n[        UR                  UR                  5        [        UR                  UR                  5        g )Nr\   r  r  r%  )	r   r   r   r&  r   r   r   r   r    r8   r   r   rT  rd  r>   s         r+   test_outputTest_freqresp.test_output  s|     aS1a&!$F::fjj!,rzz&**a/HHAFFHMM2AFFHMM2r-   c                     [        S/SS/5      nSn[        R                  " SSU5      n[        XS9u  pE[	        XC5        g r2  )r   r   r4  r   r   )r8   r   r/  r5  r   rT  s         r+   test_freq_rangeTest_freqresp.test_freq_range  sA     aS1a&![[Q*
$A*r-   c                 P    [        S/SS/5      n[        USS9u  p#US   S:X  d   eg r9  )r   r   )r8   r   r   rT  s       r+   test_pole_zeroTest_freqresp.test_pole_zero  s4     aS1a&!!$tt||r-   c                    [         R                  " / SQ5      n[        R                  " U5      R                  n[         R                  " S/S/S//5      n[         R                  " / SQ/5      n[         R                  " S//5      n[
        R                  " 5          [
        R                  " S[        5        [        X#XE5      n[        USS9u  pxS S S 5        WS-  n	SSS	U	-  -   S	U	S	-  -  -   U	S
-  -   -  n
[        WR                  U
R                  5        [        UR                  U
R                  5        g ! , (       d  f       Nn= f)NrG  r   r   rH  rQ   r  r3  r%  rI   rS   )r   rT   r2   rJ  r
  r   r   r   r   r   r   r   r   r    )r8   r   r9   r:   r   r   r   r   rT  rd  r>   s              r+   rM  #Test_freqresp.test_from_state_space  s    HH)*Q!!HHseSE3%()HHo&'HHseW$$&!!(O<q_FFc*DA ' F319qAv-145AFFHMM2AFFHMM2 '&s   4D77
Ec                     [        / S/S-  S/5      n/ SQn[        XS9u  p#US-  nSUS-   S-  -  n[        UR                  UR                  5        [        UR                  UR                  5        g )Nr^   rE   r\   r  r  r%  rS  rZ  s         r+   test_from_zpkTest_freqresp.test_from_zpk  sg    RQs#$FAz>AFFHMM2AFFHMM2r-   r   N)r   r   r   r   rW  r[  r^  ra  rM  rf  r   r   r-   r+   rP  rP    s     <	3+3*3r-   rP  clsc                 T    [        U [        R                     [        5      (       d   eg r  )ra  r   rk  r   )rh  s    r+    test_subscriptable_generic_typesrj    s     c"**o|4444r-   ):0yE>rk  )1r   typesr   numpyr   r  r   r   scipy._lib._array_apir   r   r   r   r	   scipy.signalr
   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr2   r,   r/   r   r   r&  rH  r_  rh  r  r  r  r  rP  r  r  rj  r   r-   r+   <module>rr     s'       * 
H H H H
 8 N*V@ V@r[P [P|{6 {6|D- D-NF FR 8b bH' '8# #& >"|J |J #|J~a5 a5HI3 I3V 	J(.#tD55r-   