
    bi                         d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d"dZ  G d d	      Z! G d
 d      Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z) ee       G d d             Z* G d d      Z+ G d d      Z,ejZ                  j]                  d eeeeeg      d!        Z/y)#    N)GenericAlias)raises)assert_almost_equalxp_assert_equalxp_assert_closemake_xp_test_case)ss2tftf2ss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          Y/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer+      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_matrixr+   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
r,   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?rA   grh|?gE    )r   K@V-?rD   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rF   rF      rP   )r   arrayreshaper>   errstate)r6   r7   r8   r9   s       r*   	test_realzTestPlacePoles.test_real6   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      )                          ?rN   )dividerO   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirF   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rd   rd   )rd   r_   r_   )r^   (   2   <   F   y      4      y      4      @y      @      @y      @      )
r^   re   rf   iiiirZ   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rV   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   rc   r   r   r   r   	   )
r   r   r   r   rX   r   r   rX   rF   rP   rF   )y            ?y                        ?            )ro   rY   rp   rq   )	r   rQ   rS   r>   rR   oneseyediagr   )r6   r7   r8   r9   big_Abig_Bs         r*   test_complexzTestPlacePoles.test_complexL   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                  |j
                        sJ t        j                  |j                        sJ t        j                  d      }| j                  |||      }t        j                  |j
                        sJ t        j                  |j                        sJ |d d df   j                  dd      }t        j                  d      }| j                  |||      }|j
                  dk(  sJ |j                  dk(  sJ y )Nr@   rB   )r   rC   rD   rD   r   r   rE   r   rX   rF   rP   rB   rc   rb   rV      rG   )r\   r[   rY   ro   r   rX   )r   rQ   rR   r>   isnanr%   nb_iter)r6   r7   r8   r9   r;   s        r*   test_tricky_BzTestPlacePoles.test_tricky_B   sG    HH % &&-gam 	
 HH " ##*71a= 	

 HH34kk!Q" xx!!!xx$$$ HH()kk!Q"xx!!!xx$$$ acFNN1QHH()kk!Q" xx1}}{{ar,   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        |      dk(  sJ t        |d   j                  t              sJ dt        |d   j                         v sJ |j"                  dk(  sJ 	 d d d        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   rV   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   rB   )r   r   r   r   rX   r   r   rX   rF   ) 皙ffffff333333foorK   rX   )r   r   r   r   rY   )r   r   r   *   r%   ir`   )ro   ro   ro   ro   )rB   rB   )rB   rF   rX   rF   rP   rB   T)recordalways)rZ   ro   rY   rr   gؗҜ<)r%   ra   rZ   z4Convergence was not reached after maxiter iterations)r\   r[                @ro   rP   )ro   rY   rr   )r\   r[   r   y             rJ   )r   rQ   rR   assert_raisesr!   r   newaxisrs   warningscatch_warningssimplefilterlen
issubclasscategoryUserWarningr"   messager|   )r6   r7   r8   wr;   s        r*   test_errorszTestPlacePoles.test_errors   s^   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q6Q;;aennk:::J1R5==)* + *;;"$$$	% 	j+q!5KL 	j+q2A2w=I 	j+q!BQBqD'=I 	j+q!/	@'	% 	%s   
BKKN)__name__
__module____qualname__r>   rT   rx   r}   r    r,   r*   r.   r.   (   s     
),N!`  D@@r,   r.   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r6   pqrs       r*   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sK    bhh1vhh1vhh1vhh1v	#r,   c                 @    dD ]  \  }}}| j                  |||        y )N))rP   rP   rP   )rX   rP   rP   rX   rX   rX   )r   r   s       r*   test_shapeszTestSS2TF.test_shapes	  s+     9 	.GAq!$$Q1-	.r,   c                 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          rY   rX   r   vIh%<=r   r   rF   +=)r   rQ   r
   r   r	   )	r6   bar7   r8   CDbbaas	            r*   
