
     hݸ                     x   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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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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           Z0 G d! d"          Z1 G d# d$          Z2 G d% d&          Z3 G d' d(          Z4 G d) d*          Z5dS ),    N)assert_almost_equalassert_equalassert_allcloseassert_suppress_warnings)raises)ss2tftf2sslsim2impulse2step2ltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients)matrix: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          Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer0      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_matrixr0   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
r1   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?rF   grh|?gE    )r   K@V-?rI   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rK   rK      rU   )r!   arrayreshaperC   errstate)r;   r<   r=   r>   s       r/   	test_realzTestPlacePoles.test_real4   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      )                          ?rS   )dividerT   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirK   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   ri   ri   )ri   rd   rd   )rc   (   2   <   F   y      4      y      4      @y      @      @y      @      )
rc   rj   rk   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   rh   r   r   r   r   	   )
r   r   r   r   r]   r   r   r]   rK   rU   rK   )y            ?y                        ?            )rt   r^   ru   rv   )	r!   rV   rX   rC   rW   oneseyediagr   )r;   r<   r=   r>   big_Abig_Bs         r/   test_complexzTestPlacePoles.test_complexJ   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 )NrE   rG   )r   rH   rI   rI   r   r   rJ   r   r]   rK   rU   rG   rh   rg   r[      rL   )ra   r`   r^   rt   r   r]   )r!   rV   rW   rC   r   r*   nannb_iter)r;   r<   r=   r>   r@   s        r/   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[!$$$$$r1   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   rG   )r   r   r   r   r]   r   r   r]   rK   ) 皙ffffff333333foorP   r]   )r   r   r   r   r^   )r   r   r   *   r*   ire   )rt   rt   rt   rt   )rG   rG   )rG   rK   r]   rK   rU   rG   T)recordalways)r_   rt   r^   rw   gؗҜ<)r*   rf   r_   z4Convergence was not reached after maxiter iterations)ra   r`                @rt   rU   )rt   r^   rw   )ra   r`   r   y             rO   )r!   rV   rW   assert_raisesr&   r   newaxisrx   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr'   messager   r   )r;   r<   r=   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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__rC   rY   r}   r   r    r1   r/   r3   r3   &   sn        
 
 
) ) ),N! N! N!` %  %  %D@@ @@ @@ @@ @@r1   r3   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       r/   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sc    bh1vh1vh1vh1v	# 	# 	# 	# 	#r1   c                 F    dD ]\  }}}|                      |||           d S )N))rU   rU   rU   )r]   rU   rU   r]   r]   r]   )r   r   s       r/   test_shapeszTestSS2TF.test_shapes  s>     9 	. 	.GAq!$$Q1----	. 	.r1   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   rt   r^   r]   r   vIh%<=r   rK   +=)r!   rV   r
   r   r	   )	r;   bar<   r=   CDbbaas	            r/   
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******r1   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)rK   r]   r   r   r   rK   r]   rh   )r
   r   r	   r;   tfr<   r=   r   r   numdens           r/   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0r1   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]   rK   rt   r   r   r   r_   )r]   r   r]   r   )r]   rK   rU   r   )rt   r^   rw   )r]   r   r   r   r]   r   )r   r]   rK   rU   rU   )dtyperg   ighe99ir^   )r]   rg   rh   r   rw   )r   r]   r^   )r
   r   r	   r!   rV   objectr   s           r/   test_simo_round_tripzTestSS2TF.test_simo_round_trip4  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3r1   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^   rw   rt   r   r]   )rh   r]   r   )        r   r   r   r   r   r*   r+   )r   r         @r   r   )r	   r   )r;   r<   r=   r   r   r   r   s          r/   test_all_int_arrayszTestSS2TF.test_all_int_arraysm  s    YY			<<<0S1#sOYYKSEAq!$$S2223%eLLLL111>>>>>>r1   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]   rK   r   r   r   r   )r!   rV   r	   r   vstack)r;   r<   r=   r   r   b_allr   b0a0b1a1b2a2s                r/   test_multioutputzTestSS2TF.test_multioutputv  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Or1   N)
