
    Ug                        d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dZ G d d	          Z  G d
 d          Z! G d d          Z" G d d          Z# G d d          Z$ G d d          Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d d          Z* G d d          Z+dS )!    N)assert_almost_equalassert_equalassert_allcloseassert_suppress_warnings)raises)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients:0yE>c           
         |                                 }| D ]}d}t          |j        d                   D ]}t          j        t          j        |          t          j        |          gt          j        ||                   t          j        ||                   g||          rd}t          j        ||            n|s2t          dt          |          z   dz   t          |          z             dS )a  
    Check each pole in P1 is close to a pole in P2 with a 1e-8
    relative tolerance or 1e-8 absolute tolerance (useful for zero poles).
    These tolerances are very strict but the systems tested are known to
    accept these poles so we should not be far from what is requested.
    Fr   TzCan't find pole z in N)
copyrangeshapenpallcloserealimagdelete
ValueErrorstr)P1P2rtolatolp1foundp2_idxs          ]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer,      s    
B 
N 
NBHQK(( 	 	F{BGBKK5GBvJ//F1D1DE' '  	"f%%%  	N/#b''9FBSWWLMMM	N
N 
N    c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestPlacePolesc                    t          |||fi |}t          j                            |t          j        ||j                  z
            \  }}t          ||j                   t          ||j                   t          ||j                   |S )z
        Perform the most common tests on the poles computed by place_poles
        and return the Bunch object for further specific tests
        )	r   r   linalgeigdotgain_matrixr,   requested_polescomputed_poles)selfABPkwargsfsfexpected_s           r+   _checkzTestPlacePoles._check'   s    
 !Q,,V,,immAq#/(B(B$BCC!Hc&9:::Hc&8999Ac1222
r-   c                    t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }|                     |||d           |                     |||d           t          j        d	
          5  |                     ||d           d d d            d S # 1 swxY w Y   d S )NgGz?gʿg\(@gNbX9g<,Ԛg)\(r   g?gOn?d;O@gV-gOn@g~jt?rB   grh|?gE    )r   K@V-?rE   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rG   rG      rQ   )r   arrayreshaper?   errstate)r7   r8   r9   r:   s       r+   	test_realzTestPlacePoles.test_real3   s7    H % % % & &&-gamm 	
 H===>>FFq!LLH33344 	Aq!F+++Aq!D))) [*** 	) 	)KK1i(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   2CCCc                 
   t          j        g dg dg dg dg          }t          j        ddgddgddgddgg          }t          j        g d          }t          j        dd          5  |                     |||           d d d            n# 1 swxY w Y   g d	}t          j        dd          5  |                     |||d
           d d d            n# 1 swxY w Y   t          j        g d                              dd          }t          j        g d                              dd          }g d}|                     |||           t          j        d          t          j        d          z
  }t          j        d          t          j        dgdz  d          d d dd f         z
  }||d dd df<   ||d dd df<   g d}t          j        dd          5  |                     |||           d d d            n# 1 swxY w Y   g d}|                     |d dd df         |d dd df         |           g d}|                     |d dd df         |d dd df         |           t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }t          j        dd          5  t          |||           d d d            n# 1 swxY w Y   t          j        g d          }t          j        dd          5  |                     |||           d d d            d S # 1 swxY w Y   d S )N)r      r   r   )r   r   r   竪@)r   r   r   r   r      )                          ?rO   )dividerP   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirG   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   re   re   )re   r`   r`   )r_   (   2   <   F   y      4      y      4      @y      @      @y      @      )
r_   rf   rg   iiiir[   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rW   r   r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   rd   r   r   r   r   	   )
r   r   r   r   rY   r   r   rY   rG   rQ   rG   )y            ?y                        ?            )rp   rZ   rq   rr   )	r   rR   rT   r?   rS   oneseyediagr   )r7   r8   r9   r:   big_Abig_Bs         r+   test_complexzTestPlacePoles.test_complexI   sG    Hlll%oo"ll"ll$ % % Hq!f!f!f!f  
 H+++,, [(;;; 	! 	!KK1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! %$$[(;;; 	/ 	/KK1aK...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ HG G G 
 WQq\\ 	
 H( ( ( 
 wq|| 	
 KJJAq!
   +  !R!2!2111QRR4!88bqb!ebqb!e===[(;;; 	) 	)KKua(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 766E#2#crc'NE#2#crc'NA6666 6 6E#2#crc'NE#2#crc'NA666 H ) ) ) * **1'!A,, 	
H***++33Aa88H55566[(;;; 	! 	!1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!
 H///00[(;;; 	! 	!KK1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sZ   -BBB6CC #C )HHH>LL #L M88M<?M<c                 @   t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }|                     |||          }t	          |j        t           j                   t	          |j        t           j                   t          j        d          }|                     |||          }t	          |j        t           j                   t	          |j        t           j                   |d d df                             dd          }t          j        d          }|                     |||          }t	          |j        d           t	          |j        d           d S )NrA   rC   )r   rD   rE   rE   r   r   rF   r   rY   rG   rQ   rC   rd   rc   rW      rH   )r]   r\   rZ   rp   r   rY   )r   rR   rS   r?   r   r&   nannb_iter)r7   r8   r9   r:   r<   s        r+   test_tricky_BzTestPlacePoles.test_tricky_B   s~    H % % % & &&-gamm 	
 H " " " # ##*71a== 	

 H33344kk!Q"" 	SXrv&&&S["&))) H())kk!Q""SXrv&&&S["&))) aaacFNN1QH())kk!Q"" 	SXq!!!S[!$$$$$r-   c           
         t          j        g d                              dd          }t          j        g d                              dd          }t          t          t
          ||dd           t          t          t
          ||t          j        d                              dd                     t          t          t
          |d d d d t           j        f         |d           t          t          t
          ||d d d d t           j        f         d           t          t          t
          ||d	           t          t          t
          ||d
           t          t          t
          ||dd           t          t          t
          ||dd           t          t          t
          ||d           t          t          t
          t          j        d          t          j        d          d           t          j	        d          5 }t          j
        d           t          ||ddd          }t          t          |          dk               t          t          |d         j        t                               t          dt!          |d         j                  v            t%          |j        d           d d d            n# 1 swxY w Y   t          t          t
          ||d           t          t          t
          |d d d df         |d           t          t          t
          ||d dd d f         d           t          t          t
          ||dd           d S ) N)r   rW   r   r   r   r   r   rX   r   r   r   r   r   r   r   r   rC   )r   r   r   r   rY   r   r   rY   rG   ) 皙ffffff333333foorL   rY   )r   r   r   r   rZ   )r   r   r   *   r&   ira   )rp   rp   rp   rp   )rC   rC   )rC   rG   rY   rG   rQ   rC   T)recordalways)r[   rp   rZ   rs   gؗҜ<)r&   rb   r[   z4Convergence was not reached after maxiter iterations)r]   r\                @rp   rQ   )rp   rZ   rs   )r]   r\   r   y             rK   )r   rR   rS   assert_raisesr"   r   newaxisrt   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr#   messager   r}   )r7   r8   r9   wr<   s        r+   test_errorszTestPlacePoles.test_errors   s   H999::BB1QGGH&&&''//!44 	j+q!5J"	$ 	$ 	$ 	$ 	j+q!h455==aBB	D 	D 	D 	j+q111RZ/@!+	- 	- 	- 	j+q!AAAaaa