test_basiczTestSS2TF.test_basic  s    HH_%HH_%1a[
1aS"I1v.U;RD1#;U3RG951RD6.q!Q"B1qu-AE*r,   c                 "   d}t        | \  }}}}t        |dggd       t        |dggd       t        |dggd       t        |dggd       t        ||||      \  }}t        |ddggd       t        |ddgd       dgd	ggd
f}t        | \  }}}}t        |dggd       t        |dggd       t        |dgdggd       t        |dgd	ggd       t        ||||      \  }}t        |ddgd	dggd       t        |ddgd       y )N)rF   rX           r   r   r   r   r   rc   rF   rX   r   )r
   r   r	   r6   tfr7   r8   r   r   numdens           r*   test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trip  s5   BZ
1aRD6.RD6.RD6.RD6.Aq!$Sr1gYU3b!W51sQCj!_BZ
1aRD6.RD6.RD1#;U3RD1#;U3Aq!$Sr1g1v.U;b!W51r,   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 )%NrX   rF   r   r   r   r   r         r   )rX   r   rX   r   )r   r   r   )r   r   r   )rX   rF   rP   r   )r   rY   rr   )rX   r   r   r   rX   r   r   )r   rF   rP   )r   rX   rF   rP   )r   rX   rF   rP   )r   rF   rP   rB   rP   )dtyperb   g      ghe99irY   )rX   rb   rc   r   rr   ro   )r   rX   rY   )r   rb   rc   )r
   r   r	   r   rQ   objectr   s           r*   test_simo_round_tripzTestSS2TF.test_simo_round_trip6  sq   1v1vA'BZ
1aSE7/RD6.RD3%=u5RD2$<e4Aq!$Sr2hR1>b"XE2)$i0BZ
1aS#JR1>RD2$<e4S"IBx0u=RD2$<e4Aq!$SlL9F\6)$l3BZ
1aM9i@uMRD1#s+%8J	2?RD1#;U3Aq!$Sm\:G]7hhAq6{&1Aq6:BZ
1aSE7/RD6.RD2$<e4RD1#;U3Aq!$Sr1g1v.U;b!W51hhB+6:IFBZ
1aS"I1v.U;RD1#;U3RHr2h/e<RD1#;U3Aq!$Sk95EBZe4r,   c                     g dg dg dg}dgdgdgg}g dg}dgg}t        ||||      \  }}t        |g dgdd	
       t        |g dd       y )Nr   )r   r   rX   )rY   rr   ro   r   rX   )rc   rX   r   )r   r   r   r   r   r   r%   r&   )r   r         @r   r   )r	   r   )r6   r7   r8   r   r   r   r   s          r*   test_all_int_arrayszTestSS2TF.test_all_int_arrayso  sb    	<0S1#sOKSEAq!$S23%eL1>r,   c                 <   t        j                  g dg dg dg dg      }t        j                  dgdgdgdgg      }t        j                  g dg d	g d
g      }t        j                  dgdgdgg      }t        ||||      \  }}t        |||d   |d         \  }}t        |||d   |d         \  }	}
t        |||d   |d         \  }}t        ||d       t        |
|d       t        ||d       t        |t        j                  ||	|f      dd       y )N)r   r   r   r   )r   r   r   r   )g      r   r   r   )g              @r   r   333333?r   g      @)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   rX   rF   r   r   r   r   )r   rQ   r	   r   vstack)r6   r7   r8   r   r   b_allr   b0a0b1a1b2a2s                r*   test_multioutputzTestSS2TF.test_multioutputx  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Or,   N)
r   r   r   r   r   r   r   r   r   r   r   r,   r*   r   r     s'    #.+2075r?$Pr,   r   c                   L    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y)TestLsimrV   c                     t        j                         5  t        j                  dt               t	        | }d d d        |S # 1 sw Y   S xY w)NrN   )r   r   r   r   r   )r6   argssystems      r*   
lti_nowarnzTestLsim.lti_nowarn  sE    $$& 	 !!(O<$ZF	  	  s   #AAc                    | j                  dddd      }t        j                  dd      }t        j                  |      }t	        |||dg      \  }}}t        j
                  |       }t        ||       t        ||       y Nr   r   r   r   rc   X0r   r   linspace
