
    ge{                        d dl mZ d dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ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e(          Z) G d de(          Z* G d d          Z+ G d de+          Z, G d de+          Z- G d d          Z. G d de.          Z/ G d de.          Z0 G d  d!          Z1 G d" d#          Z2 G d$ d%          Z3 G d& d'          Z4 G d( d)          Z5 G d* d+          Z6 G d, d-          Z7dS )/    )abstractmethodN)assert_almost_equalassert_equalassert_allcloseassert_suppress_warnings)raises)warns)ss2tftf2sslsim2impulse2step2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          >lib/python3.11/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer1      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                   ,    e Zd Zd Zd Zd Zd Z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_matrixr1   requested_polescomputed_poles)selfABPkwargsfsfexpected_s           r0   _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
r2   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?rG   grh|?gE    )r   K@V-?rJ   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rL   rL      rV   )r"   arrayreshaperD   errstate)r<   r=   r>   r?   s       r0   	test_realzTestPlacePoles.test_real5   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      )                          ?rT   )dividerU   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirL   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rj   rj   )rj   re   re   )rd   (   2   <   F   y      4      y      4      @y      @      @y      @      )
rd   rk   rl   iiiir`   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   r\   r   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   r   	   )
r   r   r   r   r^   r   r   r^   rL   rV   rL   )y            ?y                        ?            )ru   r_   rv   rw   )	r"   rW   rY   rD   rX   oneseyediagr   )r<   r=   r>   r?   big_Abig_Bs         r0   test_complexzTestPlacePoles.test_complexK   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        t           j                   t	          |j        t           j                   t          j        d          }|                     |||          }t	          |j        t           j                   t	          |j        t           j                   |d d df                             dd          }t          j        d          }|                     |||          }t	          |j        d           t	          |j        d           d S )NrF   rH   )r   rI   rJ   rJ   r   r   rK   r   r^   rL   rV   rH   ri   rh   r\      rM   )rb   ra   r_   ru   r   r^   )r"   rW   rX   rD   r   r+   nannb_iter)r<   r=   r>   r?   rA   s        r0   test_tricky_BzTestPlacePoles.test_tricky_B   s~    H % % % & &&-gamm 	
 H " " " # ##*71a== 	

 H33344kk!Q"" 	SXrv&&&S["&))) H())kk!Q""SXrv&&&S["&))) aaacFNN1QH())kk!Q"" 	SXq!!!S[!$$$$$r2   c           
         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          t          |          dk               t          t          |d         j        t                               t          dt!          |d         j                  v            t%          |j        d           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   r\   r   r   r   r   r   r]   r   r   r   r   r   r   r   r   rH   )r   r   r   r   r^   r   r   r^   rL   ) 皙ffffff333333foorQ   r^   )r   r   r   r   r_   )r   r   r   *   r+   irf   )ru   ru   ru   ru   )rH   rH   )rH   rL   r^   rL   rV   rH   T)recordalways)r`   ru   r_   rx   gؗҜ<)r+   rg   r`   z4Convergence was not reached after maxiter iterations)rb   ra                @ru   rV   )ru   r_   rx   )rb   ra   r   y             rP   )r"   rW   rX   assert_raisesr'   r   newaxisry   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr(   messager   r   )r<   r=   r>   wrA   s        r0   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CFFaK   Jqu~{;;<<<J1R5=))* + + +b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	j+q!5KLLL 	j+q2A2w=III 	j+q!BQBqqqD'=III 	j+q!/	@ 	@ 	@ 	@ 	@ 	@s   
B4K

KKN)__name__
__module____qualname__rD   rZ   r~   r   r    r2   r0   r4   r4   '   sn        
 
 
) ) ),N! N! N!` %  %  %D@@ @@ @@ @@ @@r2   r4   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r<   pqrs       r0   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sc    bh1vh1vh1vh1v	# 	# 	# 	# 	#r2   c                 F    dD ]\  }}}|                      |||           d S )N))rV   rV   rV   )r^   rV   rV   r^   r^   r^   )r   r   s       r0   test_shapeszTestSS2TF.test_shapes  s>     9 	. 	.GAq!$$Q1----	. 	.r2   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   ru   r_   r^   r   vIh%<=r   rL   +=)r"   rW   r   r   r   )	r<   bar=   r>   CDbbaas	            r0   
test_basiczTestSS2TF.test_basic  s    H___%%H___%%1a[[
1aRHq!f-E::::QC!:E2222QF8%0000QC5u----q!Q""B1qu----AE******r2   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)rL   r^   r   r   r   rL   r^   ri   )r   r   r   r<   tfr=   r>   r   r   numdens           r0   test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trip  s   BZ
1aQC5u----QC5u----QC5u----QC5u----Aq!$$Sq!fXE2222aV%0000sQCj!_BZ
1aQC5u----QC5u----QC!:E2222QC!:E2222Aq!$$Sq!fq!f-E::::aV%000000r2   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 )Nr^   rL   ru   r   r   r   r`   )r^   r   r^   r   )r^   rL   rV   r   )ru   r_   rx   )r^   r   r   r   r^   r   )r   r^   rL   rV   rV   )dtyperh   ighe99ir_   )r^   rh   ri   r   rx   )r   r^   r_   )r   r   r   r"   rW   objectr   s           r0   test_simo_round_tripzTestSS2TF.test_simo_round_trip5  s   1v1vA'BZ
1aRD6....QC5u----QC";U3333QC!:E2222Aq!$$Sq!fq!f-E::::aV%0000yy)))$iii0BZ
1aRHq!f-E::::QC!:E2222RGaV,59999QC!:E2222Aq!$$Siii3%@@@@YYYU3333yy)))$lll3BZ
1aLLL)))YYY?eLLLLQC!qc?7777IIIyyy1>>>>QC!:E2222Aq!$$SlllLLL9FFFF\\\6666hAq6{&111Aq6:BZ
1aRD6....QC5u----QC";U3333QC!:E2222Aq!$$Sq!fq!f-E::::aV%0000hB+6:::IIIFBZ
1aRHq!f-E::::QC!:E2222QGb"X.U;;;;QC!:E2222Aq!$$Sjjj)))45AAAAYYYU333333r2   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   r^   )r_   rx   ru   r   r^   )ri   r^   r   )        r   r   r   r   r   r+   r,   )r   r         @r   r   )r   r   )r<   r=   r>   r   r   r   r   s          r0   test_all_int_arrayszTestSS2TF.test_all_int_arraysn  s    YY			<<<0S1#sOYYKSEAq!$$S2223%eLLLL111>>>>>>r2   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   )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^   rL   r   r   r   r   )r"   rW   r   r   vstack)r<   r=   r>   r   r   b_allr   b0a0b1a1b2a2s                r0   test_multioutputzTestSS2TF.test_multioutputw  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Or2   N)
r   r   r   r   r   r   r   r   r   r   r   r2   r0   r   r      s        # # #. . .+ + +1 1 1074 74 74r? ? ?$P $P $P $P $Pr2   r   c                   X    e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 ZdS )_TestLsimFuncsr\   c                     d S Nr   r<   argsr@   s      r0   funcz_TestLsimFuncs.func  s    r2   c                     t                      5 }|                    t                     t          | }d d d            n# 1 swxY w Y   |S r   )r   filterr   r   )r<   r   supsystems       r0   
lti_nowarnz_TestLsimFuncs.lti_nowarn  s       	 CJJ'''$ZF	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  s   $?AAc                 .   |                      dddd          }t          j        dd          }t          j        |          }|                     |||dg          \  }}}t          j        |           }t          ||           t          ||           d S Nr   r   r   r   ri   X0r   r"   linspace
zeros_liker   expr   r<   r   tutoutyx
expected_xs           r0   test_first_orderz_TestLsimFuncs.test_first_order  s     R2..K!M!YYvq!Y66
aVTE]]
Az***Az*****r2   c                 4   t          j        ddd          }t          j        |          }|                     dgg d          }|                     |||ddg          \  }}}d|z
  t          j        |           z  }t          |d d df         |           d S )Nr   re   i  r   r   r   r   r   r   )r"   r   r   r   r   r   r   r<   r   r   r   r   r   r   r   s           r0   test_second_orderz _TestLsimFuncs.test_second_order  s    K2t$$M! #88YYvq!c
Y;;
aDjBFD5MM1
AaaadGZ00000r2   c                    |                      dddd          }t          j        dd          }|}|                     |||          \  }}}d|dz  z  }t	          ||| j                   t	          ||| j                   d S )Nr   r   r   ri         ?rL   decimal)r   r"   r   r   r   digits_accuracyr   s           r0   test_integratorz_TestLsimFuncs.test_integrator  s    RR00K!YYvq!,,
a47]
Az43GHHHHAz43GHHHHHHr2   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          }|                     |||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^   rL   r   g      $@   rL   )UTr   r^   	r"   rW   r   r   r   r   r   r   r   r<   r=   r>   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r0   test_two_statesz_TestLsimFuncs.test_two_states  sA   HtSkC;/00HsCj3*-..Hc3Z  HVAq!,,K4$$Hc!ffa[!!YYvaS#JY??
aVTE]]
fdUmmfTD[))Az***AaaadG[111AaaadG[11111r2   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          j        t          j        d|dz  z  |g                    }
|dz  }t          |	|
| j                   t          ||| j                   d S )	Nr   r   r   r   ri   r   rL   r   )	r"   rW   r   r   	ones_liker   	transposer   r   )r<   r=   r>   r   r   r   r   r   r   r   r   r  s               r0   test_double_integratorz%_TestLsimFuncs.test_double_integrator  s    Hr2hR)**HrdRD\""Hr2hZ  Aq"--K!LOOYYvq!,,
a\"(C$'M4+@"A"ABB
1W
Az43GHHHHAz43GHHHHHHr2   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        |          }|                     |||ddg          \  }}}	|t          j        |           z  }
t          ||
           d S r   )r"   rW   r   r   r   r   r   r   )r<   r=   r>   r   r   r   r   r   r   r   r  s              r0   test_jordan_blockz _TestLsimFuncs.test_jordan_block  s     HsBi"c+,,HrdRD\""Hr2hZ  Aq"--K!M!YYvq!c
Y;;
aBFD5MM)
Az*****r2   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          }|                     |||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   rL   r   r^   r  r  s                 r0   	test_misoz_TestLsimFuncs.test_miso  s?   HtSkC;/00HsCj3*-..Hc3Z  HUOOAq!,,K3$$Hc!ffa[!!YYvq!c
Y;;
aVTE]]
fdUmmfT$Y''Az***AaaacFK000AaaacFK00000r2   N)r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r   r2   r0   r   r     s        O  ^  	+ 	+ 	+	1 	1 	1I I I2 2 2&I I I+ + + 1 1 1 1 1r2   r   c                        e Zd Zd Zd Zd ZdS )TestLsimc                     t          |i |S r   )r   r   s      r0   r   zTestLsim.func      T$V$$$r2   c                    |                      dddd          }t          j        dd          }t          j        |          }|                     |||dg          \  }}}t          j        |           }t          ||           d S )Nr   r   r   r^   rL   r   r   )r<   r   r   r   r   r   r   r  s           r0   test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time  s    R2..K!M!YYvq!Y66
aVTE]]
Az*****r2   c                    t          j        g d          }t          j        g d          }dgddgf}t          t          d          5  |                     |||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"   rW   r   r'   r   )r<   r   r   r   r   r   r   s          r0   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  s    H)))**H)))**%#s$:!EG G G 	; 	;61aSE::JD!Q	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   
A66A:=A:N)r   r   r   r   r  r  r   r2   r0   r  r    sA        % % %+ + +; ; ; ; ;r2   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )	TestLsim2rh   c                     t          t          d          5  t          |i |\  }}}d d d            n# 1 swxY w Y   |t          j        |          t          j        |          fS )Nzlsim2 is deprecatedr  )r
   DeprecationWarningr   r"   squeeze)r<   r   r@   r   r   r   s         r0   r   zTestLsim2.func)  s    %-BCCC 	- 	-T,V,,GAq!	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-"*Q--A..s   488c                     t          j        g d          }t          j        g d          }dgddgf}|                     |||dg          \  }}}t          j        d|          }t	          ||           d S )Nr  r  r   r   r   )r"   rW   r   maximumr   r   s           r0   "test_integrator_nonequal_timestampz,TestLsim2.test_integrator_nonequal_timestamp.  s    H)))**H)))**%S	"YYvq!Y66
aZT**
Az*****r2   c                     t          j        g d          }t          j        g d          }dgddgf}|                     |||d          \  }}}t          j        g d          }t          ||           d S )N)r   r   r   皙?r(  r   )r   r   r   r   r   r   r   r   {Gz?)hmax)r   r   r   皙?r+  r+  )r"   rW   r   r   r   s           r0   (test_integrator_nonequal_timestamp_kwargz2TestLsim2.test_integrator_nonequal_timestamp_kwarg7  s    H33344H33344%c
#YYvq!$Y77
aX<<<==
Az*****r2   c                     dgg df}|                      |ddg          \  }}}d|z
  t          j        |           z  }t          |d d df         |           d S )Nr   r   r   r   r   r   r"   r   r   )r<   r   r   r   r   r   s         r0   test_default_argumentsz TestLsim2.test_default_arguments@  sm    
 %)YYv3*Y55
aDjBFD5MM1
AaaacFJ/////r2   N)r   r   r   r   r   r&  r,  r/  r   r2   r0   r   r   &  sU        O/ / /
+ + ++ + +0 0 0 0 0r2   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
_TestImpulseFuncsc                     dgddgf}|                      |          \  }}t          j        |           }t          ||           d S Nr   r.  r<   r   r   r   r  s        r0   r   z"_TestImpulseFuncs.test_first_orderN  sN     %#c#))F##aVTE]]
Az*****r2   c                    dgddgf}d}t          j        dd|          }|                     ||          \  }}t          |j        |f           t          ||           t          j        |           }t          ||           d S )Nr   r  r   r   r  r"   r   r   r   r!   r   r   r<   r   nr   r   r   r  s          r0   test_first_order_fixed_timez-_TestImpulseFuncs.test_first_order_fixed_timeV  s    
 %#c#K3""))Fa)((aTZ!&&&D!$$$VQBZZ
Az*****r2   c                     dgddgf}|                      |d          \  }}dt          j        |           z  }t          ||           d S Nr   r   r   r   r.  r4  s        r0   test_first_order_initialz*_TestImpulseFuncs.test_first_order_initiald  sW    
 %#c#))Fs)++a264%==(
Az*****r2   c                     dgddgf}|                      |dg          \  }}dt          j        |           z  }t          ||           d S r<  r.  r4  s        r0   test_first_order_initial_listz/_TestImpulseFuncs.test_first_order_initial_listn  sY    
 %#c#))Fu)--a264%==(
Az*****r2   c                     dgddgf}|                      |          \  }}t          j        |          }t          ||           d S Nr   r   )r   r"   r  r   r4  s        r0   r   z!_TestImpulseFuncs.test_integratorx  sL    %#c#))F##a\$''
Az*****r2   c                     dgg df}|                      |          \  }}|t          j        |           z  }t          ||           d S )Nr   r   r.  r4  s        r0   r   z#_TestImpulseFuncs.test_second_order  sS     %)))F##aBFD5MM)
Az*****r2   c                     dgg df}|                      |dgddg          \  }}|                      |dgdg          \  }}d S )Nr   r   rV   ri   rh   r   r  r   r<   r   r   r   s       r0   test_array_likez!_TestImpulseFuncs.test_array_like  sV    %)))Fsq!f)55a))Fsqc)22aaar2   c                 J    dgg df}|                      |dd          \  }}d S )Nr   r   rV   ri   rD  rE  rF  s       r0   test_array_like2z"_TestImpulseFuncs.test_array_like2  s1    %)))FqA)..aaar2   N)r   r   r   r   r:  r=  r?  r   r   rG  rI  r   r2   r0   r1  r1  K  s        + + ++ + ++ + ++ + ++ + ++ + +3 3 3/ / / / /r2   r1  c                       e Zd Zd ZdS )TestImpulse2c                 z    t          t          d          5  t          |i |cd d d            S # 1 swxY w Y   d S )Nzimpulse2 is deprecatedr  )r
   r"  r   r   s      r0   r   zTestImpulse2.func  s    %-EFFF 	- 	-T,V,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   044Nr   r   r   r   r   r2   r0   rK  rK    s#        - - - - -r2   rK  c                       e Zd Zd ZdS )TestImpulsec                     t          |i |S r   )r   r   s      r0   r   zTestImpulse.func  s    ''''r2   NrN  r   r2   r0   rP  rP    s#        ( ( ( ( (r2   rP  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	_TestStepFuncsc                     dgddgf}|                      |          \  }}dt          j        |           z
  }t          ||           d S r3  r.  r4  s        r0   r   z_TestStepFuncs.test_first_order  sS     %#c#))F##a264%==(
Az*****r2   c                    dgddgf}d}t          j        dd|          }|                     ||          \  }}t          |j        |f           t          ||           dt          j        |           z
  }t          ||           d S )Nr   r  r   r   r6  r^   r7  r8  s          r0   r:  z*_TestStepFuncs.test_first_order_fixed_time  s    
 %#c#K3""))Fa)((aTZ!&&&D!$$$^
Az*****r2   c                     dgddgf}|                      |d          \  }}ddt          j        |           z  z   }t          ||           d S Nr   r   r   r^   r   r.  r4  s        r0   r=  z'_TestStepFuncs.test_first_order_initial  s\    
 %#c#))Fs)++aRVTE]]**
Az*****r2   c                     dgddgf}|                      |dg          \  }}ddt          j        |           z  z   }t          ||           d S rW  r.  r4  s        r0   r?  z,_TestStepFuncs.test_first_order_initial_list  s^    
 %#c#))Fu)--aRVTE]]**
Az*****r2   c                 h    dgddgf}|                      |          \  }}|}t          ||           d S rA  r   r   r4  s        r0   r   z_TestStepFuncs.test_integrator  sD     %S	"))F##a
Az*****r2   c                     dgg df}|                      |          \  }}dd|z   t          j        |           z  z
  }t          ||           d S )Nr   r   r^   r.  r4  s        r0   r   z _TestStepFuncs.test_second_order  s\     %)))F##a!d(bfdUmm33
Az*****r2   c                 L    dgg df}|                      |ddg          \  }}d S )Nr   r   ri   rh   r6  rE  rF  s       r0   rG  z_TestStepFuncs.test_array_like  s3    %)))Fq!f)--aaar2   N)
r   r   r   r   r:  r=  r?  r   r   rG  r   r2   r0   rS  rS    s}        + + ++ + ++ + ++ + ++ + ++ + +. . . . .r2   rS  c                       e Zd Zd Zd ZdS )	TestStep2c                 z    t          t          d          5  t          |i |cd d d            S # 1 swxY w Y   d S )Nzstep2 is deprecatedr  )r
   r"  r   r   s      r0   r   zTestStep2.func  s    %-BCCC 	* 	*$)&))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*rM  c                 n    dgddgf}|                      |dd          \  }}|}t          ||           d S )Nr   r   g|=r   )r,   r+   rZ  r4  s        r0   r   zTestStep2.test_integrator  sJ     %#c#))FT)::a
Az*****r2   N)r   r   r   r   r   r   r2   r0   r^  r^    s2        * * *
+ 
+ 
+ 
+ 
+r2   r^  c                       e Zd Zd Zd ZdS )TestStepc                     t          |i |S r   r   r   s      r0   r   zTestStep.func  r  r2   c                 ,    t          g dgdf           d S )Nr`   y      ?        rd  r<   s    r0   test_complex_inputzTestStep.test_complex_input  s!     	b2$r2   N)r   r   r   r   rg  r   r2   r0   rb  rb    s2        % % %    r2   rb  c                       e Zd Zd ZdS )TestLtic                    t          dgdg          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            t          t          j        g           t          j        dg          d          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            t          g dgd          }t          dgdgdd          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            d S )Nr^   r`   rV   )
r   r   
isinstancer   r   dtr"   rW   r   r   r<   ss     r0   test_lti_instantiationzTestLti.test_lti_instantiation  s   
 bTNN
1.//000
1c""###Jq$'''((( bhtnna00
1n--...
1c""###Jq$'''((( RD!bT1a  
1j))***
1c""###Jq$'''(((r2   N)r   r   r   ro  r   r2   r0   ri  ri    s#            r2   ri  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 )Nr^   rL   rV   rH   r   )r   r"   rW   rf  s    r0   test_initializationz"TestStateSpace.test_initialization  s    1aAA3aS1#&&&28aVaV,--rx!qc
/C/C8aVH%%rx!	8 	8 	8 	8 	8r2   c                    t          dddd          }t          t          |                                t                                t          t          |                                t
                               t          t          |                                t                               t          t          |          |u           t          |                                |u           d S )Nr^   rL   rV   rH   )r   r   rk  to_ssto_tfr   to_zpkr   rm  s     r0   test_conversionzTestStateSpace.test_conversion%  s    q!Q""
17799j11222
17799&677888
188::~66777 	
1Q&'''		"#####r2   c                     t          dddd          }t          |j        dg           t          |j        dg           t	          |j        d u            d S Nr^   r   )r   r   polesr   r   rl  rm  s     r0   test_propertieszTestStateSpace.test_properties0  sY    
 q!Q""QWqc"""QWqc"""r2   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   }
t!          |
j        dk               ||z  }
t!          |
j        dk               d|z  }
t!          |
j        dk               | }
t!          |
j        dk               d S )Nc                       e Zd ZdS ).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r2   r0   BadTyper  =  s        Dr2   r  rO   gffffff?r   gr^   r   rN   gg?r+  g?d   rL   )r  r  gh㈵>)r,   rV   rH   ru   )r   r"   rW   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr'   r   rl  )r<   r  s1s2
s_discretes2_discretes3_discreter   r   typrn  s              r0   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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$
NK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   rs  rx  r|  r  r   r2   r0   rq  rq    sU        8 8 8	$ 	$ 	$  ~ ~ ~ ~ ~r2   rq  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 Nr^   rL   )r   r"   rW   rf  s    r0   rs  z(TestTransferFunction.test_initialization  sP    A!qc"""1#!66666r2   c                    t          ddgddg          }t          t          |                                t                               t          t          |                                t                                t          t          |                                t                               t          t          |          |u           t          |                                |u           d S Nr^   r   r`   )r   r   rk  ru  r   rv  rw  r   rm  s     r0   rx  z$TestTransferFunction.test_conversion  s    aVaW--
17799j11222
17799&677888
188::~66777 	 ##1,---		"#####r2   c                     t          ddgddg          }t          |j        dg           t          |j        dg           d S r  )r   r   r{  r   rm  s     r0   r|  z$TestTransferFunction.test_properties  sI    
 aVaW--QWqc"""QWqc"""""r2   N)r   r   r   rs  rx  r|  r   r2   r0   r  r    sA        7 7 7	$ 	$ 	$# # # # #r2   r  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 r  )r   r"   rW   rf  s    r0   rs  z&TestZerosPolesGain.test_initialization  sV    q!QsQC###rx}}bhsmmQ77777r2   c                    t          ddd          }t          t          |                                t                               t          t          |                                t                               t          t          |                                t                                t          t          |          |u           t          |                                |u           d S )Nr^   rL   rV   )r   r   rk  ru  r   rv  r   rw  rm  s     r0   rx  z"TestZerosPolesGain.test_conversion  s    1a##