r   r   r   r   r   r   r   r   r   r   r   r1   r/   r   r      s        # # #. . .+ + +1 1 1074 74 74r? ? ?$P $P $P $P $Pr1   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestLsimc                     t                      5 }|                    t                     t          | }d d d            n# 1 swxY w Y   |S N)r   filterr   r   )r;   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   rh   X0r   r!   linspace
zeros_liker   expr   r;   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*****r1   c                     |                      dddd          }t          j        dd          }|}t          |||          \  }}}d|dz  z  }t	          ||           t	          ||           d S )Nr   r   r   rh         ?rK   )r   r!   r   r   r   r   s           r/   test_integratorzTestLsim.test_integrator  sy    RR00K!&!Q''
a47]
Az***Az*****r1   c                    t          ddgddgg          }t          dgdgg          }t          ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||          \  }}}	t          j        t          j        d|dz  z  |g                    }
|dz  }t          |	|
           t          ||           d S )Nr   r   r   r   rh   r   rK   )	r   r   r!   r   	ones_liker   	transposerV   r   )r;   r<   r=   r   r   r   r   r   r   r   r   
expected_ys               r/   test_double_integratorzTestLsim.test_double_integrator  s    RHr2h'((RD2$<  RH:Aq"--K!LOO&!Q''
a\"(C$'M4+@"A"ABB
1W
Az***Az*****r1   c                 ~   t          ddgddgg          }t          dgdgg          }t          ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||ddg          \  }}}	|t          j        |           z  }
t          ||
           d S r   )r   r   r!   r   r   r   r   r   )r;   r<   r=   r   r   r   r   r   r   r   r   s              r/   test_jordan_blockzTestLsim.test_jordan_block  s     S"ICy)**RD2$<  RH:Aq"--K!M!&!QC:666
aBFD5MM)
Az*****r1   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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]   rK   r   r   e   r   r]   )	r!   rV   r   r   r   r   r   r   r   )r;   r<   r=   r   r   r   r   r   r   r   r   r   expected_x0expected_x1s                 r/   	test_misozTestLsim.test_miso  s2   HtSkC;/00HsCj3*-..Hc3Z  HUOOAq!,,K3$$M!&!QC:666
aVTE]]
fdUmmfT$Y''Az***AaaacFK000AaaacFK00000r1   c                    |                      dddd          }t          j        dd          }t          j        |          }t	          |||dg          \  }}}t          j        |           }t          ||           d S )Nr   r   r   r]   rK   r   r   )r;   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*****r1   N)
r   r   r   r   r   r   r   r   r   r  r   r1   r/   r   r     s}          	+ 	+ 	++ + ++ + ++ + + 1 1 1$+ + + + +r1   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
Test_lsim2c                     t          j        ddd          }t          j        |          }dgddgf}t          |||dg          \  }}}t          j        |           }t          |d d df         |           d S )Nr   rd     r   r   r!   r   r   r   r   r   r;   r   r   r   r   r   r   r   s           r/   test_01zTest_lsim2.test_01  s    K"T""M! %S	"61aSE222
aVTE]]
AaaacFJ/////r1   c                     t          j        g d          }t          j        g d          }dgddgf}t          |||dg          \  }}}t          j        d|          }t	          |d d df         |           d S )N)r   r   r   r   )r   r   r   r   r   r   r   r   )r!   rV   r   maximumr   r  s           r/   test_02zTest_lsim2.test_02  s    H)))**H)))**%S	"61aSE222
aZT**
AaaacFJ/////r1   c                     t          j        g d          }t          j        g d          }dgddgf}t          |||d          \  }}}t          j        g d          }t          |d d df         |           d S )	N)r   r   r   皙?r  r   )r   r   r   r   r   r   r   r   {Gz?)hmax)r   r   r   皙?r  r  r   )r!   rV   r   r   r  s           r/   test_03zTest_lsim2.test_03  s    H33344H33344%c
#61ad333
aX<<<==
AaaacFJ/////r1   c                    t          j        ddd          }t          j        |          }dgg df}t          |||ddg          \  }}}d|z
  t          j        |           z  }t          |d d df         |           d S )Nr   rd   r  r   r   r   r   r   r   r  r  s           r/   test_04zTest_lsim2.test_04  s    K2t$$M! %)61aS#J777
