
    _Mh                        d dl Z d dlZd dlmZ d dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ 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& G d d          Z' G d d          Z( G d d          Z) G d d          Z* G d d           Z+dS )"    N)suppress_warnings)raises)assert_almost_equalxp_assert_equalxp_assert_close)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients:0yE>c           
         |                                 }| D ]}d}t          |j        d                   D ]}t          j        t          j        |          t          j        |          gt          j        ||                   t          j        ||                   g||          rd}t          j        ||            n|s2t          dt          |          z   dz   t          |          z             dS )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          ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer+      s    
B 
N 
NBHQK(( 	 	F{BGBKK5GBvJ//F1D1DE' '  	"f%%%  	N/#b''9FBSWWLMMM	N
N 
N    c                   P    e Zd Zd Zd Zd Zd Zej        j	        d             Z
dS )TestPlacePolesc                    t          |||fi |}t          j                            |t          j        ||j                  z
            \  }}t          ||j                   t          ||j                   t          ||j                   |S )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*   _checkzTestPlacePoles._check*   s    
 !Q,,V,,immAq#/(B(B$BCC!Hc&9:::Hc&8999Ac1222
r,   c                    t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }|                     |||d           |                     |||d           t          j        d	
          5  |                     ||d           d d d            d S # 1 swxY w Y   d S )NgGz?gʿg\(@gNbX9g<,Ԛg)\(r   g?gOn?d;O@gV-gOn@g~jt?rA   grh|?gE    )r   K@V-?rD   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rF   rF      rP   )r   arrayreshaper>   errstate)r6   r7   r8   r9   s       r*   	test_realzTestPlacePoles.test_real6   s7    H % % % & &&-gamm 	
 H===>>FFq!LLH33344 	Aq!F+++Aq!D))) [*** 	) 	)KK1i(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   2CCCc                 
   t          j        g dg dg dg dg          }t          j        ddgddgddgddgg          }t          j        g d          }t          j        dd          5  |                     |||           d d d            n# 1 swxY w Y   g d	}t          j        dd          5  |                     |||d
           d d d            n# 1 swxY w Y   t          j        g d                              dd          }t          j        g d                              dd          }g d}|                     |||           t          j        d          t          j        d          z
  }t          j        d          t          j        dgdz  d          d d dd f         z
  }||d dd df<   ||d dd df<   g d}t          j        dd          5  |                     |||           d d d            n# 1 swxY w Y   g d}|                     |d dd df         |d dd df         |           g d}|                     |d dd df         |d dd df         |           t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }t          j        dd          5  t          |||           d d d            n# 1 swxY w Y   t          j        g d          }t          j        dd          5  |                     |||           d d d            d S # 1 swxY w Y   d S )N)r      r   r   )r   r   r   竪@)r   r   r   r   r      )                          ?rN   )dividerO   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirF   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rd   rd   )rd   r_   r_   )r^   (   2   <   F   y      4      y      4      @y      @      @y      @      )