zeros_liker   expr   r6   r   tutoutyx
expected_xs           r*   test_first_orderzTestLsim.test_first_order  sq     R2.KK!MM!&!QC51
aVVTE]
Az*Az*r,   c                    t        j                  ddd      }t        j                  |      }| j                  dgg d      }t	        |||ddg      \  }}}d|z
  t        j
                  |       z  }t        |d d df   |       y )Nr   r_   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r6   r   r   r   r   r   r   r   s           r*   test_second_orderzTestLsim.test_second_order  sz    KK2t$MM! #8&!QC:6
aDjBFFD5M1
AadGZ0r,   c                     | j                  dddd      }t        j                  dd      }|}t        |||      \  }}}d|dz  z  }t	        ||| j
                         t	        ||| j
                         y )Nr   r   r   rc         ?rF   decimal)r   r   r   r   r   digits_accuracyr   s           r*   test_integratorzTestLsim.test_integrator  sp    RR0KK!&!Q'
a47]
Az43G3GHAz43G3GHr,   c                 t   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      }t        |||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   rX   rF   r   g      $@   rF   )UTr   rX   	r   rQ   r   r   r   r   r   r   r   r6   r7   r8   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r*   test_two_stateszTestLsim.test_two_states  s   HHtSkC;/0HHsCj3*-.HHc3Z HHVAq!,KK4$HHc!fa[!&ASz:
aVVTE]
ffdUmffTD[)Az*AadG[1AadG[1r,   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                  |      }t        |||      \  }}}	t        j                  t        j                  d|dz  z  |g            }
|dz  }t        |	|
| j                         t        ||| j                         y )	Nr   r   r   r   rc   r   rF   r   )	r   rQ   r   r   	ones_liker   	transposer   r   )r6   r7   r8   r   r   r   r   r   r   r   r   r   s               r*   test_double_integratorzTestLsim.test_double_integrator  s    HHr2hR)*HHrdRD\"HHr2hZ Aq"-KK!LLO&!Q'
a\\"((C$'M4+@"AB
1W
Az43G3GHAz43G3GHr,   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                  |      }t        |||ddg      \  }}}	|t        j                  |       z  }
t        ||
       y r   )r   rQ   r   r   r   r   r   r   )r6   r7   r8   r   r   r   r   r   r   r   r   s              r*   test_jordan_blockzTestLsim.test_jordan_block  s     HHsBi"c+,HHrdRD\"HHr2hZ Aq"-KK!MM!&!QC:6
aBFFD5M)
Az*r,   c                 t   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      }t        |||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   rF   r   rX   r   r   s                 r*   	test_misozTestLsim.test_miso  s   HHtSkC;/0HHsCj3*-.HHc3Z HHUOAq!,KK3$HHc!fa[!&!QC:6
aVVTE]
ffdUmffT$Y'Az*AacFK0AacFK0r,   c                     | j                  dddd      }t        j                  dd      }t        j                  |      }t	        |||dg      \  }}}t        j
                  |       }t        ||       y )Nr   r   r   rX   rF   r   r   )r6   r   r   r   r   r   r   r   s           r*   test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time  se    R2.KK!MM!&!QC51
aVVTE]
Az*r,   c                     t        j                  g d      }t        j                  g d      }dgddgf}t        t        d      5  t	        |||dg      \  }}}d d d        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   rQ   r   r!   r   )r6   r   r   r   r   r   r   s          r*   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  sk    HH)*HH)*%#s$:!EG 	6fau5JD!Q	6 	6 	6s   A%%A.N)r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r   r,   r*   r   r     s;    O	+	1I2&I+ 1$+6r,   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestImpulsec                 r    dgddgf}t        |      \  }}t        j                  |       }t        ||       y Nr   r   r   r   r   r6   r   r   r   r   s        r*   r   zTestImpulse.test_first_order  s:     %#c#&/aVVTE]
Az*r,   c                     dgddgf}d}t        j                  dd|      }t        ||      \  }}|j                  |fk(  sJ t	        ||       t        j
                  |       }t	        ||       y )Nr   r   r   r   r   )r   r   r   r   r   r   r6   r   nr   r   r   r   s          r*   test_first_order_fixed_timez'TestImpulse.test_first_order_fixed_time&  sr    
 %#c#KK3"&A&azzaT!!!D!$VVQBZ
