
    xf{                     4   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,      Z7y).    )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)BadCoefficientsc           
         |j                         }| D ]  }d}t        |j                  d         D ]  }t        j                  t        j
                  |      t        j                  |      gt        j
                  ||         t        j                  ||         g||      srd}t        j                  ||        n |rt        dt        |      z   dz   t        |      z          y)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          @/usr/lib/python3/dist-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer0      s     
B 
NBHHQK( 	F{{BGGBK5GGBvJ/F1DE' 		"f%	 /#b'9FBSWLMM
N    c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestPlacePolesc                 ,   t        |||fi |}t        j                  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)   sv    
 !Q,V,iimmAq#//(B$BC!Hc&9&9:Hc&8&89Ac112
r1   c                    t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        j                  g d      }| j                  |||d       | j                  |||d       t        j                  d	
      5  | j                  ||d       d d d        y # 1 sw Y   y xY w)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_real5   s     HH % &&-gam 	
 HH=>FFq!LHH34 	Aq!F+Aq!D) [[* 	)KK1i(	) 	) 	)s   &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  | j                  |||       d d d        g d	}t        j                  dd      5  | j                  |||d
       d d d        t        j                  g d      j	                  dd      }t        j                  g d      j	                  dd      }g d}| j                  |||       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  | j                  |||       d d d        g d}| j                  |d dd df   |d dd df   |       g d}| j                  |d dd df   |d dd df   |       t        j                  g d      j	                  dd      }t        j                  g d      j	                  dd      }t        j                  g d      }t        j                  dd      5  t        |||       d d d        t        j                  g d      }t        j                  dd      5  | j                  |||       d d d        y # 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   SxY w# 1 sw Y   {xY w# 1 sw Y   y xY w)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_complexK   s    HHl%""$ % HHq!f!f!f!f 
 HH+, [[(; 	!KK1a 	! %[[(; 	/KK1aK.	/ HHG
 WQq\ 	
 HH(
 wq| 	
 KAq!
  + !R!21QR4!88bqb!ebqb!e=[[(; 	)KKua(	) 7E#2#crc'NE#2#crc'NA66E#2#crc'NE#2#crc'NA6 HH ) **1'!A, 	
HH*+33Aa8HH56[[(; 	!1a 	!
 HH/0[[(; 	!KK1a 	! 	!{	! 	!	/ 	/>	) 	) 	! 	!	! 	!s<   1L(L L%*L2.L>LL"%L/2L;>Mc                 >   t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        j                  g d      }| j                  |||      }t	        |j
                  t         j                         t	        |j                  t         j                         t        j                  d      }| j                  |||      }t	        |j
                  t         j                         t	        |j                  t         j                         |d d df   j                  dd      }t        j                  d      }| j                  |||      }t	        |j
                  d       t	        |j                  d       y )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   s1    HH % &&-gam 	
 HH " ##*71a= 	

 HH34kk!Q" 	SXXrvv&S[["&&) HH()kk!Q"SXXrvv&S[["&&) acFNN1QHH()kk!Q" 	SXXq!S[[!$r1   c           
         t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        t        t
        ||dd       t        t        t
        ||t        j                  d      j                  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        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       y # 1 sw Y   zxY w) 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   sW   HH9:BB1QGHH&'//!4 	j+q!5J"	$ 	j+q!hh45==aB	D 	j+q1RZZ/@!+	- 	j+q!Aa

N2C+	- 	j+q!5MN 	j+q!5EF 	j+q!5J	 	j+q!5J!	# 	j+q!]C 	j+rwwu~ggeni	1
 $$D1 	*Q!!(+aMrJCCFaK Jqu~~{;<J1R5==)* +b)	* 	j+q!5KL 	j+q2A2w=I 	j+q!BQBqD'=I 	j+q!/	@'	* 	*s   
BKK(N)__name__
__module____qualname__rC   rY   r}   r   r    r1   r/   r3   r3   '   s     
),N!` %D@@r1   r3   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)		TestSS2TFc           	          t        t        j                  ||f      t        j                  ||f      t        j                  ||f      t        j                  ||f      d       y )Nr   )r   r!   zerosr;   pqrs       r/   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sK    bhh1vhh1vhh1vhh1v	#r1   c                 @    dD ]  \  }}}| j                  |||        y )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                 p   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       y )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    HH_%HH_%1a[
1aRHq!f-E:QC!:E2QF8%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       y )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  s5   BZ
1aQC5u-QC5u-QC5u-QC5u-Aq!$Sq!fXE2aV%0sQCj!_BZ
1aQC5u-QC5u-QC!:E2QC!:E2Aq!$Sq!fq!f-E:aV%0r1   c                 R   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       y )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_trip5  sp   1v1vA'BZ
1aRD6.QC5u-QC";U3QC!:E2Aq!$Sq!fq!f-E:aV%0)$i0BZ
1aRHq!f-E:QC!:E2RGaV,59QC!:E2Aq!$Si3%@YU3)$l3BZ
1aL)Y?eLQC!qc?7Iy1>QC!:E2Aq!$SlL9F\6hhAq6{&1Aq6:BZ
1aRD6.QC5u-QC";U3QC!:E2Aq!$Sq!fq!f-E:aV%0hhB+6:IFBZ
1aRHq!f-E:QC!:E2QGb"X.U;QC!:E2Aq!$Sj)45AYU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       y )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_arraysn  sb    	<0S1#sOKSEAq!$S23%eL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       y )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_multioutputw  s;    HH++++- . HHseeee  HH***, - HHseee 
 Aq!$q q!QqT1Q4(Bq!QqT1Q4(Bq!QqT1Q4(B 	AE*AE*AE*ryy"b"6UOr1   N)
r   r   r   r   r   r   r   r   r   r   r   r1   r/   r   r      s'    #.+1074r?$Pr1   r   c                   P    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y)_TestLsimFuncsr[   c                      y Nr   r;   argsr?   s      r/   funcz_TestLsimFuncs.func  s    r1   c                     t               5 }|j                  t               t        | }d d d        |S # 1 sw Y   S xY wr   )r   filterr   r   )r;   r   supsystems       r/   
lti_nowarnz_TestLsimFuncs.lti_nowarn  s=      	 CJJ'$ZF	  	  s   3=c                    | j                  dddd      }t        j                  dd      }t        j                  |      }| j	                  |||dg      \  }}}t        j
                  |       }t        ||       t        ||       y 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_TestLsimFuncs.test_first_order  sw     R2.KK!MM!YYvq!Y6
aVVTE]
Az*Az*r1   c                    t        j                  ddd      }t        j                  |      }| j                  dgg d      }| j	                  |||ddg      \  }}}d|z
  t        j
                  |       z  }t        |d d df   |       y )Nr   rd   i  r   r   r   r   r   r   )r!   r   r   r   r   r   r   r;   r   r   r   r   r   r   r   s           r/   test_second_orderz _TestLsimFuncs.test_second_order  s    KK2t$MM! #8YYvq!c
Y;
aDjBFFD5M1
AadGZ0r1   c                     | j                  dddd      }t        j                  dd      }|}| j                  |||      \  }}}d|dz  z  }t	        ||| j
                         t	        ||| j
                         y )Nr   r   r   rh         ?rK   decimal)r   r!   r   r   r   digits_accuracyr   s           r/   test_integratorz_TestLsimFuncs.test_integrator  st    RR0KK!YYvq!,
a47]
Az43G3GHAz43G3GHr1   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      }| j                  ||||      }t        j                  ddd      }t        j                  t        |      d	f      }| j                  |||ddg
      \  }}	}
t        j                  |       }t        j                  |       }t        j                  d|z        }t        |	|       t        |
d d df   |       t        |
d d df   |       y )Nr   r          r   r]   rK   r   g      $@   rK   )UTr   r]   	r!   rV   r   r   r   r   r   r   r   r;   r<   r=   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r/   test_two_statesz_TestLsimFuncs.test_two_states  s   HHtSkC;/0HHsCj3*-.HHc3Z HHVAq!,KK4$HHc!fa[!YYvaS#JY?
aVVTE]
ffdUmffTD[)Az*AadG[1AadG[1r1   c                    t        j                  ddgddgg      }t        j                  dgdgg      }t        j                  ddgg      }| j                  |||d      }t        j                  dd      }t        j                  |      }| j                  |||      \  }}}	t        j                  t        j                  d|dz  z  |g            }
|dz  }t        |	|
| j                         t        ||| j                         y )	Nr   r   r   r   rh   r   rK   r   )	r!   rV   r   r   	ones_liker   	transposer   r   )r;   r<   r=   r   r   r   r   r   r   r   r   r  s               r/   test_double_integratorz%_TestLsimFuncs.test_double_integrator  s    HHr2hR)*HHrdRD\"HHr2hZ Aq"-KK!LLOYYvq!,
a\\"((C$'M4+@"AB
1W
Az43G3GHAz43G3GHr1   c                    t        j                  ddgddgg      }t        j                  dgdgg      }t        j                  ddgg      }| j                  |||d      }t        j                  dd      }t        j                  |      }| j                  |||ddg      \  }}}	|t        j                  |       z  }
t        ||
       y r   )r!   rV   r   r   r   r   r   r   )r;   r<   r=   r   r   r   r   r   r   r   r  s              r/   test_jordan_blockz _TestLsimFuncs.test_jordan_block  s     HHsBi"c+,HHrdRD\"HHr2hZ Aq"-KK!MM!YYvq!c
Y;
aBFFD5M)
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      }| j                  ||||      }t        j                  ddd      }t        j                  t        |      d	f      }| j                  |||ddg
      \  }}	}
t        j                  |       }t        j                  |       }t        j                  d|z        }t        |	|       t        |
d d df   |       t        |
d d df   |       y )Nr   r   r   r   r   r   r   e   rK   r   r]   r  r  s                 r/   	test_misoz_TestLsimFuncs.test_miso  s   HHtSkC;/0HHsCj3*-.HHc3Z HHUOAq!,KK3$HHc!fa[!YYvq!c
Y;
aVVTE]
ffdUmffT$Y'Az*AacFK0AacFK0r1   N)r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r1   r/   r   r     sC    O 	+	1I2&I+ 1r1   r   c                       e Zd Zd Zd Zd Zy)TestLsimc                     t        |i |S r   )r   r   s      r/   r   zTestLsim.func      T$V$$r1   c                     | j                  dddd      }t        j                  dd      }t        j                  |      }| j	                  |||dg      \  }}}t        j
                  |       }t        ||       y )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  sk    R2.KK!MM!YYvq!Y6
aVVTE]
Az*r1   c                     t        j                  g d      }t        j                  g d      }dgddgf}t        t        d      5  | j	                  |||dg      \  }}}d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   r   r   z"Time steps are not equally spaced.matchr   )r!   rV   r   r&   r   )r;   r   r   r   r   r   r   s          r/   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  sq    HH)*HH)*%#s$:!EG 	;61aSE:JD!Q	; 	; 	;s   A++A4N)r   r   r   r   r  r  r   r1   r/   r  r    s    %+;r1   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)	TestLsim2rg   c                     t        t        d      5  t        |i |\  }}}d d d        t        j                        t        j                        fS # 1 sw Y   4xY w)Nzlsim2 is deprecatedr  )r
   DeprecationWarningr   r!   squeeze)r;   r   r?   r   r   r   s         r/   r   zTestLsim2.func)  sU    %-BC 	-T,V,GAq!	-"**Q-A..	- 	-s   AAc                     t        j                  g d      }t        j                  g d      }dgddgf}| j                  |||dg      \  }}}t        j                  d|      }t	        ||       y )Nr  r  r   r   r   )r!   rV   r   maximumr   r   s           r/   "test_integrator_nonequal_timestampz,TestLsim2.test_integrator_nonequal_timestamp.  sh    HH)*HH)*%S	"YYvq!Y6
aZZT*
Az*r1   c                     t        j                  g d      }t        j                  g d      }dgddgf}| j                  |||d      \  }}}t        j                  g d      }t        ||       y )N)r   r   r   皙?r'  r   )r   r   r   r   r   r   r   r   {Gz?)hmax)r   r   r   皙?r*  r*  )r!   rV   r   r   r   s           r/   (test_integrator_nonequal_timestamp_kwargz2TestLsim2.test_integrator_nonequal_timestamp_kwarg7  se    HH34HH34%c
#YYvq!$Y7
aXX<=
Az*r1   c                     dgg df}| j                  |ddg      \  }}}d|z
  t        j                  |       z  }t        |d d df   |       y )Nr   r   r   r   r   r   r!   r   r   )r;   r   r   r   r   r   s         r/   test_default_argumentsz TestLsim2.test_default_arguments@  sV    
 %)YYv3*Y5
aDjBFFD5M1
AacFJ/r1   N)r   r   r   r   r   r%  r+  r.  r   r1   r/   r  r  &  s    O/
++0r1   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
_TestImpulseFuncsc                 ~    dgddgf}| j                  |      \  }}t        j                  |       }t        ||       y Nr   r-  r;   r   r   r   r  s        r/   r   z"_TestImpulseFuncs.test_first_orderN  s?     %#c#))F#aVVTE]
Az*r1   c                     dgddgf}d}t        j                  dd|      }| j                  ||      \  }}t        |j                  |f       t        ||       t        j                  |       }t        ||       y )Nr   r   r   r   r  r!   r   r   r   r    r   r   r;   r   nr   r   r   r  s          r/   test_first_order_fixed_timez-_TestImpulseFuncs.test_first_order_fixed_timeV  st    
 %#c#KK3"))Fa)(aTZZ!&D!$VVQBZ
Az*r1   c                     dgddgf}| j                  |d      \  }}dt        j                  |       z  }t        ||       y Nr   r   r   r   r-  r3  s        r/   test_first_order_initialz*_TestImpulseFuncs.test_first_order_initiald  sH    
 %#c#))Fs)+a2664%=(
Az*r1   c                     dgddgf}| j                  |dg      \  }}dt        j                  |       z  }t        ||       y r;  r-  r3  s        r/   test_first_order_initial_listz/_TestImpulseFuncs.test_first_order_initial_listn  sJ    
 %#c#))Fu)-a2664%=(
Az*r1   c                 |    dgddgf}| j                  |      \  }}t        j                  |      }t        ||       y Nr   r   )r   r!   r
  r   r3  s        r/   r   z!_TestImpulseFuncs.test_integratorx  s<    %#c#))F#a\\$'
Az*r1   c                     dgg df}| j                  |      \  }}|t        j                  |       z  }t        ||       y )Nr   r   r-  r3  s        r/   r   z#_TestImpulseFuncs.test_second_order  s@     %)))F#aBFFD5M)
Az*r1   c                 x    dgg df}| j                  |dgddg      \  }}| j                  |dgdg      \  }}y )Nr   r   rU   rh   rg   r   r  r   r;   r   r   r   s       r/   test_array_likez!_TestImpulseFuncs.test_array_like  sH    %)))Fsq!f)5a))Fsqc)2ar1   c                 @    dgg df}| j                  |dd      \  }}y )Nr   r   rU   rh   rC  rD  rE  s       r/   test_array_like2z"_TestImpulseFuncs.test_array_like2  s&    %)))FqA).ar1   N)r   r   r   r   r9  r<  r>  r   r   rF  rH  r   r1   r/   r0  r0  K  s*    ++++++3/r1   r0  c                       e Zd Zd Zy)TestImpulse2c                 f    t        t        d      5  t        |i |cd d d        S # 1 sw Y   y xY w)Nzimpulse2 is deprecatedr  )r
   r!  r   r   s      r/   r   zTestImpulse2.func  s0    %-EF 	-T,V,	- 	- 	-   '0Nr   r   r   r   r   r1   r/   rJ  rJ    s    -r1   rJ  c                       e Zd Zd Zy)TestImpulsec                     t        |i |S r   )r   r   s      r/   r   zTestImpulse.func  s    '''r1   NrM  r   r1   r/   rO  rO    s    (r1   rO  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	_TestStepFuncsc                     dgddgf}| j                  |      \  }}dt        j                  |       z
  }t        ||       y r2  r-  r3  s        r/   r   z_TestStepFuncs.test_first_order  sD     %#c#))F#a2664%=(
Az*r1   c                     dgddgf}d}t        j                  dd|      }| j                  ||      \  }}t        |j                  |f       t        ||       dt        j                  |       z
  }t        ||       y )Nr   r   r   r   r5  r]   r6  r7  s          r/   r9  z*_TestStepFuncs.test_first_order_fixed_time  sx    
 %#c#KK3"))Fa)(aTZZ!&D!$^
Az*r1   c                     dgddgf}| j                  |d      \  }}ddt        j                  |       z  z   }t        ||       y Nr   r   r   r]   r   r-  r3  s        r/   r<  z'_TestStepFuncs.test_first_order_initial  sM    
 %#c#))Fs)+aRVVTE]**
Az*r1   c                     dgddgf}| j                  |dg      \  }}ddt        j                  |       z  z   }t        ||       y rV  r-  r3  s        r/   r>  z,_TestStepFuncs.test_first_order_initial_list  sO    
 %#c#))Fu)-aRVVTE]**
Az*r1   c                 V    dgddgf}| j                  |      \  }}|}t        ||       y r@  r   r   r3  s        r/   r   z_TestStepFuncs.test_integrator  s5     %S	"))F#a
Az*r1   c                     dgg df}| j                  |      \  }}dd|z   t        j                  |       z  z
  }t        ||       y )Nr   r   r]   r-  r3  s        r/   r   z _TestStepFuncs.test_second_order  sI     %)))F#a!d(bffdUm33
Az*r1   c                 B    dgg df}| j                  |ddg      \  }}y )Nr   r   rh   rg   r5  rD  rE  s       r/   rF  z_TestStepFuncs.test_array_like  s(    %)))Fq!f)-ar1   N)
r   r   r   r   r9  r<  r>  r   r   rF  r   r1   r/   rR  rR    s%    ++++++.r1   rR  c                       e Zd Zd Zd Zy)	TestStep2c                 f    t        t        d      5  t        |i |cd d d        S # 1 sw Y   y xY w)Nzstep2 is deprecatedr  )r
   r!  r   r   s      r/   r   zTestStep2.func  s0    %-BC 	*$)&)	* 	* 	*rL  c                 \    dgddgf}| j                  |dd      \  }}|}t        ||       y )Nr   r   g|=:0yE>)r+   r*   rY  r3  s        r/   r   zTestStep2.test_integrator  s;     %#c#))FT):a
Az*r1   N)r   r   r   r   r   r   r1   r/   r]  r]    s    *
+r1   r]  c                       e Zd Zd Zd Zy)TestStepc                     t        |i |S r   r   r   s      r/   r   zTestStep.func  r  r1   c                 "    t        g dgdf       y )Nr_   y      ?        rd  r;   s    r/   test_complex_inputzTestStep.test_complex_input  s     	b2$r1   N)r   r   r   r   rg  r   r1   r/   rb  rb    s    %r1   rb  c                       e Zd Zd Zy)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        y )Nr]   r_   rU   )
r   r   
isinstancer   r   dtr!   rV   r   r   r;   ss     r/   test_lti_instantiationzTestLti.test_lti_instantiation  s   
 bTN
1./0
1c"#Jq$''( bhhtna0
1n-.
1c"#Jq$''( RD!bT1a 
1j)*
1c"#Jq$''(r1   N)r   r   r   ro  r   r1   r/   ri  ri    s    r1   ri  c                   $    e Zd Zd Zd Zd Zd Zy)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             y )Nr]   rK   rU   rG   r   )r   r!   rV   rf  s    r/   test_initializationz"TestStateSpace.test_initialization  sy    1aAA3aS1#&288aVaV,-rxx!qc
/C88aVH%rxx!	8r1   c                 l   t        dddd      }t        t        |j                         t                      t        t        |j	                         t
                     t        t        |j                         t                     t        t        |      |u       t        |j                         |u       y )Nr]   rK   rU   rG   )r   r   rk  to_ssto_tfr   to_zpkr   rm  s     r/   test_conversionzTestStateSpace.test_conversion%  sx    q!Q"
1779j12
1779&678
188:~67 	
1Q&'	"#r1   c                     t        dddd      }t        |j                  dg       t        |j                  dg       t	        |j
                  d u        y Nr]   r   )r   r   polesr   r   rl  rm  s     r/   test_propertieszTestStateSpace.test_properties0  sD    
 q!Q"QWWqc"QWWqc"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            }|j                  d      }|j                  d      }|j                  d      }t        j                  ddd      }t        j
                  |      }d|d<   t        t        t        t        j                  t        j                  t        j                  fD ]  }	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         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        t        t              5  ||z   d d d        t        t              5  ||z   d d d        t        t              5  | |       z   d d d        t        t              5   |       |z   d d d        t        t              5  | |       z   d d d        t        t              5   |       |z   d d d        t        t        |dz   ||      d   d|z  t        |||      d   z          t        t              5  |t        j                  ddg      z    d d d        t        t              5  t        j                  ddg      |z    d d d        t        t              5  ||z    d d d        t        t              5  |t        j                  ddgddgg      z   d d d        t        t              5  ||z    d d d        t        t              5  | |       z    d d d        t        t              5   |       |z    d d d        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        t        t              5   |       |z
   d d d        ||z   }
t!        |
j"                  dk(         ||z  }
t!        |
j"                  dk(         d|z  }
t!        |
j"                  dk(         | }
t!        |
j"                  dk(         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   axY w# 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   \xY w# 1 sw Y   bxY w# 1 sw Y   MxY w)Nc                       e Zd Zy).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r1   r/   BadTyper  =  s    r1   r  rN   gffffff?r   gr]   r   rM   gg?r*  g?d   rK   )r  r  gh㈵>)r+   rU   rG   rt   )r   r!   rV   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              r/   test_operatorszTestStateSpace.test_operators:  s   	 	 4+T{!;<1#s,1a&*1# 4,d!<=1#s,1a&*1# ^^C(
nnS)nnS) KK1c"MM!! R]]BHHM 	CDQ"Q7:FT"Q%7%::< Dc!fQ7: qA.q1CF:< Dc!fQ7: qA.q1CF:< y) A 	 	R!VqA.q1R1q5A.q1	3 	R"WQ/2R4a1#5a#8A>qA!	# 9% 	G	 9% 	O	 9% 	%$	% 9% 	N	 9% 	IN	 9% 	N	 9% 	IN	 	R!VqA.q1AR1 21 55	7 :& 	"1a&!!	" :& 	"HHaVr!	" 9% 	O	 :& 	,Aq6Aq6*++	, 9% 	%$	% 9% 	N	 9% 	IN	 	R"WQ/2R1*1-R10B10EE	G 	R!VqA.q1QbA!3A!66	8 	QVqA.q1AbSA 3A 66	8 	R"WQ/2R1*1-R10B10EE	G 9% 	N	 9% 	IN	 $$
NKq 	 		 		% 	%	 		 		 		 		" 	"	" 	"	 		, 	,	% 	%	 		 	 	 		 	s   ZZ5Z)Z6/[[3[[**[7\\+\!\+>\8 ]']	]Z	Z&)Z36[ [[['*[47\\\\(+\58]]]])N)r   r   r   rs  rx  r|  r  r   r1   r/   rq  rq    s    8	$~r1   rq  c                       e Zd Zd Zd Zd Zy)TestTransferFunctionc                     t        dd       t        dgdg       t        t        j                  dg      t        j                  dg             y Nr]   rK   )r   r!   rV   rf  s    r/   rs  z(TestTransferFunction.test_initialization  s8    A!qc"1#!6r1   c                 p   t        ddgddg      }t        t        |j                         t                     t        t        |j                         t                      t        t        |j                         t                     t        t        |      |u       t        |j                         |u       y Nr]   r   r_   )r   r   rk  ru  r   rv  rw  r   rm  s     r/   rx  z$TestTransferFunction.test_conversion  s~    aVaW-
1779j12
1779&678
188:~67 	 #1,-	"#r1   c                     t        ddgddg      }t        |j                  dg       t        |j                  dg       y r  )r   r   r{  r   rm  s     r/   r|  z$TestTransferFunction.test_properties  s8    
 aVaW-QWWqc"QWWqc"r1   N)r   r   r   rs  rx  r|  r   r1   r/   r  r    s    7	$#r1   r  c                       e Zd Zd Zd Zy)TestZerosPolesGainc                     t        ddd       t        dgdgd       t        t        j                  dg      t        j                  dg      d       y r  )r   r!   rV   rf  s    r/   rs  z&TestZerosPolesGain.test_initialization  s>    q!QsQC#rxx}bhhsmQ7r1   c                 j   t        ddd      }t        t        |j                         t                     t        t        |j                         t                     t        t        |j                         t                      t        t        |      |u       t        |j                         |u       y )Nr]   rK   rU   )r   r   rk  ru  r   rv  r   rw  rm  s     r/   rx  z"TestZerosPolesGain.test_conversion  sw    1a#
1779j12
1779&678
188:~67 	q!*+
!#$r1   N)r   r   r   rs  rx  r   r1   r/   r  r    s    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y)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      | _        y )Nr   r   r   r   r   r         @)r!   rV   r<   r=   r   r   rf  s    r/   setup_methodz Test_abcd_normalize.setup_method  sa    C:Sz23D6C5/*C:,'C5'"r1   c                 ,    t        t        t               y r   )r   r&   r   rf  s    r/   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.1r1   c                 t    t        t        t        ddg| j                  | j                  | j
                         y )Nr]   r_   )r   r&   r   r=   r   r   rf  s    r/   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s'    j.1b'ffdffdff	.r1   c                 t    t        t        t        | j                  ddg| j                  | j
                         y Nr_   rh   r   r&   r   r<   r   r   rf  s    r/   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  '    j.$&&2q'ffdff	&r1   c                 x    t        t        t        | j                  | j                  dgdgg| j
                         y )Nr   r   )r   r&   r   r<   r=   r   rf  s    r/   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s+    j.$&&$&&usendff	.r1   c           	      t    t        t        t        | j                  | j                  | j
                  ddg       y )Nr  r   )r   r&   r   r<   r=   r   rf  s    r/   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s'    j.$&&$&&ffsAh	(r1   c                 t    t        t        t        | j                  ddg| j                  | j
                         y r  r  rf  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                         y r   )r   r<   r=   r   r   r   r;   r<   r=   r   r   s        r/   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  sb    #DFFDFFDFFDFF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          y rz  )r   r<   r=   r   r    r  s        r/   r   zTest_abcd_normalize.test_shapes  s    #DFFDFFQFA>
1aQWWQZ,QWWQZ,QWWQZ,QWWQZ,QWWQZ,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          y )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    XXfXXf#dffb9
1aQQQQWWQZ!-QWWQZa1r1   c                    t        j                  d      }t        j                  d      }t        | j                  ||      \  }}}}t	        || j                         t	        ||       t	        ||       t	        |j
                  d   |j
                  d          t	        |j
                  d   |j
                  d          y )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    XXfXXf#dffb9
1aQQQQWWQZ!-QWWQZ!-r1   c                    t        | j                  | j                  | j                        \  }}}}t	        |j
                  d   |j
                  d          t	        |j
                  d   |j
                  d          t	        |j
                  | j                  j
                  d   | j                  j
                  d   f       y )N)r=   r   r   r   r]   )r   r=   r   r   r   r    r  s        r/   test_missing_Az"Test_abcd_normalize.test_missing_A*      #dff$&&A
1aQWWQZ,QWWQZ,QWWtvv||AQ@Ar1   c                    t        | j                  | j                  | j                        \  }}}}t	        |j
                  d   |j
                  d          t	        |j
                  d   |j
                  d          t	        |j
                  | j                  j
                  d   | j                  j
                  d   f       y )N)r<   r   r   r   r]   )r   r<   r   r   r   r    r  s        r/   test_missing_Bz"Test_abcd_normalize.test_missing_B0  r  r1   c                    t        | j                  | j                  | j                        \  }}}}t	        |j
                  d   |j
                  d          t	        |j
                  d   |j
                  d          t	        |j
                  | j                  j
                  d   | j                  j
                  d   f       y )Nr  r   r]   )r   r<   r=   r   r   r    r  s        r/   test_missing_Cz"Test_abcd_normalize.test_missing_C6  r  r1   c                    t        | j                  | j                  | j                        \  }}}}t	        |j
                  d   |j
                  d          t	        |j
                  d   |j
                  d          t	        |j
                  | j                  j
                  d   | j                  j
                  d   f       y )Nr  r   r]   )r   r<   r=   r   r   r    r  s        r/   test_missing_Dz"Test_abcd_normalize.test_missing_D<  r  r1   c                 L   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       y )N)r   r   r   r]   )r   r   r   r   r    r  s        r/   test_missing_ABz#Test_abcd_normalize.test_missing_ABB  s    #dff7
1aQWWQZ,QWWQZ,QWWQZ,QWWtvv||AQ@AQWWtvv||AQ@Ar1   c                    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       y )N)r=   r   r   r]   )r   r=   r   r   r    r  s        r/   test_missing_ACz#Test_abcd_normalize.test_missing_ACJ      #dff7
1aQWWQZ,QWWQZ,QWWQZ,QWWQZ,QWWtvv||AQ@AQWWtvv||AQ@Ar1   c                    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       y )N)r=   r   r   r]   )r   r=   r   r   r    r  s        r/   test_missing_ADz#Test_abcd_normalize.test_missing_ADS  r  r1   c                    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       y )N)r<   r   r   r]   )r   r<   r   r   r    r  s        r/   test_missing_BCz#Test_abcd_normalize.test_missing_BC\  r  r1   c                 D    t        t        t        | j                         y )N)r   )r   r&   r   r   rf  s    r/   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_failse  s    j.DFF;r1   c                 Z    t        t        t        | j                  | j                         y )N)r<   r   )r   r&   r   r<   r   rf  s    r/   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_failsh      j.DFFdffEr1   c                 Z    t        t        t        | j                  | j                         y )N)r<   r=   )r   r&   r   r<   r=   rf  s    r/   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_failsk  r  r1   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   r1   r/   r  r    sz    #2.&.(& -2.BBBBBBBB<FFr1   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)	Test_bodec                 p    t        dgddg      }g d}t        ||      \  }}}g d}t        ||d       y )Nr]   r*  r]   rd   r  r   )r   r^   rj   rp   r   r   r   r   )r;   r   r   magphaseexpected_mags         r/   test_01zTest_bode.test_01q  s>     aS1a&!Vq)3(Cq9r1   c                 p    t        dgddg      }g d}t        ||      \  }}}g d}t        ||d       y )Nr]   r*  r]   rd   r  )gig33333Ur   r  )r;   r   r   r  r  expected_phases         r/   test_02zTest_bode.test_02  s>     aS1a&!Vq)3+E>1=r1   c                 2   t        dgddg      }g d}t        ||      \  }}}|dz  }t        j                  |j                  |      t        j                  |j
                  |      z  }dt        j                  t        |            z  }t        ||       y )Nr]   r  r                ?g      4@)	r   r   r!   polyvalr   r   log10absr   )r;   r   r   r  r  jwr   r  s           r/   test_03zTest_bode.test_03  s     aS1a&!Vq)3VJJvzz2&FJJ)CCbhhs1v..C.r1   c                 l   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        ||       y )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/   test_04zTest_bode.test_04  s     aS1a&!Vq)3VJJvzz2&FJJ)CCAFFAFF3e;beeCE>2r1   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}}t	        ||       y Nr]   rd   rt   r8  )r   r!   logspacer   r   )r;   r   r8  
expected_wr   r  r  s          r/   test_05zTest_bode.test_05  sI     aS1a&![[Q*
Vq)3Az*r1   c                 b    t        dgddg      }t        |d      \  }}}t        |d   d       y Nr]   r   rK   r  r(  )r   r   r   r;   r   r   r  r  s        r/   test_06zTest_bode.test_06  s6     aS1a&!Vq)3QqT4 r1   c                 D    t        dgg d      }t        |d      \  }}}y )Nr]   )r]   r   r  rK   r  )r   r   r  s        r/   test_07zTest_bode.test_07  s$     aS+&Vq)3r1   c                     t        g g dd      }|j                  t        j                  ddd            \  }}}t	        t        |      dd	       y )
N)rc   rk   rp   rq   rr   r]   r^   rl   r  r  i>   r   )r   r   r!   r  r   minr  s        r/   test_08zTest_bode.test_08  sD    R2A6bkk"b#&>?3CJb9r1   c           	      *   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 }|j                  t               t        ||||      }t        |d      \  }}	}
d d d        dt        j                  t        j                  dddz  z   z              z  }t        	|       y # 1 sw Y   JxY w)	Nr   r   r   r   r   r   r   r   r   r  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  s     HH)*Q!!HHsecUSE*+HHo&'HHseW  	0CJJ'Aq!_F 3/MAsE	0
  "((2773#1*3E+F"GGC!34	0 	0s   5D		DN)r   r   r   r  r  r  r  r  r  r  r  r  r   r1   r/   r  r  o  s/    :
>	/	3+!*:5r1   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_freqrespc                     t        dgddg      }g d}t        ||      \  }}g d}g d}t        |j                  |d       t        |j                  |d       y )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  sU     aS1a&!!$1),AFFK;AFFK;r1   c                 V   t        dgddg      }g d}t        ||      \  }}|dz  }t        j                  |j                  |      t        j                  |j
                  |      z  }t        |j                  |j                         t        |j                  |j                         y )Nr]   r  r  r  )	r   r   r!   r  r   r   r   r#   r$   r;   r   r   r  rn  rA   s         r/   test_outputzTest_freqresp.test_output  s     aS1a&!!$1F::fjj!,rzz&**a/HHAFFHMM2AFFHMM2r1   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}t	        ||       y r  )r   r!   r  r   r   )r;   r   r8  r  r   r  s         r/   test_freq_rangezTest_freqresp.test_freq_range  sG     aS1a&![[Q*
!$1Az*r1   c                 `    t        dgddg      }t        |d      \  }}t        |d   d       y r  )r   r   r   )r;   r   r   r  s       r/   test_pole_zerozTest_freqresp.test_pole_zero  s4     aS1a&!!$1QqT4 r1   c                 f   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 }|j                  t               t        ||||      }t        |d      \  }}	d d d        dz  }
ddd|
z  z   d|
dz  z  z   |
d	z  z   z  }t        	j                  |j                         t        |	j                  |j                         y # 1 sw Y   ixY w)
Nr  r   r   r  r  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  rn  rA   s               r/   r  z#Test_freqresp.test_from_state_space  s    HH)*Q!!HHseSE3%()HHo&'HHseW  	+CJJ'Aq!_FFc*DAq	+ F319qAv-145AFFHMM2AFFHMM2	+ 	+s   4D''D0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                         y )Nr_   rG   r]   r  r  r  r  r  s         r/   test_from_zpkzTest_freqresp.test_from_zpk  sk    RQs#!$1FAz>AFFHMM2AFFHMM2r1   N)	r   r   r   r  r  r  r  r  r  r   r1   r/   r	  r	    s     <	3+!3*3r1   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.linalgr5   r0   r3   r   r   r  r  r0  rJ  rO  rR  r]  rb  ri  rq  r  r  r  r  r	  r   r1   r/   <module>r"     s-     7 7 * H H H H H 8 N*V@ V@r[P [P|n1 n1b;~ ;."0 "0JF/ F/R-$ -(# (@. @.F+ +$~  8[ [z# #8% %&CF CFLa5 a5HI3 I3r1   