N2C+	- 	- 	- 	j+q!5MNNN 	j+q!5EFFF 	j+q!5J	 	 	 	 	j+q!5J!	# 	# 	# 	# 	j+q!]CCC 	j+rwu~~genni	1 	1 	1
 $D111 	*Q!(+++aMrJJJCCFFaK   Jqu~{;;<<<J1R5=))* + + +b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	j+q!5KLLL 	j+q2A2w=III 	j+q!BQBqqqD'=III 	j+q!/	@ 	@ 	@ 	@ 	@ 	@s   
B4K

KKN)__name__
__module____qualname__r?   rU   ry   r~   r    r-   r+   r/   r/   %   sn        
 
 
) ) ),N! N! N!` %  %  %D@@ @@ @@ @@ @@r-   r/   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )		TestSS2TFc           	          t          t          j        ||f          t          j        ||f          t          j        ||f          t          j        ||f          d           d S )Nr   )r	   r   zerosr7   pqrs       r+   check_matrix_shapeszTestSS2TF.check_matrix_shapes   sc    bh1vh1vh1vh1v	# 	# 	# 	# 	#r-   c                 F    dD ]\  }}}|                      |||           d S )N))rQ   rQ   rQ   )rY   rQ   rQ   rY   rY   rY   )r   r   s       r+   test_shapeszTestSS2TF.test_shapes  s>     9 	. 	.GAq!$$Q1----	. 	.r-   c                    t          j        g d          }t          j        g d          }t          ||          \  }}}}t          |ddgddggd           t          |dgdggd           t          |dd	ggd           t          |dggd
           t	          ||||          \  }}t          |d         |d           t          ||d           d S )N)      ?      @      @)r          @r   rp   rZ   rY   r   vIh%<=r   rG   +=)r   rR   r
   r   r	   )	r7   bar8   r9   CDbbaas	            r+   
test_basiczTestSS2TF.test_basic  s    H___%%H___%%1a[[
1aRHq!f-E::::QC!:E2222QF8%0000QC5u----q!Q""B1qu----AE******r-   c                    d}t          | \  }}}}t          |dggd           t          |dggd           t          |dggd           t          |dggd           t          ||||          \  }}t          |ddggd           t          |ddgd           dgdggdf}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgdggd           t          ||||          \  }}t          |ddgddggd           t          |ddgd           d S )N)rG   rY   r   r   r   rG   rY   rd   )r
   r   r	   r7   tfr8   r9   r   r   numdens           r+   test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trip  s   BZ
1aQC5u----QC5u----QC5u----QC5u----Aq!$$Sq!fXE2222aV%0000sQCj!_BZ
1aQC5u----QC5u----QC!:E2222QC!:E2222Aq!$$Sq!fq!f-E::::aV%000000r-   c                 v   ddgddggddgf}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgdggd           t          ||||          \  }}t          |ddgddggd           t          |ddgd           g dg d	gg d	f}t          | \  }}}}t          |ddgddggd           t          |dgdggd           t          |ddgddggd           t          |dgdggd           t          ||||          \  }}t          |g dg d	gd           t          |g d	d           g d
g d
gg df}t          | \  }}}}t          |g dg dg dgd           t          |dgdgdggd           t          |g d
g d
gd           t          |dgdggd           t          ||||          \  }}t          |g dg dgd           t          |g dd           t          j        dddggt
                    ddgf}t          | \  }}}}t          |dggd           t          |dggd           t          |dgdggd           t          |dgdggd           t          ||||          \  }}t          |ddgddggd           t          |ddgd           t          j        ddgg d
gt
                    g df}t          | \  }}}}t          |ddgddggd           t          |dgdggd           t          |ddgddggd           t          |dgdggd           t          ||||          \  }}t          |g dg d
gd           t          |g dd           d S )NrY   rG   rp   r   r   r   r[   )rY   r   rY   r   )rY   rG   rQ   r   )rp   rZ   rs   )rY   r   r   r   rY   r   )r   rY   rG   rQ   rQ   )dtyperc   ighe99irZ   )rY   rc   rd   r   rs   )r   rY   rZ   )r
   r   r	   r   rR   objectr   s           r+   test_simo_round_tripzTestSS2TF.test_simo_round_trip3  s   1v1vA'BZ
1aRD6....QC5u----QC";U3333QC!:E2222Aq!$$Sq!fq!f-E::::aV%0000yy)))$iii0BZ
1aRHq!f-E::::QC!:E2222RGaV,59999QC!:E2222Aq!$$Siii3%@@@@YYYU3333yy)))$lll3BZ
1aLLL)))YYY?eLLLLQC!qc?7777IIIyyy1>>>>QC!:E2222Aq!$$SlllLLL9FFFF\\\6666hAq6{&111Aq6:BZ
1aRD6....QC5u----QC";U3333QC!:E2222Aq!$$Sq!fq!f-E::::aV%0000hB+6:::IIIFBZ
1aRHq!f-E::::QC!:E2222QGb"X.U;;;;QC!:E2222Aq!$$Sjjj)))45AAAAYYYU333333r-   c                     g dg dg dg}dgdgdgg}g dg}dgg}t          ||||          \  }}t          |g dgdd	
           t          |g dd           d S )Nr   )r   r   rY   )rZ   rs   rp   r   rY   )rd   rY   r   )        r   r   r   r   r   r&   r'   )r   r         @r   r   )r	   r   )r7   r8   r9   r   r   r   r   s          r+   test_all_int_arrayszTestSS2TF.test_all_int_arraysl  s    YY			<<<0S1#sOYYKSEAq!$$S2223%eLLLL111>>>>>>r-   c                    t          j        g dg dg dg dg          }t          j        dgdgdgdgg          }t          j        g dg d	g d
g          }t          j        dgdgdgg          }t          ||||          \  }}t          |||d         |d                   \  }}t          |||d         |d                   \  }	}
t          |||d         |d                   \  }}t          ||d           t          |
|d           t          ||d           t          |t          j        ||	|f          dd           d S )N)      r   r   r   )r   r   r   r   )g      r   r   r   )g              @r   r   333333?r   g      @)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   rY   rG   r   r   r   r   )r   rR   r	   r   vstack)r7   r8   r9   r   r   b_allr   b0a0b1a1b2a2s                r+   test_multioutputzTestSS2TF.test_multioutputu  s    H++++++++++++- . . Hseeee   H*********, - - Hseee  
 Aq!$$q q!QqT1Q4((Bq!QqT1Q4((Bq!QqT1Q4((B 	AE****AE****AE****ry"b"66UOOOOOOr-   N)
r   r   r   r   r   r   r   r   r   r   r   r-   r+   r   r      s        # # #. . .+ + +1 1 1074 74 74r? ? ?$P $P $P $P $Pr-   r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestLsimrW   c                     t                      5 }|                    t                     t          | }d d d            n# 1 swxY w Y   |S N)r   filterr   r   )r7   argssupsystems       r+   
lti_nowarnzTestLsim.lti_nowarn  s       	 CJJ'''$ZF	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  s   $?AAc                 "   |                      dddd          }t          j        dd          }t          j        |          }t	          |||dg          \  }}}t          j        |           }t          ||           t          ||           d S Nr   r   r   r   rd   X0r   r   linspace
zeros_liker   expr   r7   r   tutoutyx
expected_xs           r+   test_first_orderzTestLsim.test_first_order  s     R2..K!M!&!QC5111
aVTE]]
Az***Az*****r-   c                 (   t          j        ddd          }t          j        |          }|                     dgg d          }t	          |||ddg          \  }}}d|z
  t          j        |           z  }t          |d d df         |           d S )Nr   r`   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r7   r   r   r   r   r   r   r   s           r+   test_second_orderzTestLsim.test_second_order  s    K2t$$M! #88&!QC:666