17799j11222
17799&677888
188::~66777 	q!!*+++

!#$$$$$r2   N)r   r   r   rs  rx  r   r2   r0   r  r    s2        8 8 8	% 	% 	% 	% 	%r2   r  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"   rW   r=   r>   r   r   rf  s    r0   setup_methodz Test_abcd_normalize.setup_method  si    C:Sz233D6C5/**C:,''C5'""r2   c                 :    t          t          t                     d S r   )r   r'   r   rf  s    r0   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.11111r2   c                 d    t          t          t          ddg| j        | j        | j                   d S )Nr^   r`   )r   r'   r   r>   r   r   rf  s    r0   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s5    j.1b'fdfdf	. 	. 	. 	. 	.r2   c                 d    t          t          t          | j        ddg| j        | j                   d S Nr`   ri   r   r'   r   r=   r   r   rf  s    r0   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  5    j.$&2q'fdf	& 	& 	& 	& 	&r2   c                 h    t          t          t          | j        | j        dgdgg| j                   d S )Nr   r   )r   r'   r   r=   r>   r   rf  s    r0   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s9    j.$&$&usendf	. 	. 	. 	. 	.r2   c           	      d    t          t          t          | j        | j        | j        ddg           d S )Nr  r   )r   r'   r   r=   r>   r   rf  s    r0   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s5    j.$&$&fsAh	( 	( 	( 	( 	(r2   c                 d    t          t          t          | j        ddg| j        | j                   d S r  r  rf  s    r0   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  r  r2   c                    t          | j        | j        | j        | j                  \  }}}}t          || j                   t          || j                   t          || j                   t          || j                   d S r   )r   r=   r>   r   r   r   r<   r=   r>   r   r   s        r0   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  ss    #DFDFDFDFCC
1aQQQQr2   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 rz  )r   r=   r>   r   r!   r  s        r0   r   zTest_abcd_normalize.test_shapes  s    #DFDFQFA>>
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,,,r2   c                    t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           t	          |j        d         |j        d                    t	          |j        d         | j        j        d                    d S )NrL   r   )r   r   r=   r>   r   r   r^   r"   r   r   r=   r   r!   )r<   B_D_r=   r>   r   r   s          r0    test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1  s    XfXf#dfb999
1aQQQQWQZ!---QWQZa11111r2   c                    t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           t	          |j        d         |j        d                    t	          |j        d         |j        d                    d S )Nr  )r   rL   r=   r>   r   r   r^   r  )r<   r  C_r=   r>   r   r   s          r0    test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2   s    XfXf#dfb999
1aQQQQWQZ!---QWQZ!-----r2   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )N)r>   r   r   r   r^   )r   r>   r   r   r   r!   r  s        r0   test_missing_Az"Test_abcd_normalize.test_missing_A*      #df$&AAA
1aQWQZ,,,QWQZ,,,QWtv|AQ@AAAAAr2   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )N)r=   r   r   r   r^   )r   r=   r   r   r   r!   r  s        r0   test_missing_Bz"Test_abcd_normalize.test_missing_B0  r  r2   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )Nr  r   r^   )r   r=   r>   r   r   r!   r  s        r0   test_missing_Cz"Test_abcd_normalize.test_missing_C6  r  r2   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )Nr  r   r^   )r   r=   r>   r   r   r!   r  s        r0   test_missing_Dz"Test_abcd_normalize.test_missing_D<  r  r2   c                    t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r   r   r   r^   )r   r   r   r   r!   r  s        r0   test_missing_ABz#Test_abcd_normalize.test_missing_ABB  s    #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr2   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r>   r   r   r^   )r   r>   r   r   r!   r  s        r0   test_missing_ACz#Test_abcd_normalize.test_missing_ACJ      #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr2   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r>   r   r   r^   )r   r>   r   r   r!   r  s        r0   test_missing_ADz#Test_abcd_normalize.test_missing_ADS  r  r2   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r=   r   r   r^   )r   r=   r   r   r!   r  s        r0   test_missing_BCz#Test_abcd_normalize.test_missing_BC\  r  r2   c                 H    t          t          t          | j                   d S )N)r   )r   r'   r   r   rf  s    r0   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_failse  s    j.DF;;;;;;r2   c                 T    t          t          t          | j        | j                   d S )N)r=   r   )r   r'   r   r=   r   rf  s    r0   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_failsh  #    j.DFdfEEEEEEr2   c                 T    t          t          t          | j        | j                   d S )N)r=   r>   )r   r'   r   r=   r>   rf  s    r0   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_failsk  r  r2   N)r   r   r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r2   r0   r  r    s~       # # #2 2 2. . .& & &. . .( ( (& & &     - - -2 2 2. . .B B BB B BB B BB B BB B BB B BB B BB B B< < <F F FF F F F Fr2   r  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 )Nr^   r+  r^   re   r  r   )r   r_   rk   rq   r   r   r   r   )r<   r   r   magphaseexpected_mags         r0   test_01zTest_bode.test_01q  sb     aS1a&!!Vq)))3(((Cq999999r2   c                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )Nr^   r+  r^   re   r  )gig33333Ur   r  )r<   r   r   r  r  expected_phases         r0   test_02zTest_bode.test_02  s`     aS1a&!!LLVq)))3+++E>1======r2   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 )Nr^   r  r                ?g      4@)	r   r   r"   polyvalr   r   log10absr   )r<   r   r   r  r  jwr   r  s           r0   test_03zTest_bode.test_03  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCbhs1vv...C.....r2   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 )Nr^   r  r  r  g     f@)r   r   r"   r  r   r   arctan2r%   r$   pir   )r<   r   r   r  r  r  r   r  s           r0   test_04zTest_bode.test_04  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCAFAF33e;beCE>22222r2   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}}t	          ||           d S Nr^   re   ru   r9  )r   r"   logspacer   r   )r<   r   r9  
expected_wr   r  r  s          r0   test_05zTest_bode.test_05  s_     aS1a&!![Q**
Vq)))3Az*****r2   c                     t          dgddg          }t          |d          \  }}}t          |d         d           d S Nr^   r   rL   r  r)  )r   r   r   r<   r   r   r  r  s        r0   test_06zTest_bode.test_06  sK     aS1a&!!Vq)))3QqT4     r2   c                 V    t          dgg d          }t          |d          \  }}}d S )Nr^   )r^   r   r  rL   r  )r   r   r  s        r0   test_07zTest_bode.test_07  s5     aS+++&&Vq)))3r2   c                     t          g g dd          }|                    t          j        ddd                    \  }}}t	          t          |          dd	           d S )
N)rd   rl   rq   rr   rs   r^   r_   rm   r  r  i>   r   )r   r   r"   r  r   minr  s        r0   test_08zTest_bode.test_08  sb    R222A66bk"b#&>&>??3CJJb999999r2   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   r  r     rh   )r"   rW   r6   	companionr  r   r   r   r   r   r  sqrtr   )r<   r   r=   r>   r   r   r   r   r   r  r  expected_magnitudes               r0   test_from_state_spacezTest_bode.test_from_state_space  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   r2   r0   r  r  o  s        : : :
> 
> 
>	/ 	/ 	/	3 	3 	3+ + +! ! !* * *: : :5 5 5 5 5r2   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 )Nr^   r  r  )gGz?r   gׁsF?)MbXrO   r  r   r   r   r   r$   r%   )r<   r   r   Hexpected_reexpected_ims         r0   test_output_manualz Test_freqresp.test_output_manual  s     aS1a&!!LL!$$$1))),,,AFK;;;;AFK;;;;;;r2   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 )Nr^   r  r  r  )	r   r   r"   r  r   r   r   r$   r%   r<   r   r   r  rn  rB   s         r0   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2r2   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}t	          ||           d S r  )r   r"   r  r   r   )r<   r   r9  r  r   r  s         r0   test_freq_rangezTest_freqresp.test_freq_range  s]     aS1a&!![Q**
!$$$1Az*****r2   c                     t          dgddg          }t          |d          \  }}t          |d         d           d S r  )r   r   r   )r<   r   r   r  s       r0   test_pole_zerozTest_freqresp.test_pole_zero  sI     aS1a&!!!$$$1QqT4     r2   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  r  r  r  rL   rV   )r"   rW   r6   r  r  r   r   r   r   r   r   r$   r%   )r<   r   r=   r>   r   r   r   r   r   r  rn  rB   s               r0   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 )Nr`   rH   r^   r  r  r  r  r  s         r0   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2r2   N)	r   r   r   r  r  r  r  r  r  r   r2   r0   r	  r	    sn        < < <	3 	3 	3+ + +! ! !3 3 3*3 3 3 3 3r2   r	  )r   r   )8abcr   r   numpyr"   numpy.testingr   r   r   r   r   pytestr	   r   r
   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr6   r1   r4   r   r   r  r   r1  rK  rP  rS  r^  rb  ri  rq  r  r  r  r  r	  r   r2   r0   <module>r"     s             7 7 7 7 7 7 7 7 7 7 7 7 7 7 * * * * * *      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 H H H H H H 8 7 7 7 7 7      N N N N*V@ V@ V@ V@ V@ V@ V@ V@r[P [P [P [P [P [P [P [P|n1 n1 n1 n1 n1 n1 n1 n1b; ; ; ; ;~ ; ; ;."0 "0 "0 "0 "0 "0 "0 "0JF/ F/ F/ F/ F/ F/ F/ F/R- - - - -$ - - -( ( ( ( (# ( ( (@. @. @. @. @. @. @. @.F+ + + + + + + +$    ~          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3r2   