r^   re   rf   iiiirZ   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rV   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   rc   r   r   r   r   	   )
r   r   r   r   rX   r   r   rX   rF   rP   rF   )y            ?y                        ?            )ro   rY   rp   rq   )	r   rQ   rS   r>   rR   oneseyediagr   )r6   r7   r8   r9   big_Abig_Bs         r*   test_complexzTestPlacePoles.test_complexL   sG    Hlll%oo"ll"ll$ % % Hq!f!f!f!f  
 H+++,, [(;;; 	! 	!KK1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! %$$[(;;; 	/ 	/KK1aK...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ HG G G 
 WQq\\ 	
 H( ( ( 
 wq|| 	
 KJJAq!
   +  !R!2!2111QRR4!88bqb!ebqb!e===[(;;; 	) 	)KKua(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 766E#2#crc'NE#2#crc'NA6666 6 6E#2#crc'NE#2#crc'NA666 H ) ) ) * **1'!A,, 	
H***++33Aa88H55566[(;;; 	! 	!1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 H///00[(;;; 	! 	!KK1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sZ   -BBB6CC #C )HHH>LL #L M88M<?M<c                     t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }|                     |||          }t          j        |j                  sJ t          j        |j                  sJ t          j        d          }|                     |||          }t          j        |j                  sJ t          j        |j                  sJ |d d df                             dd          }t          j        d          }|                     |||          }|j        dk    sJ |j        dk    sJ d S )Nr@   rB   )r   rC   rD   rD   r   r   rE   r   rX   rF   rP   rB   rc   rb   rV      rG   )r\   r[   rY   ro   r   rX   )r   rQ   rR   r>   isnanr%   nb_iter)r6   r7   r8   r9   r;   s        r*   test_tricky_BzTestPlacePoles.test_tricky_B   s    H % % % & &&-gamm 	
 H " " " # ##*71a== 	

 H33344kk!Q"" x!!!!!x$$$$$ H())kk!Q""x!!!!!x$$$$$ aaacFNN1QH())kk!Q"" x1}}}}{ar,   c           
      z   t          j        g d                              dd          }t          j        g d                              dd          }t          t          t
          ||dd           t          t          t
          ||t          j        d                              dd                     t          t          t
          |d d d d t           j        f         |d           t          t          t
          ||d d d d t           j        f         d           t          t          t
          ||d	           t          t          t
          ||d
           t          t          t
          ||dd           t          t          t
          ||dd           t          t          t
          ||d           t          t          t
          t          j        d          t          j        d          d           t          j	        d          5 }t          j
        d           t          ||ddd          }t          |          dk    sJ t          |d         j        t                    sJ dt          |d         j                  v sJ |j        dk    sJ 	 d d d            n# 1 swxY w Y   t          t          t
          ||d           t          t          t
          |d d d df         |d           t          t          t
          ||d dd d f         d           t          t          t
          ||dd           d S ) N)r   rV   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   rB   )r   r   r   r   rX   r   r   rX   rF   ) 皙ffffff333333foorK   rX   )r   r   r   r   rY   )r   r   r   *   r%   ir`   )ro   ro   ro   ro   )rB   rB   )rB   rF   rX   rF   rP   rB   T)recordalways)rZ   ro   rY   rr   gؗҜ<)r%   ra   rZ   z4Convergence was not reached after maxiter iterations)r\   r[                @ro   rP   )ro   rY   rr   )r\   r[   r   y             rJ   )r   rQ   rR   assert_raisesr!   r   newaxisrs   warningscatch_warningssimplefilterlen
issubclasscategoryUserWarningr"   messager|   )r6   r7   r8   wr;   s        r*   test_errorszTestPlacePoles.test_errors   s    H999::BB1QGGH&&&''//!44 	j+q!5J"	$ 	$ 	$ 	$ 	j+q!h455==aBB	D 	D 	D 	j+q111RZ/@!+	- 	- 	- 	j+q!AAAaaa
N2C+	- 	- 	- 	j+q!5MNNN 	j+q!5EFFF 	j+q!5J	 	 	 	 	j+q!5J!	# 	# 	# 	# 	j+q!]CCC 	j+rwu~~genni	1 	1 	1
 $D111 	%Q!(+++aMrJJJCq66Q;;;;aenk:::::J1R5=))* * * *;"$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	j+q!5KLLL 	j+q2A2w=III 	j+q!BQBqqqD'=III 	j+q!/	@ 	@ 	@ 	@ 	@ 	@s   
BJ""J&)J&N)__name__
__module____qualname__r>   rT   rx   r}   pytestmarkthread_unsafer    r,   r*   r.   r.   (   s        
 
 
) ) ),N! N! N!`        D [@@ @@ @@ @@ @@r,   r.   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )		TestSS2TFc           	          t          t          j        ||f          t          j        ||f          t          j        ||f          t          j        ||f          d           d S )Nr   )r   r   zerosr6   pqrs       r*   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sc    bh1vh1vh1vh1v	# 	# 	# 	# 	#r,   c                 F    dD ]\  }}}|                      |||           d S )N))rP   rP   rP   )rX   rP   rP   rX   rX   rX   )r   r   s       r*   test_shapeszTestSS2TF.test_shapes
  s>     9 	. 	.GAq!$$Q1----	. 	.r,   c                    t          j        g d          }t          j        g d          }t          ||          \  }}}}t          |ddgddggd           t          |d	gdggd           t          |d	d
ggd           t          |d	ggd           t	          ||||          \  }}t          |d         |d           t          ||d           d S )N)      ?      @      @)r          @r          rY   rX   r   vIh%<=r   r   rF   +=)r   rQ   r	   r   r   )	r6   bar7   r8   CDbbaas	            r*   
test_basiczTestSS2TF.test_basic  s    H___%%H___%%1a[[
1aS"I1v.U;;;;RD1#;U3333RG951111RD6....q!Q""B1qu----AE******r,   c                    d}t          | \  }}}}t          |dggd           t          |dggd           t          |dggd           t          |dggd           t          ||||          \  }}t          |ddggd           t          |ddgd           dgd	ggd
f}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgd	ggd           t          ||||          \  }}t          |ddgd	dggd           t          |ddgd           d S )N)rF   rX           r   r   r   r   r   rc   rF   rX   r   )r	   r   r   r6   tfr7   r8   r   r   numdens           r*   test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trip  s   BZ
1aRD6....RD6....RD6....RD6....Aq!$$Sr1gYU3333b!W51111sQCj!_BZ
1aRD6....RD6....RD1#;U3333RD1#;U3333Aq!$$Sr1g1v.U;;;;b!W5111111r,   c                 v   ddgddggddgf}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgdggd           t          ||||          \  }}t          |dd	gddggd           t          |dd	gd           g d
g dgg df}t          | \  }}}}t          |ddgddggd           t          |dgdggd           t          |ddgddggd           t          |dgdggd           t          ||||          \  }}t          |g dg dgd           t          |g dd           g dg dgg df}t          | \  }}}}t          |g dg dg dgd           t          |dgdgdggd           t          |g dg dgd           t          |dgdggd           t          ||||          \  }}t          |g dg dgd           t          |g dd           t          j        dddggt
                    ddgf}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgdggd           t          ||||          \  }}t          |ddgddggd           t          |ddgd           t          j        ddgg dgt
                    g df}t          | \  }}}}t          |dd gddggd           t          |dgdggd           t          |ddgd!d"ggd           t          |dgdggd           t          ||||          \  }}t          |g d#g dgd           t          |g d$d           d S )%NrX   rF   r   r   r   r   r         r   )rX   r   rX   r   )r   r   r   )r   r   r   )rX   rF   rP   r   )r   rY   rr   )rX   r   r   r   rX   r   r   )r   rF   rP   )r   rX   rF   rP   )r   rX   rF   rP   )r   rF   rP   rB   rP   )dtyperb   g      ghe99irY   )rX   rb   rc   r   rr   ro   )r   rX   rY   )r   rb   rc   )r	   r   r   r   rQ   objectr   s           r*   test_simo_round_tripzTestSS2TF.test_simo_round_trip7  s   1v1vA'BZ