aDjBFD5MM1
AaaadGZ00000r-   c                     |                      dddd          }t          j        dd          }|}t          |||          \  }}}d|dz  z  }t	          ||| j                   t	          ||| j                   d S )Nr   r   r   rd         ?rG   decimal)r   r   r   r   r   digits_accuracyr   s           r+   test_integratorzTestLsim.test_integrator  s    RR00K!&!Q''
a47]
Az43GHHHHAz43GHHHHHHr-   c                    t          j        ddgddgg          }t          j        ddgddgg          }t          j        ddg          }t          j        d          }|                     ||||          }t          j        ddd          }t          j        t          |          d	f          }t          |||ddg
          \  }}	}
t          j        |           }t          j        |           }t          j        d|z            }t          |	|           t          |
d d df         |           t          |
d d df         |           d S )Nr   r          r   rY   rG   r   g      $@   rG   )UTr   rY   	r   rR   r   r   r   r   r   r   r   r7   r8   r9   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r+   test_two_stateszTestLsim.test_two_states  s>   HtSkC;/00HsCj3*-..Hc3Z  HVAq!,,K4$$Hc!ffa[!!&ASz:::
aVTE]]
fdUmmfTD[))Az***AaaadG[111AaaadG[11111r-   c                    t          j        ddgddgg          }t          j        dgdgg          }t          j        ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||          \  }}}	t          j        t          j        d|dz  z  |g                    }
|dz  }t          |	|
| j                   t          ||| j                   d S )	Nr   r   r   r   rd   r   rG   r   )	r   rR   r   r   	ones_liker   	transposer   r   )r7   r8   r9   r   r   r   r   r   r   r   r   r   s               r+   test_double_integratorzTestLsim.test_double_integrator  s    Hr2hR)**HrdRD\""Hr2hZ  Aq"--K!LOO&!Q''
a\"(C$'M4+@"A"ABB
1W
Az43GHHHHAz43GHHHHHHr-   c                    t          j        ddgddgg          }t          j        dgdgg          }t          j        ddgg          }|                     |||d          }t          j        dd          }t          j        |          }t          |||ddg          \  }}}	|t          j        |           z  }
t          ||
           d S r   )r   rR   r   r   r   r   r   r   )r7   r8   r9   r   r   r   r   r   r   r   r   s              r+   test_jordan_blockzTestLsim.test_jordan_block  s     HsBi"c+,,HrdRD\""Hr2hZ  Aq"--K!M!&!QC:666