aDjBFD5MM1
AaaacFJ/////r1   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	                      5 }|                    t                     t          ||||f|ddg	          \  }}}	d d d            n# 1 swxY w Y   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   g      $@r   )Tr   r]   )
r!   rV   r   r   r   r   r   r   r   r   )r;   r<   r=   r   r   r   r   r   r   r   r   r   r   s                r/   test_05zTest_lsim2.test_05  s    HtSkC;/00HsCj3*-..Hc3Z  HVK4%%   	>CJJ'''!AayA3*===JD!Q	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> VTE]]
fdUmmfTD[))Az***AaaacFK000AaaacFK00000s   7CC
C
c                     dgg df}t          |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         r/   test_06zTest_lsim2.test_062  sj    
 %)6sCj111
aDjBFD5MM1
AaaacFJ/////r1   N)	r   r   r   r	  r  r  r  r  r  r   r1   r/   r  r    sn        0 0 00 0 00 0 0	0 	0 	01 1 1.0 0 0 0 0r1   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   funcr!   r   r   r;   r   r   r   r   s        r/   r	  z_TestImpulseFuncs.test_01@  sN     %#c#))F##aVTE]]
Az*****r1   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   nr   r   r   r   s          r/   r  z_TestImpulseFuncs.test_02H  s    
 %#c#K3""))Fa)((aTZ!&&&D!$$$VQBZZ
Az*****r1   c                     dgddgf}|                      |d          \  }}dt          j        |           z  }t          ||           d S Nr   r   r   r   r  r!  s        r/   r  z_TestImpulseFuncs.test_03V  sW    
 %#c#))Fs)++a264%==(
Az*****r1   c                     dgddgf}|                      |dg          \  }}dt          j        |           z  }t          ||           d S r)  r  r!  s        r/   r  z_TestImpulseFuncs.test_04`  sY    
 %#c#))Fu)--a264%==(
Az*****r1   c                     dgddgf}|                      |          \  }}t          j        |          }t          ||           d S Nr   r   )r   r!   r   r   r!  s        r/   r  z_TestImpulseFuncs.test_05j  sL    %#c#))F##a\$''
Az*****r1   c                     dgg df}|                      |          \  }}|t          j        |           z  }t          ||           d S )Nr   r  r  r!  s        r/   r  z_TestImpulseFuncs.test_06q  sS     %)))F##aBFD5MM)
Az*****r1   c                     dgg df}|                      |dgddg          \  }}|                      |dgdg          \  }}d S )Nr   r  rU   rh   rg   r   r  r   r;   r   r   r   s       r/   test_array_likez!_TestImpulseFuncs.test_array_likez  sV    %)))Fsq!f)55a))Fsqc)22aaar1   c                 J    dgg df}|                      |dd          \  }}d S )Nr   r  rU   rh   r/  r0  r1  s       r/   test_array_like2z"_TestImpulseFuncs.test_array_like2  s1    %)))FqA)..aaar1   N)r   r   r   r	  r  r  r  r  r  r2  r4  r   r1   r/   r  r  =  s        + + ++ + ++ + ++ + ++ + ++ + +3 3 3/ / / / /r1   r  c                       e Zd Zd ZdS )TestImpulse2c                     t           | _        d S r   )r   r   r;   s    r/   setup_methodzTestImpulse2.setup_method  s    			r1   Nr   r   r   r9  r   r1   r/   r6  r6    s#            r1   r6  c                       e Zd Zd ZdS )TestImpulsec                     t           | _        d S r   )r   r   r8  s    r/   r9  zTestImpulse.setup_method  s    			r1   Nr:  r   r1   r/   r<  r<    s#            r1   r<  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 r  r  r!  s        r/   r	  z_TestStepFuncs.test_01  sS     %#c#))F##a264%==(
Az*****r1   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   r$  r]   r%  r&  s          r/   r  z_TestStepFuncs.test_02  s    
 %#c#K3""))Fa)((aTZ!&&&D!$$$^
Az*****r1   c                     dgddgf}|                      |d          \  }}ddt          j        |           z  z   }t          ||           d S Nr   r   r   r]   r   r  r!  s        r/   r  z_TestStepFuncs.test_03  s\    
 %#c#))Fs)++aRVTE]]**
Az*****r1   c                     dgddgf}|                      |dg          \  }}ddt          j        |           z  z   }t          ||           d S rC  r  r!  s        r/   r  z_TestStepFuncs.test_04  s^    
 %#c#))Fu)--aRVTE]]**
Az*****r1   c                 h    dgddgf}|                      |          \  }}|}t          ||           d S r,  r   r   r!  s        r/   r  z_TestStepFuncs.test_05  sD     %S	"))F##a
Az*****r1   c                     dgg df}|                      |          \  }}dd|z   t          j        |           z  z
  }t          ||           d S )Nr   r  r]   r  r!  s        r/   r  z_TestStepFuncs.test_06  s\     %)))F##a!d(bfdUmm33
Az*****r1   c                 L    dgg df}|                      |ddg          \  }}d S )Nr   r  rh   rg   r$  r0  r1  s       r/   r2  z_TestStepFuncs.test_array_like  s3    %)))Fq!f)--aaar1   N)
r   r   r   r	  r  r  r  r  r  r2  r   r1   r/   r?  r?    s}        + + ++ + ++ + ++ + ++ + ++ + +. . . . .r1   r?  c                       e Zd Zd Zd ZdS )	TestStep2c                     t           | _        d S r   )r   r   r8  s    r/   r9  zTestStep2.setup_method  s    			r1   c                 n    dgddgf}|                      |dd          \  }}|}t          ||           d S )Nr   r   g|=r   )r+   r*   rF  r!  s        r/   r  zTestStep2.test_05  sJ     %#c#))FT)::a
Az*****r1   N)r   r   r   r9  r  r   r1   r/   rJ  rJ    s2          
+ 
+ 
+ 
+ 
+r1   rJ  c                       e Zd Zd Zd ZdS )TestStepc                     t           | _        d S r   )r   r   r8  s    r/   r9  zTestStep.setup_method  s    			r1   c                 ,    t          g dgdf           d S )Nr_   y      ?        )r   r8  s    r/   test_complex_inputzTestStep.test_complex_input  s!     	b2$r1   N)r   r   r   r9  rQ  r   r1   r/   rN  rN    s2              r1   rN  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_   rU   )
r   r   
isinstancer   r   dtr!   rV   r   r   r;   ss     r/   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$'''(((r1   N)r   r   r   rY  r   r1   r/   rS  rS    s#            r1   rS  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]   rK   rU   rG   r   )r   r!   rV   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 	8r1   c                    t          dddd          }t          t          |                                t                                t          t          |                                t
                               t          t          |                                t                               t          t          |          |u           t          |                                |u           d S )Nr]   rK   rU   rG   )r   r   rU  to_ssto_tfr   to_zpkr   rW  s     r/   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&'''		"#####r1   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   rV  rW  s     r/   test_propertieszTestStateSpace.test_properties  sY    
 q!Q""QWqc"""QWqc"""r1   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   r1   r/   BadTyperi  +  s        Dr1   rj  rN   gffffff?r   gr]   r   rM   gg?r  g?d   rK   )Ur  gh㈵>)r+   rU   rG   rt   )r   r!   rV   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr&   r   rV  )r;   rj  s1s2
s_discretes2_discretes3_discreter   r   typrX  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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$
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   r]  rb  rf  rz  r   r1   r/   r[  r[    sU        8 8 8	$ 	$ 	$  ~ ~ ~ ~ ~r1   r[  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]   rK   )r   r!   rV   r8  s    r/   r]  z(TestTransferFunction.test_initialization  sP    A!qc"""1#!66666r1   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   rU  r_  r   r`  ra  r   rW  s     r/   rb  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,---		"#####r1   c                     t          ddgddg          }t          |j        dg           t          |j        dg           d S r  )r   r   re  r   rW  s     r/   rf  z$TestTransferFunction.test_properties  sI    
 aVaW--QWqc"""QWqc"""""r1   N)r   r   r   r]  rb  rf  r   r1   r/   r|  r|    sA        7 7 7	$ 	$ 	$# # # # #r1   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!   rV   r8  s    r/   r]  z&TestZerosPolesGain.test_initialization  sV    q!QsQC###rx}}bhsmmQ77777r1   c                    t          ddd          }t          t          |                                t                               t          t          |                                t                               t          t          |                                t                                t          t          |          |u           t          |                                |u           d S )Nr]   rK   rU   )r   r   rU  r_  r   r`  r   ra  rW  s     r/   rb  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!!*+++

!#$$$$$r1   N)r   r   r   r]  rb  r   r1   r/   r  r    s2        8 8 8	% 	% 	% 	% 	%r1   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!   rV   r<   r=   r   r   r8  s    r/   r9  z Test_abcd_normalize.setup_method  si    C:Sz233D6C5/**C:,''C5'""r1   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1r1   c                 d    t          t          t          ddg| j        | j        | j                   d S )Nr]   r_   )r   r&   r   r=   r   r   r8  s    r/   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s5    j.1b'fdfdf	. 	. 	. 	. 	.r1   c                 d    t          t          t          | j        ddg| j        | j                   d S Nr_   rh   r   r&   r   r<   r   r   r8  s    r/   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  5    j.$&2q'fdf	& 	& 	& 	& 	&r1   c                 h    t          t          t          | j        | j        dgdgg| j                   d S )Nr   r   )r   r&   r   r<   r=   r   r8  s    r/   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s9    j.$&$&usendf	. 	. 	. 	. 	.r1   c           	      d    t          t          t          | j        | j        | j        ddg           d S )Nr  r   )r   r&   r   r<   r=   r   r8  s    r/   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s5    j.$&$&fsAh	( 	( 	( 	( 	(r1   c                 d    t          t          t          | j        ddg| j        | j                   d S r  r  r8  s    r/   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  r  r1   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        r/   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  ss    #DFDFDFDFCC
1aQQQQr1   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 rd  )r   r<   r=   r   r    r  s        r/   r   zTest_abcd_normalize.test_shapes  s    #DFDFQFA>>
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,,,r1   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rK   r   )r   r   r<   r=   r   r   r]   r!   r   r   r<   r   r    )r;   B_D_r<   r=   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QQQQWQZ!---QWQZa11111r1   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   rK   r<   r=   r   r   r]   r  )r;   r  C_r<   r=   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QQQQWQZ!---QWQZ!-----r1   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        r/   test_missing_Az"Test_abcd_normalize.test_missing_A      #df$&AAA
1aQWQZ,,,QWQZ,,,QWtv|AQ@AAAAAr1   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        r/   test_missing_Bz"Test_abcd_normalize.test_missing_B  r  r1   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        r/   test_missing_Cz"Test_abcd_normalize.test_missing_C$  r  r1   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        r/   test_missing_Dz"Test_abcd_normalize.test_missing_D*  r  r1   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        r/   test_missing_ABz#Test_abcd_normalize.test_missing_AB0  s    #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr1   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        r/   test_missing_ACz#Test_abcd_normalize.test_missing_AC8      #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr1   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        r/   test_missing_ADz#Test_abcd_normalize.test_missing_ADA  r  r1   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        r/   test_missing_BCz#Test_abcd_normalize.test_missing_BCJ  r  r1   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_failsS  s    j.DF;;;;;;r1   c                 T    t          t          t          | j        | j                   d S )N)r<   r   )r   r&   r   r<   r   r8  s    r/   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_failsV  #    j.DFdfEEEEEEr1   c                 T    t          t          t          | j        | j                   d S )N)r<   r=   )r   r&   r   r<   r=   r8  s    r/   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_failsY  r  r1   N)r   r   r   r9  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r1   r/   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r1   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]   rd   rk  r   )r   r^   rj   rp   decimalr   r   r   )r;   r   r   magphaseexpected_mags         r/   r	  zTest_bode.test_01_  sb     aS1a&!!Vq)))3(((Cq999999r1   c                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )Nr]   r  r]   rd   r  )gig33333Ur  r  )r;   r   r   r  r  expected_phases         r/   r  zTest_bode.test_02m  s`     aS1a&!!LLVq)))3+++E>1======r1   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           r/   r  zTest_bode.test_03y  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCbhs1vv...C.....r1   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           r/   r  zTest_bode.test_04  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCAFAF33e;beCE>22222r1   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}}t	          ||           d S Nr]   rd   rt   r'  )r   r!   logspacer   r   )r;   r   r'  
expected_wr   r  r  s          r/   r  zTest_bode.test_05  s_     aS1a&!![Q**
Vq)))3Az*****r1   c                     t          dgddg          }t          |d          \  }}}t          |d         d           d S Nr]   r   rK   r  r  )r   r   r   r;   r   r   r  r  s        r/   r  zTest_bode.test_06  sK     aS1a&!!Vq)))3QqT4     r1   c                 V    t          dgg d          }t          |d          \  }}}d S )Nr]   )r]   r   rk  rK   r  )r   r   r  s        r/   test_07zTest_bode.test_07  s5     aS+++&&Vq)))3r1   c                     t          g g dd          }|                    t          j        ddd                    \  }}}t	          t          |          dd	           d S )
N)rc   rk   rp   rq   rr   r]   r^   rl   rk  r  i>   r  )r   r   r!   r  r   minr  s        r/   test_08zTest_bode.test_08  sb    R222A66bk"b#&>&>??3CJJb999999r1   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   rk  r     rg   )r!   rV   r5   	companionr  r   r   r   r   r   r  sqrtr   )r;   r   r<   r=   r   r   r   r   r   r  r  expected_magnitudes               r/   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   r1   r/   r  r  ]  s        : : :
> 
> 
>	/ 	/ 	/	3 	3 	3+ + +! ! !* * *: : :5 5 5 5 5r1   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XrN   r  r  r   r   r   r#   r$   )r;   r   r   Hexpected_reexpected_ims         r/   test_output_manualz Test_freqresp.test_output_manual  s     aS1a&!!LL!$$$1))),,,AFK;;;;AFK;;;;;;r1   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  rX  rA   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2r1   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}t	          ||           d S r  )r   r!   r  r   r   )r;   r   r'  r  r   r  s         r/   test_freq_rangezTest_freqresp.test_freq_range  s]     aS1a&!![Q**
!$$$1Az*****r1   c                     t          dgddg          }t          |d          \  }}t          |d         d           d S r  )r   r   r   )r;   r   r   r  s       r/   test_pole_zerozTest_freqresp.test_pole_zero  sI     aS1a&!!!$$$1QqT4     r1   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  rk  r  r  rK   rU   )r!   rV   r5   r  r  r   r   r   r   r   r   r#   r$   )r;   r   r<   r=   r   r   r   r   r   r  rX  rA   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 )Nr_   rG   r]   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2r1   N)	r   r   r   r  r  r  r  r  r   r   r1   r/   r  r    sn        < < <	3 	3 	3+ + +! ! !3 3 3*3 3 3 3 3r1   r  )r   r   )6r   numpyr!   numpy.testingr   r   r   r   r   pytestr   r   scipy.signalr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr5   scipy.sparse._sputilsr   r0   r3   r   r   r  r  r6  r<  r?  rJ  rN  rS  r[  r|  r  r  r  r  r   r1   r/   <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|R+ R+ R+ R+ R+ R+ R+ R+jH0 H0 H0 H0 H0 H0 H0 H0V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3r1   