1aSE7////RD6....RD3%=u5555RD2$<e4444Aq!$$Sr2hR1>>>>b"XE2222yy)))$iii0BZ
1aS#JR1>>>>RD2$<e4444S"IBx0u====RD2$<e4444Aq!$$SlllLLL9FFFF\\\6666yy)))$lll3BZ
1aMMM999iii@uMMMMRD1#s+%8888JJJ			2????RD1#;U3333Aq!$$Smmm\\\:GGGG]]]7777hAq6{&111Aq6:BZ
1aSE7////RD6....RD2$<e4444RD1#;U3333Aq!$$Sr1g1v.U;;;;b!W51111hB+6:::IIIFBZ
1aS"I1v.U;;;;RD1#;U3333RHr2h/e<<<<RD1#;U3333Aq!$$Skkk9995EBBBBZZZe444444r,   c                     g dg dg dg}dgdgdgg}g dg}dgg}t          ||||          \  }}t          |g dgdd	
           t          |g dd           d S )Nr   )r   r   rX   )rY   rr   ro   r   rX   )rc   rX   r   )r   r   r   r   r   r   r%   r&   )r   r         @r   r   )r   r   )r6   r7   r8   r   r   r   r   s          r*   test_all_int_arrayszTestSS2TF.test_all_int_arraysp  s    YY			<<<0S1#sOYYKSEAq!$$S2223%eLLLL111>>>>>>r,   c                    t          j        g dg dg dg dg          }t          j        dgdgdgdgg          }t          j        g dg d	g d