aBFD5MM)
Az*****r-   c                    t          j        ddgddgg          }t          j        ddgddgg          }t          j        ddg          }t          j        d          }|                     ||||          }t          j        ddd          }t          j        t          |          d	f          }t          |||ddg
          \  }}	}
t          j        |           }t          j        |           }t          j        d|z            }t          |	|           t          |
d d df         |           t          |
d d df         |           d S )Nr   r   r   r   r   r   r   e   rG   r   rY   r   r   s                 r+   	test_misozTestLsim.test_miso  s<   HtSkC;/00HsCj3*-..Hc3Z  HUOOAq!,,K3$$Hc!ffa[!!&!QC:666
aVTE]]
fdUmmfT$Y''Az***AaaacFK000AaaacFK00000r-   c                    |                      dddd          }t          j        dd          }t          j        |          }t	          |||dg          \  }}}t          j        |           }t          ||           d S )Nr   r   r   rY   rG   r   r   )r7   r   r   r   r   r   r   r   s           r+   test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time  s|    R2..K!M!&!QC5111
aVTE]]
Az*****r-   c                     t          j        g d          }t          j        g d          }dgddgf}t          t          d          5  t	          |||dg          \  }}}d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   )r   r   r   r   r   r   z"Time steps are not equally spaced.)matchr   )r   rR   r   r"   r   )r7   r   r   r   r   r   r   s          r+   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  s    H)))**H)))**%#s$:!EG G G 	6 	6fau555JD!Q	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   
A00A47A4N)r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r   r-   r+   r   r     s        O  	+ 	+ 	+	1 	1 	1I I I2 2 2&I I I+ + + 1 1 1$+ + +6 6 6 6 6r-   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestImpulsec                     dgddgf}t          |          \  }}t          j        |           }t          ||           d S Nr   r   r   r   r   r7   r   r   r   r   s        r+   r   zTestImpulse.test_first_order  sH     %#c#&//aVTE]]
Az*****r-   c                    dgddgf}d}t          j        dd|          }t          ||          \  }}t          |j        |f           t          ||           t          j        |           }t          ||           d S )Nr   r   r   r   r   )r   r   r   r   r   r   r   r7   r   nr   r   r   r   s          r+   test_first_order_fixed_timez'TestImpulse.test_first_order_fixed_time#  s    
 %#c#K3""&A&&&aTZ!&&&D!$$$VQBZZ
Az*****r-   c                     dgddgf}t          |d          \  }}dt          j        |           z  }t          ||           d S Nr   r   r   r   r  r  s        r+   test_first_order_initialz$TestImpulse.test_first_order_initial1  sT    
 %#c#&S)))a264%==(
Az*****r-   c                     dgddgf}t          |dg          \  }}dt          j        |           z  }t          ||           d S r  r  r  s        r+   test_first_order_initial_listz)TestImpulse.test_first_order_initial_list;  sV    
 %#c#&cU+++a264%==(
Az*****r-   c                     dgddgf}t          |          \  }}t          j        |          }t          ||           d S Nr   r   )r   r   r  r   r  s        r+   r   zTestImpulse.test_integratorE  sF    %#c#&//a\$''
Az*****r-   c                     dgg df}t          |          \  }}|t          j        |           z  }t          ||           d S )Nr   r   r  r  s        r+   r   zTestImpulse.test_second_orderL  sM     %)&//aBFD5MM)
Az*****r-   c                 r    dgg df}t          |dgddg          \  }}t          |dgdg          \  }}d S )Nr   r   rQ   rd   rc   r   r   r   r7   r   r   r   s       r+   test_array_likezTestImpulse.test_array_likeU  sP    %)&aSQF333a&aSQC000aaar-   c                 >    dgg df}t          |dd          \  }}d S )Nr   r   rQ   rd   r#  r$  r%  s       r+   test_array_like2zTestImpulse.test_array_like2\  s.    %)&Q!,,,aaar-   N)r   r   r   r   r  r  r  r   r   r&  r(  r   r-   r+   r  r    s        + + ++ + ++ + ++ + ++ + ++ + +1 1 1- - - - -r-   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestStepc                     dgddgf}t          |          \  }}dt          j        |           z
  }t          ||           d S r  r   r   r   r   r  s        r+   r   zTestStep.test_first_orderb  sM     %#c#v,,a264%==(
Az*****r-   c                    dgddgf}d}t          j        dd|          }t          ||          \  }}t          |j        |f           t          ||           dt          j        |           z
  }t          ||           d S )Nr   r   r   r   r  rY   )r   r   r   r   r   r   r   r  s          r+   r  z$TestStep.test_first_order_fixed_timej  s    
 %#c#K3""v###aTZ!&&&D!$$$^
Az*****r-   c                     dgddgf}t          |d          \  }}ddt          j        |           z  z   }t          ||           d S Nr   r   r   rY   r   r,  r  s        r+   r  z!TestStep.test_first_order_initialx  sY    
 %#c#v#&&&aRVTE]]**