Az*r,   c                 |    dgddgf}t        |d      \  }}dt        j                  |       z  }t        ||       y Nr   r   r   r   r  r  s        r*   test_first_order_initialz$TestImpulse.test_first_order_initial4  sB    
 %#c#&S)a2664%=(
Az*r,   c                 ~    dgddgf}t        |dg      \  }}dt        j                  |       z  }t        ||       y r  r  r  s        r*   test_first_order_initial_listz)TestImpulse.test_first_order_initial_list>  sD    
 %#c#&cU+a2664%=(
Az*r,   c                 p    dgddgf}t        |      \  }}t        j                  |      }t        ||       y Nr   r   )r   r   r   r   r  s        r*   r   zTestImpulse.test_integratorH  s7    %#c#&/a\\$'
Az*r,   c                 x    dgg df}t        |      \  }}|t        j                  |       z  }t        ||       y )Nr   r   r  r  s        r*   r   zTestImpulse.test_second_orderO  s;     %)&/aBFFD5M)
Az*r,   c                 `    dgg df}t        |dgddg      \  }}t        |dgdg      \  }}y )Nr   r   rP   rc   rb   r   r   r   r6   r   r   r   s       r*   test_array_likezTestImpulse.test_array_likeX  s<    %)&aSQF3a&aSQC0ar,   c                 4    dgg df}t        |dd      \  }}y )Nr   r   rP   rc   r  r   r!  s       r*   test_array_like2zTestImpulse.test_array_like2_  s     %)&Q!,ar,   N)r   r   r   r   r  r  r  r   r   r"  r$  r   r,   r*   r  r    s*    ++++++1-r,   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestStepc                 x    dgddgf}t        |      \  }}dt        j                  |       z
  }t        ||       y r  r   r   r   r   r  s        r*   r   zTestStep.test_first_ordere  s?     %#c#v,a2664%=(
Az*r,   c                     dgddgf}d}t        j                  dd|      }t        ||      \  }}|j                  |fk(  sJ t	        ||       dt        j
                  |       z
  }t	        ||       y )Nr   r   r   r   r  rX   )r   r   r   r   r   r   r  s          r*   r  z$TestStep.test_first_order_fixed_timem  sv    
 %#c#KK3"v#azzaT!!!D!$^
Az*r,   c                     dgddgf}t        |d      \  }}ddt        j                  |       z  z   }t        ||       y Nr   r   r   rX   r   r(  r  s        r*   r  z!TestStep.test_first_order_initial{  sG    
 %#c#v#&aRVVTE]**
Az*r,   c                     dgddgf}t        |dg      \  }}ddt        j                  |       z  z   }t        ||       y r+  r(  r  s        r*   r  z&TestStep.test_first_order_initial_list  sI    
 %#c#v3%(aRVVTE]**
Az*r,   c                 J    dgddgf}t        |      \  }}|}t        ||       y r  )r   r   r  s        r*   r   zTestStep.test_integrator  s0     %S	"v,a
Az*r,   c                     dgg df}t        |      \  }}dd|z   t        j                  |       z  z
  }t        ||       y )Nr   r   rX   r(  r  s        r*   r   zTestStep.test_second_order  sD     %)v,a!d(bffdUm33
Az*r,   c                 6    dgg df}t        |ddg      \  }}y )Nr   r   rc   rb   r  r   r!  s       r*   r"  zTestStep.test_array_like  s"    %)v!Q(ar,   c                 "    t        g dgdf       y )NrZ   y      ?        r0  r6   s    r*   test_complex_inputzTestStep.test_complex_input  s     	b2$r,   N)r   r   r   r   r  r  r  r   r   r"  r3  r   r,   r*   r&  r&  d  s*    ++++++)r,   r&  c                       e Zd Zd Zy)TestLtic                 \   t        dgdg      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J t        t        j                  g       t        j                  dg      d      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J t        g dgd      }t        dgdgdd      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J y )NrX   rZ   rP   )	r   
isinstancer   r   dtr   rQ   r   r   r6   ss     r*   test_lti_instantiationzTestLti.test_lti_instantiation  s   
 bTN!-...!S!!!a&&&tt|| bhhtna0!^,,,!S!!!a&&&tt|| RD!bT1a !Z(((!S!!!a&&&tt||r,   N)r   r   r   r;  r   r,   r*   r5  r5    s    r,   r5  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 )NrX   rF   rP   rB   r   )r   r   rQ   r2  s    r*   test_initializationz"TestStateSpace.test_initialization  sy    1aAA3aS1#&288aVaV,-rxx!qc
/C88aVH%rxx!	8r,   c                 &   t        dddd      }t        |j                         t               sJ t        |j                         t              sJ t        |j                         t              sJ t        |      |usJ |j                         |usJ y )NrX   rF   rP   rB   )r   r7  to_ssto_tfr   to_zpkr   r9  s     r*   test_conversionzTestStateSpace.test_conversion  s}    q!Q"!'')Z000!'')%5666!((*n555 !}A%%%wwy!!!r,   c                     t        dddd      }t        |j                  dg       t        |j                  dg       |j                  J y )NrX   r   r   )r   r   polesr   r8  r9  s     r*   test_propertieszTestStateSpace.test_properties  sB    
 q!Q""&"&tt||r,   c                     G d d      }t        t        j                  ddgddgg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg            }t        t        j                  d	d
gdd
gg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg            }|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   }
|
j                   dk(  sJ ||z  }
|
j                   dk(  sJ d|z  }
|
j                   dk(  sJ | }
|
j                   dk(  sJ 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   oxY w# 1 sw Y   ZxY w# 1 sw Y   ExY w# 1 sw Y   0x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   zxY w# 1 sw Y   jxY w# 1 sw Y   UxY w# 1 sw Y   @xY w# 1 sw Y   FxY w# 1 sw Y   1xY w)Nc                       e Zd Zy).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r,   r*   BadTyperJ    s    r,   rK  rI   gffffff?r   grX   r   rH   gg?皙?g?d   rF   )r   r   gh㈵>)r&   rP   rB   ro   )r   r   rQ   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr!   r8  )r6   rK  s1s2
s_discretes2_discretes3_discreter   r   typr:  s              r*   test_operatorszTestStateSpace.test_operators  s   	 	 4+T{!;<1#s,1a&*1# 4,d!<=1#s,1a&*1# ^^C(
nnS)nnS) 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	 $tts{{$tts{{
Ntts{{Ktts{{q 	 		 		% 	%	 		 		 		 		" 	"	" 	"	 		, 	,	% 	%	 		 	 	 		 	s   Y3Z 5ZZ/Z'Z43[[*[[([5+\!\>\ \)'\6	]3Y=	 Z
ZZ$'Z14Z>[[[%([25[?\\\&)\36] ]N)r   r   r   r?  rD  rG  r[  r   r,   r*   r=  r=    s    8	"~r,   r=  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 NrX   rF   )r   r   rQ   r2  s    r*   r?  z(TestTransferFunction.test_initializationg  s8    A!qc"1#!6r,   c                 *   t        ddgddg      }t        |j                         t              sJ t        |j	                         t               sJ t        |j                         t              sJ t        |      |usJ |j	                         |usJ y )NrX   r   rZ   )r   r7  rA  r   rB  rC  r   r9  s     r*   rD  z$TestTransferFunction.test_conversionm  s    aVaW-!'')Z000!'')%5666!((*n555  "!+++wwy!!!r,   c                     t        ddgddg      }t        |j                  dg       t        |j                  dg       y )NrX   r   rZ   r   r   )r   r   rF  r   r9  s     r*   rG  z$TestTransferFunction.test_propertiesx  s8    
 aVaW-"&"&r,   N)r   r   r   r?  rD  rG  r   r,   r*   r]  r]  f  s    7	"'r,   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   rQ   r2  s    r*   r?  z&TestZerosPolesGain.test_initialization  s>    q!QsQC#rxx}bhhsmQ7r,   c                 $   t        ddd      }t        |j                         t              sJ t        |j	                         t
              sJ t        |j                         t               sJ t        |      |usJ |j                         |usJ y )NrX   rF   rP   )r   r7  rA  r   rB  r   rC  r9  s     r*   rD  z"TestZerosPolesGain.test_conversion  s|    1a#!'')Z000!'')%5666!((*n555 a )))xxz"""r,   N)r   r   r   r?  rD  r   r,   r*   rc  rc    s    8	#r,   rc  c                       e Zd ZddgddggZdgdggZddggZdgg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_normalizer   r   r   r   r   r         @c                 ,    t        t        t               y N)r   r!   r   r2  s    r*   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.1r,   c           
          t        t        t        |j                  ddg      |j                  | j                        |j                  | j
                        |j                  | j                               y )NrX   rZ   )r   r!   r   asarrayr8   r   r   r6   xps     r*   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  sL    j."**aW2Ejj("**TVV*<bjj>P	Rr,   c           
          t        t        t        |j                  | j                        |j                  ddg      |j                  | j
                        |j                  | j                               y NrZ   rc   r   r!   r   rm  r7   r   r   rn  s     r*   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  L    j."**TVV2Djj"a)2::dff+=rzz$&&?Q	Sr,   c           
          t        t        t        |j                  | j                        |j                  | j
                        |j                  dgdgg      |j                  | j                               y )Nr   r   )r   r!   r   rm  r7   r8   r   rn  s     r*   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  sP    j."**TVV2Djj("**secU^*Djj(	*r,   c                     t        t        t        |j                  | j                        |j                  | j
                        |j                  | j                        |j                  ddg             y )Nrh  r   )r   r!   r   rm  r7   r8   r   rn  s     r*   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  sL    j."**TVV2Djj("**TVV*<bjj#q>R	Tr,   c           
          t        t        t        |j                  | j                        |j                  ddg      |j                  | j
                        |j                  | j                               y rr  rs  rn  s     r*   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  ru  r,   c                    t        |j                  | j                  | j                  | j                  | j
                  f      \  }}}}t        ||||      \  }}}}	t        ||       t        ||       t        ||       t        |	|       y )N)r7   r8   r   r   )maprm  r7   r8   r   r   r   r   )
r6   ro  A_B_C_D_r7   r8   r   r   s
             r*   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  ss    RZZ$&&$&&$&&$&&)IJBB#bB";
1a2222r,   c                    t        |j                  | j                        |j                  | j                        |j                  ddg      |j                  d            \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ y )NrX   r   )r   rm  r7   r8   r   )r6   ro  r7   r8   r   r   s         r*   r   zTest_abcd_normalize.test_shapes  s    #BJJtvv$6

4668J$&JJ1v$6

1G
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''r,   c                 p   |j                  | j                        }|j                  d      }|j                  d      }t        |||      \  }}}}t	        ||       t	        ||       t	        ||       |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ y )NrF   r   )r   r   r7   r8   r   r   rX   rm  r7   r   r   r   r   	r6   ro  r~  r  r  r7   r8   r   r   s	            r*    test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1      ZZXXfXXf#bB"5
1a222wwqzRXXa[(((wwqzRXXa[(((r,   c                 p   |j                  | j                        }|j                  d      }|j                  d      }t        |||      \  }}}}t	        ||       t	        ||       t	        ||       |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ y )Nr  )r   rF   r7   r8   r   r   rX   r  	r6   ro  r~  r  r  r7   r8   r   r   s	            r*    test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2  r  r,   c                 ~   t        |j                  | j                  | j                  | j                  f      \  }}}t        |||      \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  |j                  d   |j                  d   fk(  sJ y )N)r8   r   r   r   rX   )r}  rm  r8   r   r   r   r   )	r6   ro  r  r  r  r7   r8   r   r   s	            r*   test_missing_Az"Test_abcd_normalize.test_missing_A      dffdffdff%=>
B#bB"5
1awwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444r,   c                 ~   t        |j                  | j                  | j                  | j                  f      \  }}}t        |||      \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  |j                  d   |j                  d   fk(  sJ y )N)r7   r   r   r   rX   )r}  rm  r7   r   r   r   r   )	r6   ro  r~  r  r  r7   r8   r   r   s	            r*   test_missing_Bz"Test_abcd_normalize.test_missing_B  r  r,   c                 ~   t        |j                  | j                  | j                  | j                  f      \  }}}t        |||      \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  |j                  d   |j                  d   fk(  sJ y )Nr  r   rX   )r}  rm  r7   r8   r   r   r   r  s	            r*   test_missing_Cz"Test_abcd_normalize.test_missing_C  r  r,   c                 ~   t        |j                  | j                  | j                  | j                  f      \  }}}t        |||      \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  |j                  d   |j                  d   fk(  sJ y )Nr  r   rX   )r}  rm  r7   r8   r   r   r   r  s	            r*   test_missing_Dz"Test_abcd_normalize.test_missing_D  r  r,   c                     t        |j                  | j                  | j                  f      \  }}t	        ||      \  }}}}|j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ y )N)r   r   r   rX   )r}  rm  r   r   r   r   )r6   ro  r  r  r7   r8   r   r   s           r*   test_missing_ABz#Test_abcd_normalize.test_missing_AB  s    RZZ$&&$&&!12B#bB/
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444ww288A;4444r,   c                 B   t        |j                  | j                  | j                  f      \  }}t	        ||      \  }}}}|j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ y )N)r8   r   r   rX   )r}  rm  r8   r   r   r   )r6   ro  r  r  r7   r8   r   r   s           r*   test_missing_ACz#Test_abcd_normalize.test_missing_AC       RZZ$&&$&&!12B#bB/
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww288A;4444ww288A;4444r,   c                 B   t        |j                  | j                  | j                  f      \  }}t	        ||      \  }}}}|j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ y )N)r8   r   r   rX   )r}  rm  r8   r   r   r   )r6   ro  r  r  r7   r8   r   r   s           r*   test_missing_ADz#Test_abcd_normalize.test_missing_AD
  r  r,   c                 B   t        |j                  | j                  | j                  f      \  }}t	        ||      \  }}}}|j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ |j
                  |j
                  d   |j
                  d   fk(  sJ y )N)r7   r   r   rX   )r}  rm  r7   r   r   r   )r6   ro  r~  r  r7   r8   r   r   s           r*   test_missing_BCz#Test_abcd_normalize.test_missing_BC  r  r,   c                 b    t        t        t        |j                  | j                               y )N)r   )r   r!   r   rm  r   rn  s     r*   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_fails  s    j.BJJtvv4FGr,   c                     t        t        t        |j                  | j                        |j                  | j
                               y )N)r7   r   )r   r!   r   rm  r7   r   rn  s     r*   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_fails!  -    j.BJJtvv4F

466*	,r,   c                     t        t        t        |j                  | j                        |j                  | j
                               y )N)r7   r8   )r   r!   r   rm  r7   r8   rn  s     r*   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_fails%  r  r,   N)r   r   r   r7   r8   r   r   rk  rp  rt  rw  ry  r{  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r,   r*   rg  rg    s    
sc3Z A
#A
sA
A2RS*
TS(	)	)55555555H,,r,   rg  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 )NrX   rL  rX   r_   rM  r   )r   rY   re   rk   r   r   r   r   )r6   r   r   magphaseexpected_mags         r*   test_01zTest_bode.test_01,  s>     aS1a&!Vq)3(Cq9r,   c                 p    t        dgddg      }g d}t        ||      \  }}}g d}t        ||d       y )NrX   rL  rX   r_   r  )gig33333Ur   r  )r6   r   r   r  r  expected_phases         r*   test_02zTest_bode.test_02:  s>     aS1a&!Vq)3+E>1=r,   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 )NrX   r  r                ?g      4@)	r   r   r   polyvalr   r   log10absr   )r6   r   r   r  r  jwr   r  s           r*   test_03zTest_bode.test_03F  s     aS1a&!Vq)3VJJvzz2&FJJ)CCbhhs1v..C.r,   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 )NrX   r  r  r  g     f@)r   r   r   r  r   r   arctan2r   r   pir   )r6   r   r   r  r  r  r   r  s           r*   test_04zTest_bode.test_04Q  s     aS1a&!Vq)3VJJvzz2&FJJ)CCAFFAFF3e;beeCE>2r,   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}}t	        ||       y NrX   r_   ro   r  )r   r   logspacer   r   )r6   r   r  
expected_wr   r  r  s          r*   test_05zTest_bode.test_05\  sI     aS1a&![[Q*
Vq)3Az*r,   c                 X    t        dgddg      }t        |d      \  }}}|d   dk(  sJ y NrX   r   rF   r  g{Gz?r   r   r6   r   r   r  r  s        r*   test_06zTest_bode.test_06f  s8     aS1a&!Vq)3tt||r,   c                 D    t        dgg d      }t        |d      \  }}}y )NrX   )rX   r   rM  rF   r  r  r  s        r*   test_07zTest_bode.test_07m  s$     aS+&Vq)3r,   c                     t        g g dd      }|j                  t        j                  ddd            \  }}}t	        t        |      dd	       y )
N)r^   rf   rk   rl   rm   rX   rY   rg   rM  r  i>   r   )r   r   r   r  r   minr  s        r*   test_08zTest_bode.test_08s  sD    R2A6bkk"b#&>?3CJb9r,   c           	      H   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        j                         5  t        j                  d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   rN   rM  r     rb   )r   rQ   r0   	companionr   r   r   r   r   r   r   r  sqrtr   )r6   r   r7   r8   r   r   r   r   r  r  expected_magnitudes              r*   test_from_state_spacezTest_bode.test_from_state_spacey  s     HH)*Q!!HHsecUSE*+HHo&'HHseW$$& 	0!!(O<Aq!_F 3/MAsE	0
  "((2773#1*3E+F"GGC!34	0 	0s   :DD!N)r   r   r   r  r  r  r  r  r  r  r  r  r   r,   r*   r  r  *  s/    :
>	/	3+*:5r,   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 )NrX   r  r  )gGz?r   gׁsF?)MbXrI   r  r   r   r   r   r   r   )r6   r   r   Hexpected_reexpected_ims         r*   test_output_manualz Test_freqresp.test_output_manual  sU     aS1a&!!$1),AFFK;AFFK;r,   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 )NrX   r  r  r  )	r   r   r   r  r   r   r   r   r   r6   r   r   r  r:  r<   s         r*   test_outputzTest_freqresp.test_output  s     aS1a&!!$1F::fjj!,rzz&**a/HHAFFHMM2AFFHMM2r,   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}t	        ||       y r  )r   r   r  r   r   )r6   r   r  r  r   r  s         r*   test_freq_rangezTest_freqresp.test_freq_range  sG     aS1a&![[Q*
!$1Az*r,   c                 V    t        dgddg      }t        |d      \  }}|d   dk(  sJ y r  )r   r   )r6   r   r   r  s       r*   test_pole_zerozTest_freqresp.test_pole_zero  s6     aS1a&!!$1tt||r,   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        j                         5  t        j                  d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  rN   rM  r  r  rF   rP   )r   rQ   r0   r  r   r   r   r   r   r   r   r   r   r   )r6   r   r7   r8   r   r   r   r   r  r:  r<   s              r*   r  z#Test_freqresp.test_from_state_space  s    HH)*Q!!HHseSE3%()HHo&'HHseW$$& 	+!!(O<Aq!_FFc*DAq	+ F319qAv-145AFFHMM2AFFHMM2	+ 	+s   9D66D?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 )NrZ   rB   rX   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2r,   N)	r   r   r   r  r  r  r  r  r  r   r,   r*   r  r    s     <	3+3*3r,   r  clsc                 J    t        | t        j                     t              sJ y rj  )r7  r   float64r   )r  s    r*    test_subscriptable_generic_typesr    s     c"**o|444r,   ):0yE>r  )0r   typesr   numpyr   pytestr   r   scipy._lib._array_apir   r   r   r   scipy.signalr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr0   r+   r.   r   r   r  r&  r5  r=  r]  rc  rg  r  r  markparametrizer  r   r,   r*   <module>r     s$       * H H H H 8 N*V@ V@r[P [P|{6 {6|D- D-NF FR 8[ [z' '8# #& >"Q, Q, #Q,ha5 a5HI3 I3V 	J(.#tD55r,   