g          }t          j        dgdgdgg          }t          ||||          \  }}t          |||d         |d                   \  }}t          |||d         |d                   \  }	}
t          |||d         |d                   \  }}t          ||d           t          |
|d           t          ||d           t          |t          j        ||	|f          dd           d S )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   rX   rF   r   r   r   r   )r   rQ   r   r   vstack)r6   r7   r8   r   r   b_allr   b0a0b1a1b2a2s                r*   test_multioutputzTestSS2TF.test_multioutputy  s    H++++++++++++- . . Hseeee   H*********, - - Hseee  
 Aq!$$q q!QqT1Q4((Bq!QqT1Q4((Bq!QqT1Q4((B 	AE****AE****AE****ry"b"66UOOOOOOr,   N)
r   r   r   r   r   r   r   r   r   r   r   r,   r*   r   r     s        # # #. . .+ + +2 2 2075 75 75r? ? ?$P $P $P $P $Pr,   r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestLsimrV   c                     t                      5 }|                    t                     t          | }d d d            n# 1 swxY w Y   |S N)r   filterr   r
   )r6   argssupsystems       r*   
lti_nowarnzTestLsim.lti_nowarn  s       	 CJJ'''$ZF	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  s   $?AAc                 "   |                      dddd          }t          j        dd          }t          j        |          }t	          |||dg          \  }}}t          j        |           }t          ||           t          ||           d S Nr   r   r   r   rc   X0r   r   linspace
zeros_liker   expr   r6   r   tutoutyx
expected_xs           r*   test_first_orderzTestLsim.test_first_order  s     R2..K!M!&!QC5111
aVTE]]
Az***Az*****r,   c                 (   t          j        ddd          }t          j        |          }|                     dgg d          }t	          |||ddg          \  }}}d|z
  t          j        |           z  }t          |d d df         |           d S )Nr   r_   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r6   r   r   r   r   r   r   r   s           r*   test_second_orderzTestLsim.test_second_order  s    K2t$$M! #88&!QC:666
aDjBFD5MM1
AaaadGZ00000r,   c                     |                      dddd          }t          j        dd          }|}t          |||          \  }}}d|dz  z  }t	          ||| j                   t	          ||| j                   d S )Nr   r   r   rc         ?rF   decimal)r   r   r   r   r   digits_accuracyr   s           r*   test_integratorzTestLsim.test_integrator  s    RR00K!&!Q''
a47]
Az43GHHHHAz43GHHHHHHr,   c                    t          j        ddgddgg          }t          j        ddgddgg          }t          j        ddg          }t          j        d          }|                     ||||          }t          j        ddd          }t          j        t          |          d	f          }t          |||ddg
          \  }}	}
t          j        |           }t          j        |           }t          j        d|z            }t          |	|           t          |
d d df         |           t          |
d d df         |           d S )Nr   r   r   r   rX   rF   r   g      $@   rF   )UTr   rX   	r   rQ   r   r   r   r   r   r   r   r6   r7   r8   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r*   test_two_stateszTestLsim.test_two_states  s>   HtSkC;/00HsCj3*-..Hc3Z  HVAq!,,K4$$Hc!ffa[!!&ASz:::
aVTE]]
fdUmmfTD[))Az***AaaadG[111AaaadG[11111r,   c                    t          j        ddgddgg          }t          j        dgdgg          }t          j        ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||          \  }}}	t          j        t          j        d|dz  z  |g                    }
|dz  }t          |	|
| j                   t          ||| j                   d S )	Nr   r   r   r   rc   r   rF   r   )	r   rQ   r   r   	ones_liker   	transposer   r   )r6   r7   r8   r   r   r   r   r   r   r   r   r   s               r*   test_double_integratorzTestLsim.test_double_integrator  s    Hr2hR)**HrdRD\""Hr2hZ  Aq"--K!LOO&!Q''
a\"(C$'M4+@"A"ABB
1W
Az43GHHHHAz43GHHHHHHr,   c                    t          j        ddgddgg          }t          j        dgdgg          }t          j        ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||ddg          \  }}}	|t          j        |           z  }
t          ||
           d S r   )r   rQ   r   r   r   r   r   r   )r6   r7   r8   r   r   r   r   r   r   r   r   s              r*   test_jordan_blockzTestLsim.test_jordan_block  s     HsBi"c+,,HrdRD\""Hr2hZ  Aq"--K!M!&!QC:666
aBFD5MM)
Az*****r,   c                    t          j        ddgddgg          }t          j        ddgddgg          }t          j        ddg          }t          j        d          }|                     ||||          }t          j        ddd          }t          j        t          |          d	f          }t          |||ddg
          \  }}	}
t          j        |           }t          j        |           }t          j        d|z            }t          |	|           t          |
d d df         |           t          |
d d df         |           d S )Nr   r   r   r   r   r   r   e   rF   r   rX   r   r   s                 r*   	test_misozTestLsim.test_miso  s<   HtSkC;/00HsCj3*-..Hc3Z  HUOOAq!,,K3$$Hc!ffa[!!&!QC:666
aVTE]]
fdUmmfT$Y''Az***AaaacFK000AaaacFK00000r,   c                    |                      dddd          }t          j        dd          }t          j        |          }t	          |||dg          \  }}}t          j        |           }t          ||           d S )Nr   r   r   rX   rF   r   r   )r6   r   r   r   r   r   r   r   s           r*   test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time  s|    R2..K!M!&!QC5111
aVTE]]
Az*****r,   c                     t          j        g d          }t          j        g d          }dgddgf}t          t          d          5  t	          |||dg          \  }}}d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   )r   r   r   r   r   r   z"Time steps are not equally spaced.)matchr   )r   rQ   r   r!   r   )r6   r   r   r   r   r   r   s          r*   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  s    H)))**H)))**%#s$:!EG G G 	6 	6fau555JD!Q	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   
A00A47A4N)r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r,   r*   r   r     s        O  	+ 	+ 	+	1 	1 	1I I I2 2 2&I I I+ + + 1 1 1$+ + +6 6 6 6 6r,   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestImpulsec                     dgddgf}t          |          \  }}t          j        |           }t          ||           d S Nr   r   r   r   r   r6   r   r   r   r   s        r*   r   zTestImpulse.test_first_order  sH     %#c#&//aVTE]]
Az*****r,   c                     dgddgf}d}t          j        dd|          }t          ||          \  }}|j        |fk    sJ t	          ||           t          j        |           }t	          ||           d S )Nr   r   r   r   r   )r   r   r   r   r   r   r6   r   nr   r   r   r   s          r*   test_first_order_fixed_timez'TestImpulse.test_first_order_fixed_time'  s    
 %#c#K3""&A&&&azaT!!!!D!$$$VQBZZ
Az*****r,   c                     dgddgf}t          |d          \  }}dt          j        |           z  }t          ||           d S Nr   r   r   r   r  r  s        r*   test_first_order_initialz$TestImpulse.test_first_order_initial5  sT    
 %#c#&S)))a264%==(
Az*****r,   c                     dgddgf}t          |dg          \  }}dt          j        |           z  }t          ||           d S r  r  r  s        r*   test_first_order_initial_listz)TestImpulse.test_first_order_initial_list?  sV    
 %#c#&cU+++a264%==(
Az*****r,   c                     dgddgf}t          |          \  }}t          j        |          }t          ||           d S Nr   r   )r   r   r  r   r  s        r*   r   zTestImpulse.test_integratorI  sF    %#c#&//a\$''
Az*****r,   c                     dgg df}t          |          \  }}|t          j        |           z  }t          ||           d S )Nr   r   r  r  s        r*   r   zTestImpulse.test_second_orderP  sM     %)&//aBFD5MM)
Az*****r,   c                 r    dgg df}t          |dgddg          \  }}t          |dgdg          \  }}d S )Nr   r   rP   rc   rb   r   r   r   r6   r   r   r   s       r*   test_array_likezTestImpulse.test_array_likeY  sP    %)&aSQF333a&aSQC000aaar,   c                 >    dgg df}t          |dd          \  }}d S )Nr   r   rP   rc   r%  r&  r'  s       r*   test_array_like2zTestImpulse.test_array_like2`  s.    %)&Q!,,,aaar,   N)r   r   r   r   r  r  r   r   r   r(  r*  r   r,   r*   r  r    s        + + ++ + ++ + ++ + ++ + ++ + +1 1 1- - - - -r,   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestStepc                     dgddgf}t          |          \  }}dt          j        |           z
  }t          ||           d S r  r   r   r   r   r  s        r*   r   zTestStep.test_first_orderf  sM     %#c#v,,a264%==(
Az*****r,   c                     dgddgf}d}t          j        dd|          }t          ||          \  }}|j        |fk    sJ t	          ||           dt          j        |           z
  }t	          ||           d S )Nr   r   r   r   r  rX   )r   r   r   r   r   r   r  s          r*   r  z$TestStep.test_first_order_fixed_timen  s    
 %#c#K3""v###azaT!!!!D!$$$^
Az*****r,   c                     dgddgf}t          |d          \  }}ddt          j        |           z  z   }t          ||           d S Nr   r   r   rX   r   r.  r  s        r*   r  z!TestStep.test_first_order_initial|  sY    
 %#c#v#&&&aRVTE]]**
Az*****r,   c                     dgddgf}t          |dg          \  }}ddt          j        |           z  z   }t          ||           d S r1  r.  r  s        r*   r   z&TestStep.test_first_order_initial_list  s[    
 %#c#v3%(((aRVTE]]**
Az*****r,   c                 \    dgddgf}t          |          \  }}|}t          ||           d S r"  )r   r   r  s        r*   r   zTestStep.test_integrator  s>     %S	"v,,a
Az*****r,   c                     dgg df}t          |          \  }}dd|z   t          j        |           z  z
  }t          ||           d S )Nr   r   rX   r.  r  s        r*   r   zTestStep.test_second_order  sV     %)v,,a!d(bfdUmm33
Az*****r,   c                 @    dgg df}t          |ddg          \  }}d S )Nr   r   rc   rb   r  r   r'  s       r*   r(  zTestStep.test_array_like  s0    %)v!Q(((aaar,   c                 ,    t          g dgdf           d S )NrZ   y      ?        r6  r6   s    r*   test_complex_inputzTestStep.test_complex_input  s!     	b2$r,   N)r   r   r   r   r  r  r   r   r   r(  r9  r   r,   r*   r,  r,  e  s        + + ++ + ++ + ++ + ++ + ++ + +) ) )    r,   r,  c                       e Zd Zd ZdS )TestLtic                    t          dgdg          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        J t          t          j        g           t          j        dg          d          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        J t          g dgd          }t          dgdgdd          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        J d S )NrX   rZ   rP   )	r
   
isinstancer   r   dtr   rQ   r   r   r6   ss     r*   test_lti_instantiationzTestLti.test_lti_instantiation  sR   
 bTNN!-.....!S!!!!!a&&&&&t||| bhtnna00!^,,,,,!S!!!!!a&&&&&t||| RD!bT1a  !Z(((((!S!!!!!a&&&&&t|||||r,   N)r   r   r   rA  r   r,   r*   r;  r;    s#            r,   r;  c                   &    e Zd Zd Zd Zd Zd ZdS )TestStateSpacec                 (   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                     d S )NrX   rF   rP   rB   r   )r   r   rQ   r8  s    r*   test_initializationz"TestStateSpace.test_initialization  s    1aAA3aS1#&&&28aVaV,--rx!qc
/C/C8aVH%%rx!	8 	8 	8 	8 	8r,   c                 v   t          dddd          }t          |                                t                     sJ t          |                                t                    sJ t          |                                t                    sJ t          |          |usJ |                                |usJ d S )NrX   rF   rP   rB   )r   r=  to_ssto_tfr   to_zpkr   r?  s     r*   test_conversionzTestStateSpace.test_conversion  s    q!Q""!''))Z00000!''))%566666!((**n55555 !}}A%%%%wwyy!!!!!!r,   c                     t          dddd          }t          |j        dg           t          |j        dg           |j        J d S )NrX   r   r   )r   r   polesr   r>  r?  s     r*   test_propertieszTestStateSpace.test_properties  sN    
 q!Q"""&&&"&&&t|||||r,   c                 ^    G d d          }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          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                    }|                    d          }|                    d          }|                    d          }t          j        ddd          }t          j        |          }d|d<   t          t          t          t          j	        t          j
        t          j        fD ]9}	t          t           |	d          |z  ||          d          |	d          t          |||          d         z             t          t          | |	d          z  ||          d         t          |||          d          |	d          z             t          t          | |	d          z  ||          d         t          |||          d          |	d          z             t          t                    5   |	d          |z   d d d            n# 1 swxY w Y   ;t          t          |dz  ||          d         t          |d|z  |          d                    t          t          ||z  ||          d         t          |t          |||          d         |          d         d           t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  | |            z   d d d            n# 1 swxY w Y   t          t                    5   |            |z   d d d            n# 1 swxY w Y   t          t                    5  | |            z   d d d            n# 1 swxY w Y   t          t                    5   |            |z   d d d            n# 1 swxY w Y   t          t          |dz   ||          d         d|z  t          |||          d         z              t          t                    5  |t          j        ddg          z    d d d            n# 1 swxY w Y   t          t                    5  t          j        ddg          |z    d d d            n# 1 swxY w Y   t          t                    5  ||z    d d d            n# 1 swxY w Y   t          t                    5  |t          j        ddgddgg          z   d d d            n# 1 swxY w Y   t          t                    5  ||z    d d d            n# 1 swxY w Y   t          t                    5  | |            z    d d d            n# 1 swxY w Y   t          t                    5   |            |z    d d d            n# 1 swxY w Y   t          t          ||z   ||          d         t          |||          d         t          |||          d         z              t          t          |dz
  ||          d         d|z  t          |||          d         z              t          t          d|z
  ||          d         d|z  t          | ||          d         z              t          t          ||z
  ||          d         t          |||          d         t          |||          d         z
             t          t                    5  | |            z
   d d d            n# 1 swxY w Y   t          t                    5   |            |z
   d d d            n# 1 swxY w Y   ||z   }
|
j        dk    sJ ||z  }
|
j        dk    sJ d|z  }
|
j        dk    sJ | }
|
j        dk    sJ d S )Nc                       e Zd ZdS ).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r,   r*   BadTyperP    s        Dr,   rQ  rI   gffffff?r   grX   r   rH   gg?皙?g?d   rF   )r   r   gh㈵>)r&   rP   rB   ro   )r   r   rQ   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr!   r>  )r6   rQ  s1s2
s_discretes2_discretes3_discreter   r   typr@  s              r*   test_operatorszTestStateSpace.test_operators  s    	 	 	 	 	 	 	 	 4+T{!;<<1#s,,1a&**1#  4,d!<==1#s,,1a&**1#  ^^C((
nnS))nnS)) K1c""M!! R]BHM 	 	CDQ"Q777:CFFT"Q%7%7%7%::< < < Dcc!ffQ777: qA...q1CCFF:< < < Dcc!ffQ777: qA...q1CCFF:< < < y))  A               	R!VqA...q1R1q5A...q1	3 	3 	3 	R"WQ///2R4a1#5#5#5a#8A>>>qA!	# 	# 	# 	# 9%% 	 	GG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R!VqA...q1AR1 2 2 21 55	7 	7 	7 :&& 	" 	"1a&!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" :&& 	" 	"HaVr!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 9%% 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	, 	,Aq6Aq6*++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 9%% 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R"WQ///2R1***1-R10B0B0B10EE	G 	G 	G 	R!VqA...q1QbA!3!3!3A!66	8 	8 	8 	QVqA...q1AbSA 3 3 3A 66	8 	8 	8 	R"WQ///2R1***1-R10B0B0B10EE	G 	G 	G 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $ts{{{{$ts{{{{
Nts{{{{Kts{{{{{{s2  J11J5	8J5	+M==NNN..N25N2OO#&O#>PPP7QQQ0R

RR)SS
S'UUU,VVV1WW
W"XXX+X==YYY66Y:=Y:Z//Z36Z3	`##`'*`'aa #a N)r   r   r   rE  rJ  rM  ra  r   r,   r*   rC  rC    sU        8 8 8	" 	" 	"  ~ ~ ~ ~ ~r,   rC  c                        e Zd Zd Zd Zd ZdS )TestTransferFunctionc                     t          dd           t          dgdg           t          t          j        dg          t          j        dg                     d S NrX   rF   )r   r   rQ   r8  s    r*   rE  z(TestTransferFunction.test_initializationh  sP    A!qc"""1#!66666r,   c                 z   t          ddgddg          }t          |                                t                    sJ t          |                                t                     sJ t          |                                t                    sJ t          |          |usJ |                                |usJ d S )NrX   r   rZ   )r   r=  rG  r   rH  rI  r   r?  s     r*   rJ  z$TestTransferFunction.test_conversionn  s    aVaW--!''))Z00000!''))%566666!((**n55555  ""!++++wwyy!!!!!!r,   c                     t          ddgddg          }t          |j        dg           t          |j        dg           d S )NrX   r   rZ   r   r   )r   r   rL  r   r?  s     r*   rM  z$TestTransferFunction.test_propertiesy  sI    
 aVaW--"&&&"&&&&&r,   N)r   r   r   rE  rJ  rM  r   r,   r*   rc  rc  g  sA        7 7 7	" 	" 	"' ' ' ' 'r,   rc  c                       e Zd Zd Zd ZdS )TestZerosPolesGainc                     t          ddd           t          dgdgd           t          t          j        dg          t          j        dg          d           d S re  )r   r   rQ   r8  s    r*   rE  z&TestZerosPolesGain.test_initialization  sV    q!QsQC###rx}}bhsmmQ77777r,   c                 t   t          ddd          }t          |                                t                    sJ t          |                                t
                    sJ t          |                                t                     sJ t          |          |usJ |                                |usJ d S )NrX   rF   rP   )r   r=  rG  r   rH  r   rI  r?  s     r*   rJ  z"TestZerosPolesGain.test_conversion  s    1a##!''))Z00000!''))%566666!((**n55555 a  ))))xxzz""""""r,   N)r   r   r   rE  rJ  r   r,   r*   ri  ri    s2        8 8 8	# 	# 	# 	# 	#r,   ri  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Test_abcd_normalizec                     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          | _        d S )Nr   r   r   r   r   r         @)r   rQ   r7   r8   r   r   r8  s    r*   setup_methodz Test_abcd_normalize.setup_method  si    C:Sz233D6C5/**C:,''C5'""r,   c                 :    t          t          t                     d S r   )r   r!   r   r8  s    r*   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.11111r,   c                 d    t          t          t          ddg| j        | j        | j                   d S )NrX   rZ   )r   r!   r   r8   r   r   r8  s    r*   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s5    j.1b'fdfdf	. 	. 	. 	. 	.r,   c                 d    t          t          t          | j        ddg| j        | j                   d S NrZ   rc   r   r!   r   r7   r   r   r8  s    r*   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  5    j.$&2q'fdf	& 	& 	& 	& 	&r,   c                 h    t          t          t          | j        | j        dgdgg| j                   d S )Nr   r   )r   r!   r   r7   r8   r   r8  s    r*   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s9    j.$&$&usendf	. 	. 	. 	. 	.r,   c           	      d    t          t          t          | j        | j        | j        ddg           d S )Nro  r   )r   r!   r   r7   r8   r   r8  s    r*   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s5    j.$&$&fsAh	( 	( 	( 	( 	(r,   c                 d    t          t          t          | j        ddg| j        | j                   d S rv  rw  r8  s    r*   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  ry  r,   c                    t          | j        | j        | j        | j                  \  }}}}t          || j                   t          || j                   t          || j                   t          || j                   d S r   )r   r7   r8   r   r   r   r6   r7   r8   r   r   s        r*   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  ss    #DFDFDFDFCC
1a46"""46"""46"""46"""""r,   c                    t          | j        | j        ddgd          \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    d S )NrX   r   )r   r7   r8   r   r   r  s        r*   r   zTest_abcd_normalize.test_shapes  s    #DFDFQFA>>
1a
AGAJ///
AGAJ///
AGAJ///
AGAJ///
AGAJ/////r,   c                 z   t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           |j        d         |j        d         k    sJ |j        d         | j        j        d         k    sJ d S )NrF   r   )r   r   r7   r8   r   r   rX   r   r   r   r7   r   r   )r6   B_D_r7   r8   r   r   s          r*    test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1  s    XfXf#dfb999
1a46"""22wqzRXa[((((wqzTV\!_,,,,,,r,   c                 p   t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ d S )Nr  )r   rF   r7   r8   r   r   rX   r  )r6   r  C_r7   r8   r   r   s          r*    test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2  s    XfXf#dfb999
1a46"""22wqzRXa[((((wqzRXa[((((((r,   c                 (   t          | j        | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r8   r   r   r   rX   )r   r8   r   r   r   r  s        r*   test_missing_Az"Test_abcd_normalize.test_missing_A      #df$&AAA
1awqzQWQZ''''wqzQWQZ''''w46<?DFLO<<<<<<<r,   c                 (   t          | j        | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r7   r   r   r   rX   )r   r7   r   r   r   r  s        r*   test_missing_Bz"Test_abcd_normalize.test_missing_B  r  r,   c                 (   t          | j        | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )Nr  r   rX   )r   r7   r8   r   r   r  s        r*   test_missing_Cz"Test_abcd_normalize.test_missing_C  r  r,   c                 (   t          | j        | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )Nr  r   rX   )r   r7   r8   r   r   r  s        r*   test_missing_Dz"Test_abcd_normalize.test_missing_D  r  r,   c                    t          | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r   r   r   rX   )r   r   r   r   r  s        r*   test_missing_ABz#Test_abcd_normalize.test_missing_AB  s    #df777
1awqzQWQZ''''wqzQWQZ''''wqzQWQZ''''w46<?DFLO<<<<<w46<?DFLO<<<<<<<r,   c                    t          | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r8   r   r   rX   )r   r8   r   r   r  s        r*   test_missing_ACz#Test_abcd_normalize.test_missing_AC      #df777
1awqzQWQZ''''wqzQWQZ''''wqzQWQZ''''wqzQWQZ''''w46<?DFLO<<<<<w46<?DFLO<<<<<<<r,   c                    t          | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        | j        j        d         | j        j        d         fk    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r8   r   r   rX   )r   r8   r   r   r  s        r*   test_missing_ADz#Test_abcd_normalize.test_missing_AD   r  r,   c                    t          | j        | j                  \  }}}}|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         |j        d         k    sJ |j        d         sJ |j        d                     |j        | j        j        d         | j        j        d         fk    sJ |j        | j        j        d         | j        j        d         fk    sJ d S )N)r7   r   r   rX   )r   r7   r   r   r  s        r*   test_missing_BCz#Test_abcd_normalize.test_missing_BC	  s    #df777
1awqzQWQZ''''wqzQWQZ''''wqzQWQZ''''wqz%%171:%%%w46<?DFLO<<<<<w46<?DFLO<<<<<<<r,   c                 H    t          t          t          | j                   d S )N)r   )r   r!   r   r   r8  s    r*   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_fails  s    j.DF;;;;;;r,   c                 T    t          t          t          | j        | j                   d S )N)r7   r   )r   r!   r   r7   r   r8  s    r*   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_fails  #    j.DFdfEEEEEEr,   c                 T    t          t          t          | j        | j                   d S )N)r7   r8   )r   r!   r   r7   r8   r8  s    r*   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_fails  r  r,   N)r   r   r   rp  rr  rt  rx  r{  r}  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r,   r*   rm  rm    sf       # # #2 2 2. . .& & &. . .( ( (& & &# # #0 0 0- - -) ) )= = == = == = == = == = == = == = == = =< < <F F FF F F F Fr,   rm  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )	Test_bodec                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )NrX   rR  rX   r_   rS  r   )r   rY   re   rk   r   r
   r   r   )r6   r   r   magphaseexpected_mags         r*   test_01zTest_bode.test_01  sb     aS1a&!!Vq)))3(((Cq999999r,   c                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )NrX   rR  rX   r_   r  )gig33333Ur   r  )r6   r   r   r  r  expected_phases         r*   test_02zTest_bode.test_02,  s`     aS1a&!!LLVq)))3+++E>1======r,   c                 :   t          dgddg          }g d}t          ||          \  }}}|dz  }t          j        |j        |          t          j        |j        |          z  }dt          j        t          |                    z  }t          ||           d S )NrX   r  r                ?g      4@)	r
   r   r   polyvalr   r   log10absr   )r6   r   r   r  r  jwr   r  s           r*   test_03zTest_bode.test_038  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCbhs1vv...C.....r,   c                 P   t          dgddg          }g d}t          ||          \  }}}|dz  }t          j        |j        |          t          j        |j        |          z  }t          j        |j        |j                  dz  t          j	        z  }t          ||           d S )NrX   r  r  r  g     f@)r
   r   r   r  r   r   arctan2r   r   pir   )r6   r   r   r  r  r  r   r  s           r*   test_04zTest_bode.test_04C  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCAFAF33e;beCE>22222r,   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}}t	          ||           d S NrX   r_   ro   r  )r
   r   logspacer   r   )r6   r   r  
expected_wr   r  r  s          r*   test_05zTest_bode.test_05N  s_     aS1a&!![Q**
Vq)))3Az*****r,   c                 r    t          dgddg          }t          |d          \  }}}|d         dk    sJ d S NrX   r   rF   r  g{Gz?r
   r   r6   r   r   r  r  s        r*   test_06zTest_bode.test_06X  sF     aS1a&!!Vq)))3tt||||||r,   c                 V    t          dgg d          }t          |d          \  }}}d S )NrX   )rX   r   rS  rF   r  r  r  s        r*   test_07zTest_bode.test_07_  s5     aS+++&&Vq)))3r,   c                     t          g g dd          }|                    t          j        ddd                    \  }}}t	          t          |          dd	           d S )
N)r^   rf   rk   rl   rm   rX   rY   rg   rS  r  i>   r   )r
   r   r   r  r   minr  s        r*   test_08zTest_bode.test_08e  sb    R222A66bk"b#&>&>??3CJJb999999r,   c           	      D   t          j        g d          }t          j        |          j        }t          j        dgdgdgg          }t          j        g dg          }t          j        dgg          }t                      5 }|                    t                     t          ||||          }t          |d          \  }}	}
d d d            n# 1 swxY w Y   dt          j
        t          j        dd|dz  z   z                      z  }t          |	|           d S )	Nr   r   r   r   r   r   r   r   r   rS  r     rb   )r   rQ   r0   	companionr   r   r   r   r
   r   r  sqrtr   )r6   r   r7   r8   r   r   r   r   r   r  r  expected_magnitudes               r*   test_from_state_spacezTest_bode.test_from_state_spacek  sP    H)))**Q!HsecUSE*++Hooo&''HseW   	0CJJ'''Aq!__F 3///MAsE	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
  "(273#1*3E+F+F"G"GGC!344444s   ACCCN)r   r   r   r  r  r  r  r  r  r  r  r  r   r,   r*   r  r    s        : : :
> 
> 
>	/ 	/ 	/	3 	3 	3+ + +  * * *: : :5 5 5 5 5r,   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_freqrespc                     t          dgddg          }g d}t          ||          \  }}g d}g d}t          |j        |d           t          |j        |d           d S )NrX   r  r  )gGz?r   gׁsF?)MbXrI   r  r   r
   r   r   r   r   )r6   r   r   Hexpected_reexpected_ims         r*   test_output_manualz Test_freqresp.test_output_manual  s     aS1a&!!LL!$$$1))),,,AFK;;;;AFK;;;;;;r,   c                 8   t          dgddg          }g d}t          ||          \  }}|dz  }t          j        |j        |          t          j        |j        |          z  }t          |j        |j                   t          |j        |j                   d S )NrX   r  r  r  )	r
   r   r   r  r   r   r   r   r   r6   r   r   r  r@  r<   s         r*   test_outputzTest_freqresp.test_output  s     aS1a&!!!$$$1F:fj!,,rz&*a/H/HHAFHM222AFHM22222r,   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}t	          ||           d S r  )r
   r   r  r   r   )r6   r   r  r  r   r  s         r*   test_freq_rangezTest_freqresp.test_freq_range  s]     aS1a&!![Q**
!$$$1Az*****r,   c                 p    t          dgddg          }t          |d          \  }}|d         dk    sJ d S r  )r
   r   )r6   r   r   r  s       r*   test_pole_zerozTest_freqresp.test_pole_zero  sD     aS1a&!!!$$$1tt||||||r,   c                 d   t          j        g d          }t          j        |          j        }t          j        dgdgdgg          }t          j        g dg          }t          j        dgg          }t                      5 }|                    t                     t          ||||          }t          |d          \  }}	d d d            n# 1 swxY w Y   |dz  }