Az*****r-   c                     dgddgf}t          |dg          \  }}ddt          j        |           z  z   }t          ||           d S r/  r,  r  s        r+   r  z&TestStep.test_first_order_initial_list  s[    
 %#c#v3%(((aRVTE]]**
Az*****r-   c                 \    dgddgf}t          |          \  }}|}t          ||           d S r   )r   r   r  s        r+   r   zTestStep.test_integrator  s>     %S	"v,,a
Az*****r-   c                     dgg df}t          |          \  }}dd|z   t          j        |           z  z
  }t          ||           d S )Nr   r   rY   r,  r  s        r+   r   zTestStep.test_second_order  sV     %)v,,a!d(bfdUmm33
Az*****r-   c                 @    dgg df}t          |ddg          \  }}d S )Nr   r   rd   rc   r  r   r%  s       r+   r&  zTestStep.test_array_like  s0    %)v!Q(((aaar-   c                 ,    t          g dgdf           d S )Nr[   y      ?        r4  r7   s    r+   test_complex_inputzTestStep.test_complex_input  s!     	b2$r-   N)r   r   r   r   r  r  r  r   r   r&  r7  r   r-   r+   r*  r*  a  s        + + ++ + ++ + ++ + ++ + ++ + +) ) )    r-   r*  c                       e Zd Zd ZdS )TestLtic                    t          dgdg          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            t          t          j        g           t          j        dg          d          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            t          g dgd          }t          dgdgdd          }t          t          |t                               t          t          |t                                t          t          |t                                t          |j        d u            d S )NrY   r[   rQ   )
r   r   
isinstancer   r   dtr   rR   r   r   r7   ss     r+   test_lti_instantiationzTestLti.test_lti_instantiation  s   
 bTNN
1.//000
1c""###Jq$'''((( bhtnna00
1n--...
1c""###Jq$'''((( RD!bT1a  
1j))***
1c""###Jq$'''(((r-   N)r   r   r   r?  r   r-   r+   r9  r9    s#            r-   r9  c                   &    e Zd Zd Zd Zd Zd ZdS )TestStateSpacec                 (   t          dddd           t          dgdgdgdg           t          t          j        ddgddgg          t          j        dgdgg          t          j        ddgg          t          j        dgg                     d S )NrY   rG   rQ   rC   r   )r   r   rR   r6  s    r+   test_initializationz"TestStateSpace.test_initialization  s    1aAA3aS1#&&&28aVaV,--rx!qc
/C/C8aVH%%rx!	8 	8 	8 	8 	8r-   c                    t          dddd          }t          t          |                                t                                t          t          |                                t
                               t          t          |                                t                               t          t          |          |u           t          |                                |u           d S )NrY   rG   rQ   rC   )r   r   r;  to_ssto_tfr   to_zpkr   r=  s     r+   test_conversionzTestStateSpace.test_conversion  s    q!Q""
17799j11222
17799&677888
188::~66777 	
1Q&'''		"#####r-   c                     t          dddd          }t          |j        dg           t          |j        dg           t	          |j        d u            d S NrY   r   )r   r   polesr   r   r<  r=  s     r+   test_propertieszTestStateSpace.test_properties  sY    
 q!Q""QWqc"""QWqc"""r-   c                     G d d          }t          t          j        ddgddgg          t          j        dgdgg          t          j        ddgg          t          j        dgg                    }t          t          j        d	d
gdd
gg          t          j        dgdgg          t          j        ddgg          t          j        dgg                    }|                    d          }|                    d          }|                    d          }t          j        ddd          }t          j        |          }d|d<   t          t          t          t          j	        t          j
        t          j        fD ]9}	t          t           |	d          |z  ||          d          |	d          t          |||          d         z             t          t          | |	d          z  ||          d         t          |||          d          |	d          z             t          t          | |	d          z  ||          d         t          |||          d          |	d          z             t          t                    5   |	d          |z   d d d            n# 1 swxY w Y   ;t          t          |dz  ||          d         t          |d|z  |          d                    t          t          ||z  ||          d         t          |t          |||          d         |          d         d           t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  ||z   d d d            n# 1 swxY w Y   t          t                    5  | |            z   d d d            n# 1 swxY w Y   t          t                    5   |            |z   d d d            n# 1 swxY w Y   t          t                    5  | |            z   d d d            n# 1 swxY w Y   t          t                    5   |            |z   d d d            n# 1 swxY w Y   t          t          |dz   ||          d         d|z  t          |||          d         z              t          t                    5  |t          j        ddg          z    d d d            n# 1 swxY w Y   t          t                    5  t          j        ddg          |z    d d d            n# 1 swxY w Y   t          t                    5  ||z    d d d            n# 1 swxY w Y   t          t                    5  |t          j        ddgddgg          z   d d d            n# 1 swxY w Y   t          t                    5  ||z    d d d            n# 1 swxY w Y   t          t                    5  | |            z    d d d            n# 1 swxY w Y   t          t                    5   |            |z    d d d            n# 1 swxY w Y   t          t          ||z   ||          d         t          |||          d         t          |||          d         z              t          t          |dz
  ||          d         d|z  t          |||          d         z              t          t          d|z
  ||          d         d|z  t          | ||          d         z              t          t          ||z
  ||          d         t          |||          d         t          |||          d         z
             t          t                    5  | |            z
   d d d            n# 1 swxY w Y   t          t                    5   |            |z
   d d d            n# 1 swxY w Y   ||z   }
t!          |
j        dk               ||z  }
t!          |
j        dk               d|z  }
t!          |
j        dk               | }
t!          |
j        dk               d S )Nc                       e Zd ZdS ).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r-   r+   BadTyperO    s        Dr-   rP  rJ   gffffff?r   grY   r   rI   gg?皙?g?d   rG   )r   r   gh㈵>)r'   rQ   rC   rp   )r   r   rR   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr"   r   r<  )r7   rP  s1s2
s_discretes2_discretes3_discreter   r   typr>  s              r+   test_operatorszTestStateSpace.test_operators  s   	 	 	 	 	 	 	 	 4+T{!;<<1#s,,1a&**1#  4,d!<==1#s,,1a&**1#  ^^C((
nnS))nnS)) K1c""M!! R]BHM 	 	CDQ"Q777:CFFT"Q%7%7%7%::< < < Dcc!ffQ777: qA...q1CCFF:< < < Dcc!ffQ777: qA...q1CCFF:< < < y))  A               	R!VqA...q1R1q5A...q1	3 	3 	3 	R"WQ///2R4a1#5#5#5a#8A>>>qA!	# 	# 	# 	# 9%% 	 	GG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R!VqA...q1AR1 2 2 21 55	7 	7 	7 :&& 	" 	"1a&!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" :&& 	" 	"HaVr!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 9%% 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :&& 	, 	,Aq6Aq6*++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 9%% 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R"WQ///2R1***1-R10B0B0B10EE	G 	G 	G 	R!VqA...q1QbA!3!3!3A!66	8 	8 	8 	QVqA...q1AbSA 3 3 3A 66	8 	8 	8 	R"WQ///2R1***1-R10B0B0B10EE	G 	G 	G 9%% 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 9%% 	 	GIINN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$
NKs2  J11J5	8J5	+M==NNN..N25N2OO#&O#>PPP7QQQ0R

RR)SS
S'UUU,VVV1WW
W"XXX+X==YYY66Y:=Y:Z//Z36Z3	`##`'*`'aa #a N)r   r   r   rC  rH  rL  r`  r   r-   r+   rA  rA    sU        8 8 8	$ 	$ 	$  ~ ~ ~ ~ ~r-   rA  c                        e Zd Zd Zd Zd ZdS )TestTransferFunctionc                     t          dd           t          dgdg           t          t          j        dg          t          j        dg                     d S NrY   rG   )r   r   rR   r6  s    r+   rC  z(TestTransferFunction.test_initializationd  sP    A!qc"""1#!66666r-   c                    t          ddgddg          }t          t          |                                t                               t          t          |                                t                                t          t          |                                t                               t          t          |          |u           t          |                                |u           d S NrY   r   r[   )r   r   r;  rE  r   rF  rG  r   r=  s     r+   rH  z$TestTransferFunction.test_conversionj  s    aVaW--
17799j11222
17799&677888
188::~66777 	 ##1,---		"#####r-   c                     t          ddgddg          }t          |j        dg           t          |j        dg           d S rf  )r   r   rK  r   r=  s     r+   rL  z$TestTransferFunction.test_propertiesu  sI    
 aVaW--QWqc"""QWqc"""""r-   N)r   r   r   rC  rH  rL  r   r-   r+   rb  rb  c  sA        7 7 7	$ 	$ 	$# # # # #r-   rb  c                       e Zd Zd Zd ZdS )TestZerosPolesGainc                     t          ddd           t          dgdgd           t          t          j        dg          t          j        dg          d           d S rd  )r   r   rR   r6  s    r+   rC  z&TestZerosPolesGain.test_initialization  sV    q!QsQC###rx}}bhsmmQ77777r-   c                    t          ddd          }t          t          |                                t                               t          t          |                                t                               t          t          |                                t                                t          t          |          |u           t          |                                |u           d S )NrY   rG   rQ   )r   r   r;  rE  r   rF  r   rG  r=  s     r+   rH  z"TestZerosPolesGain.test_conversion  s    1a##
17799j11222
17799&677888
188::~66777 	q!!*+++

!#$$$$$r-   N)r   r   r   rC  rH  r   r-   r+   ri  ri    s2        8 8 8	% 	% 	% 	% 	%r-   ri  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Test_abcd_normalizec                     t          j        ddgddgg          | _        t          j        dgdgg          | _        t          j        ddgg          | _        t          j        dgg          | _        d S )Nr   r   r   r   r   r         @)r   rR   r8   r9   r   r   r6  s    r+   setup_methodz Test_abcd_normalize.setup_method  si    C:Sz233D6C5/**C:,''C5'""r-   c                 :    t          t          t                     d S r   )r   r"   r   r6  s    r+   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.11111r-   c                 d    t          t          t          ddg| j        | j        | j                   d S )NrY   r[   )r   r"   r   r9   r   r   r6  s    r+   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s5    j.1b'fdfdf	. 	. 	. 	. 	.r-   c                 d    t          t          t          | j        ddg| j        | j                   d S Nr[   rd   r   r"   r   r8   r   r   r6  s    r+   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  5    j.$&2q'fdf	& 	& 	& 	& 	&r-   c                 h    t          t          t          | j        | j        dgdgg| j                   d S )Nr   r   )r   r"   r   r8   r9   r   r6  s    r+   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s9    j.$&$&usendf	. 	. 	. 	. 	.r-   c           	      d    t          t          t          | j        | j        | j        ddg           d S )Nro  r   )r   r"   r   r8   r9   r   r6  s    r+   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s5    j.$&$&fsAh	( 	( 	( 	( 	(r-   c                 d    t          t          t          | j        ddg| j        | j                   d S rv  rw  r6  s    r+   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  ry  r-   c                    t          | j        | j        | j        | j                  \  }}}}t          || j                   t          || j                   t          || j                   t          || j                   d S r   )r   r8   r9   r   r   r   r7   r8   r9   r   r   s        r+   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  ss    #DFDFDFDFCC
1aQQQQr-   c                    t          | j        | j        ddgd          \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    d S rJ  )r   r8   r9   r   r   r  s        r+   r   zTest_abcd_normalize.test_shapes  s    #DFDFQFA>>
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,,,r-   c                    t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           t	          |j        d         |j        d                    t	          |j        d         | j        j        d                    d S )NrG   r   )r   r   r8   r9   r   r   rY   r   r   r   r8   r   r   )r7   B_D_r8   r9   r   r   s          r+    test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1  s    XfXf#dfb999
1aQQQQWQZ!---QWQZa11111r-   c                    t          j        d          }t          j        d          }t          | j        ||          \  }}}}t	          || j                   t	          ||           t	          ||           t	          |j        d         |j        d                    t	          |j        d         |j        d                    d S )Nr  )r   rG   r8   r9   r   r   rY   r  )r7   r  C_r8   r9   r   r   s          r+    test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2  s    XfXf#dfb999
1aQQQQWQZ!---QWQZ!-----r-   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )N)r9   r   r   r   rY   )r   r9   r   r   r   r   r  s        r+   test_missing_Az"Test_abcd_normalize.test_missing_A      #df$&AAA
1aQWQZ,,,QWQZ,,,QWtv|AQ@AAAAAr-   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )N)r8   r   r   r   rY   )r   r8   r   r   r   r   r  s        r+   test_missing_Bz"Test_abcd_normalize.test_missing_B  r  r-   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )Nr  r   rY   )r   r8   r9   r   r   r   r  s        r+   test_missing_Cz"Test_abcd_normalize.test_missing_C  r  r-   c                 X   t          | j        | j        | j                  \  }}}}t	          |j        d         |j        d                    t	          |j        d         |j        d                    t	          |j        | j        j        d         | j        j        d         f           d S )Nr  r   rY   )r   r8   r9   r   r   r   r  s        r+   test_missing_Dz"Test_abcd_normalize.test_missing_D  r  r-   c                    t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r   r   r   rY   )r   r   r   r   r   r  s        r+   test_missing_ABz#Test_abcd_normalize.test_missing_AB  s    #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr-   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r9   r   r   rY   )r   r9   r   r   r   r  s        r+   test_missing_ACz#Test_abcd_normalize.test_missing_AC      #df777
1aQWQZ,,,QWQZ,,,QWQZ,,,QWQZ,,,QWtv|AQ@AAAQWtv|AQ@AAAAAr-   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r9   r   r   rY   )r   r9   r   r   r   r  s        r+   test_missing_ADz#Test_abcd_normalize.test_missing_AD  r  r-   c                 R   t          | j        | j                  \  }}}}t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        d         |j        d                    t          |j        | j        j        d         | j        j        d         f           t          |j        | j        j        d         | j        j        d         f           d S )N)r8   r   r   rY   )r   r8   r   r   r   r  s        r+   test_missing_BCz#Test_abcd_normalize.test_missing_BC  r  r-   c                 H    t          t          t          | j                   d S )N)r   )r   r"   r   r   r6  s    r+   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_fails  s    j.DF;;;;;;r-   c                 T    t          t          t          | j        | j                   d S )N)r8   r   )r   r"   r   r8   r   r6  s    r+   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_fails  #    j.DFdfEEEEEEr-   c                 T    t          t          t          | j        | j                   d S )N)r8   r9   )r   r"   r   r8   r9   r6  s    r+   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_fails  r  r-   N)r   r   r   rp  rr  rt  rx  r{  r}  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r-   r+   rm  rm    s~       # # #2 2 2. . .& & &. . .( ( (& & &     - - -2 2 2. . .B B BB B BB B BB B BB B BB B BB B BB B B< < <F F FF F F F Fr-   rm  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )	Test_bodec                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )NrY   rQ  rY   r`   rR  r   )r   rZ   rf   rl   r   r   r   r   )r7   r   r   magphaseexpected_mags         r+   test_01zTest_bode.test_01  sb     aS1a&!!Vq)))3(((Cq999999r-   c                     t          dgddg          }g d}t          ||          \  }}}g d}t          ||d           d S )NrY   rQ  rY   r`   r  )gig33333Ur   r  )r7   r   r   r  r  expected_phases         r+   test_02zTest_bode.test_02(  s`     aS1a&!!LLVq)))3+++E>1======r-   c                 :   t          dgddg          }g d}t          ||          \  }}}|dz  }t          j        |j        |          t          j        |j        |          z  }dt          j        t          |                    z  }t          ||           d S )NrY   r  r                ?g      4@)	r   r   r   polyvalr   r   log10absr   )r7   r   r   r  r  jwr   r  s           r+   test_03zTest_bode.test_034  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCbhs1vv...C.....r-   c                 P   t          dgddg          }g d}t          ||          \  }}}|dz  }t          j        |j        |          t          j        |j        |          z  }t          j        |j        |j                  dz  t          j	        z  }t          ||           d S )NrY   r  r  r  g     f@)r   r   r   r  r   r   arctan2r    r   pir   )r7   r   r   r  r  r  r   r  s           r+   test_04zTest_bode.test_04?  s     aS1a&!!Vq)))3VJvz2&&FJ)C)CCAFAF33e;beCE>22222r-   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}}t	          ||           d S NrY   r`   rp   r  )r   r   logspacer   r   )r7   r   r  
expected_wr   r  r  s          r+   test_05zTest_bode.test_05J  s_     aS1a&!![Q**
Vq)))3Az*****r-   c                     t          dgddg          }t          |d          \  }}}t          |d         d           d S NrY   r   rG   r  g{Gz?)r   r   r   r7   r   r   r  r  s        r+   test_06zTest_bode.test_06T  sK     aS1a&!!Vq)))3QqT4     r-   c                 V    t          dgg d          }t          |d          \  }}}d S )NrY   )rY   r   rR  rG   r  )r   r   r  s        r+   test_07zTest_bode.test_07[  s5     aS+++&&Vq)))3r-   c                     t          g g dd          }|                    t          j        ddd                    \  }}}t	          t          |          dd	           d S )
N)r_   rg   rl   rm   rn   rY   rZ   rh   rR  r  i>   r   )r   r   r   r  r   minr  s        r+   test_08zTest_bode.test_08a  sb    R222A66bk"b#&>&>??3CJJb999999r-   c           	      D   t          j        g d          }t          j        |          j        }t          j        dgdgdgg          }t          j        g dg          }t          j        dgg          }t                      5 }|                    t                     t          ||||          }t          |d          \  }}	}
d d d            n# 1 swxY w Y   dt          j
        t          j        dd|dz  z   z                      z  }t          |	|           d S )	Nr   r   r   r   r   r   r   r   r   rR  r     rc   )r   rR   r1   	companionr   r   r   r   r   r   r  sqrtr   )r7   r   r8   r9   r   r   r   r   r   r  r  expected_magnitudes               r+   test_from_state_spacezTest_bode.test_from_state_spaceg  sP    H)))**Q!HsecUSE*++Hooo&''HseW   	0CJJ'''Aq!__F 3///MAsE	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
  "(273#1*3E+F+F"G"GGC!344444s   ACCCN)r   r   r   r  r  r  r  r  r  r  r  r  r   r-   r+   r  r    s        : : :