ddd|
z  z   d|
dz  z  z   |
d	z  z   z  }t          |	j        |j                   t          |	j        |j                   d S )
Nr  r   r   r  rS  r  r  rF   rP   )r   rQ   r0   r  r   r   r   r   r
   r   r   r   r   )r6   r   r7   r8   r   r   r   r   r   r  r@  r<   s               r*   r  z#Test_freqresp.test_from_state_space  sj    H)))**Q!HseSE3%())Hooo&''HseW   	+CJJ'''Aq!__FFc***DAq	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ F319qAv-145AFHM222AFHM22222s   ACCCc                     t          g dgdz  dg          }g d}t          ||          \  }}|dz  }d|dz   dz  z  }t          |j        |j                   t          |j        |j                   d S )NrZ   rB   rX   r  r  r  r  r  s         r*   test_from_zpkzTest_freqresp.test_from_zpk  s    RQs##!$$$1FAz>AFHM222AFHM22222r,   N)	r   r   r   r  r  r  r  r  r  r   r,   r*   r  r    sn        < < <	3 	3 	3+ + +  3 3 3*3 3 3 3 3r,   r  )r   r   ),r   numpyr   numpy.testingr   r   r   r   scipy._lib._array_apir   r   r   scipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr0   r+   r.   r   r   r  r,  r;  rC  rc  ri  rm  r  r  r   r,   r*   <module>r     s        + + + + + +  * * * * * *         H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H 8 7 7 7 7 7      N N N N*W@ W@ W@ W@ W@ W@ W@ W@t[P [P [P [P [P [P [P [P|{6 {6 {6 {6 {6 {6 {6 {6|D- D- D- D- D- D- D- D-NF F F F F F F FR       8[ [ [ [ [ [ [ [z' ' ' ' ' ' ' '8# # # # # # # #&CF CF CF CF CF CF CF CFLa5 a5 a5 a5 a5 a5 a5 a5HI3 I3 I3 I3 I3 I3 I3 I3 I3 I3r,   