> 
> 
>	/ 	/ 	/	3 	3 	3+ + +! ! !* * *: : :5 5 5 5 5r-   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_freqrespc                     t          dgddg          }g d}t          ||          \  }}g d}g d}t          |j        |d           t          |j        |d           d S )NrY   r  r  )gGz?r   gׁsF?)MbXrJ   r  r   r   r   r   r   r    )r7   r   r   Hexpected_reexpected_ims         r+   test_output_manualz Test_freqresp.test_output_manual~  s     aS1a&!!LL!$$$1))),,,AFK;;;;AFK;;;;;;r-   c                 8   t          dgddg          }g d}t          ||          \  }}|dz  }t          j        |j        |          t          j        |j        |          z  }t          |j        |j                   t          |j        |j                   d S )NrY   r  r  r  )	r   r   r   r  r   r   r   r   r    r7   r   r   r  r>  r=   s         r+   test_outputzTest_freqresp.test_output  s     aS1a&!!!$$$1F:fj!,,rz&*a/H/HHAFHM222AFHM22222r-   c                     t          dgddg          }d}t          j        dd|          }t          ||          \  }}t	          ||           d S r  )r   r   r  r   r   )r7   r   r  r  r   r  s         r+   test_freq_rangezTest_freqresp.test_freq_range  s]     aS1a&!![Q**
!$$$1Az*****r-   c                     t          dgddg          }t          |d          \  }}t          |d         d           d S r  )r   r   r   )r7   r   r   r  s       r+   test_pole_zerozTest_freqresp.test_pole_zero  sI     aS1a&!!!$$$1QqT4     r-   c                 d   t          j        g d          }t          j        |          j        }t          j        dgdgdgg          }t          j        g dg          }t          j        dgg          }t                      5 }|                    t                     t          ||||          }t          |d          \  }}	d d d            n# 1 swxY w Y   |dz  }
ddd|
z  z   d|
dz  z  z   |
d	z  z   z  }t          |	j        |j                   t          |	j        |j                   d S )
Nr  r   r   r  rR  r  r  rG   rQ   )r   rR   r1   r  r   r   r   r   r   r   r   r   r    )r7   r   r8   r9   r   r   r   r   r   r  r>  r=   s               r+   r  z#Test_freqresp.test_from_state_space  sj    H)))**Q!HseSE3%())Hooo&''HseW   	+CJJ'''Aq!__FFc***DAq	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ F319qAv-145AFHM222AFHM22222s   ACCCc                     t          g dgdz  dg          }g d}t          ||          \  }}|dz  }d|dz   dz  z  }t          |j        |j                   t          |j        |j                   d S )Nr[   rC   rY   r  r  r  r  r  s         r+   test_from_zpkzTest_freqresp.test_from_zpk  s    RQs##!$$$1FAz>AFHM222AFHM22222r-   N)	r   r   r   r  r  r  r  r  r  r   r-   r+   r  r  |  sn        < < <	3 	3 	3+ + +! ! !3 3 3*3 3 3 3 3r-   r  )r   r   ),r   numpyr   numpy.testingr   r   r   r   r   pytestr   r   scipy.signalr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr1   r,   r/   r   r   r  r*  r9  rA  rb  ri  rm  r  r  r   r-   r+   <module>r     s       7 7 7 7 7 7 7 7 7 7 7 7 7 7 * * * * * *H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H 8 7 7 7 7 7      N N N N*V@ V@ V@ V@ V@ V@ V@ V@r[P [P [P [P [P [P [P [P|{6 {6 {6 {6 {6 {6 {6 {6|D- D- D- D- D- D- D- D-NF F F F F F F FR       8[ [ [ [ [ [ [ [z# # # # # # # #8% % % % % % % %&CF CF CF CF CF CF CF CFLa5 a5 a5 a5 a5 a5 a5 a5HI3 I3 I3 I3 I3 I3 I3 I3 I3 I3r-   