o
    gݸ                     @   s  d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d dl"m#Z# d,dd	Z$G d
d dZ%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G dd de)Z*G dd de)Z+G dd dZ,G dd de,Z-G dd de,Z.G dd dZ/G d d! d!Z0G d"d# d#Z1G d$d% d%Z2G d&d' d'Z3G d(d) d)Z4G d*d+ d+Z5dS )-    N)assert_almost_equalassert_equalassert_allcloseassert_suppress_warnings)raises)ss2tftf2sslsim2impulse2step2ltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients)matrix:0yE>c              
   C   s   |  }| D ]D}d}t|jd D ](}tt|t|gt|| t|| g||r9d}t||  nq|sJtdt	| d t	| q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_idx r-   \/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_close   s    r/   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestPlacePolesc                 K   sZ   t |||fi |}tj|t||j \}}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_r-   r-   r.   _check(   s   zTestPlacePoles._checkc                 C   s   t g ddd}t g ddd}t g d}| j|||dd | j|||dd t jd	d
 | ||d W d    d S 1 sHw   Y  d S )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)r7   r8   r9   r:   r-   r-   r.   	test_real4   s   "zTestPlacePoles.test_realc                 C   s  t g dg dg dg dg}t ddgddgddgddgg}t g d}t jddd | ||| W d    n1 sBw   Y  g d	}t jddd | j|||d
d W d    n1 sfw   Y  t g ddd}t g ddd}g d}| ||| t dt d }t dt dgd dd d dd f  }||d dd df< ||d dd df< g d}t jddd | ||| W d    n1 sw   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 g ddd}t g ddd}t g d}t jddd t||| W d    n	1 sNw   Y  t g d}t jddd | ||| W d    d S 1 suw   Y  d S )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@)   rc   rc   )rc   r^   r^   )r]   (   2   <   F   y      4      y      4      @y      @      @y      @      )
r]   rd   re   iiiirY   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rU   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   	   )
r   r   r   r   rW   r   r   rW   rF   rP   rF   )y            ?y                        ?            )rn   rX   ro   rp   )	r   rQ   rS   r?   rR   oneseyediagr   )r7   r8   r9   r:   big_Abig_Br-   r-   r.   test_complexJ   sl   

,..$zTestPlacePoles.test_complexc                 C   s   t g ddd}t g ddd}t g d}| |||}t|jt j t|jt j t d}| |||}t|jt j t|jt j |d d df dd}t d}| |||}t|jd t|jd d S )Nr@   rB   )r   rC   rD   rD   r   r   rE   r   rW   rF   rP   rB   rb   ra   rU      rG   )r[   rZ   rX   rn   r   rW   )r   rQ   rR   r?   r   r(   nannb_iter)r7   r8   r9   r:   r<   r-   r-   r.   test_tricky_B   s&   

zTestPlacePoles.test_tricky_Bc              	   C   s  t g ddd}t g ddd}ttt||ddd ttt||t 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d ttt||ddd ttt||d tttt dt dd tj	dd9}t
d t||dddd}tt|dk tt|d jt tdt|d jv  t|jd W d    n1 sw   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 d S ) N)r   rU   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   rB   )r   r   r   r   rW   r   r   rW   rF   ) 皙ffffff333333foorK   rW   )r|   r}   r~   r   rX   )r|   r}   r~   *   r(   ir_   )rn   rn   rn   rn   )rB   rB   )rB   rF   rW   rF   rP   rB   T)recordalways)rY   rn   rX   rq   gؗҜ<)r(   r`   rY   z4Convergence was not reached after maxiter iterations)r[   rZ                @rn   rP   )rn   rX   rq   )r[   rZ   r   y             rJ   )r   rQ   rR   assert_raisesr$   r   newaxisrr   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr%   messager   rz   )r7   r8   r9   wr<   r-   r-   r.   test_errors   sT   



  

zTestPlacePoles.test_errorsN)__name__
__module____qualname__r?   rT   rw   r{   r   r-   r-   r-   r.   r0   &   s    P"r0   c                   @   D   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )	TestSS2TFc                 C   s<   t t||ft||ft||ft||fd d S )Nr   )r   r   zerosr7   pqrr-   r-   r.   check_matrix_shapes  s
   zTestSS2TF.check_matrix_shapesc                 C   s"   dD ]\}}}|  ||| qd S )N))rP   rP   rP   )rW   rP   rP   rW   rW   rW   )r   r   r-   r-   r.   test_shapes  s   zTestSS2TF.test_shapesc           	      C   s   t g d}t g d}t||\}}}}t|ddgddggdd t|dgdggdd t|dd	ggdd t|dggd
d t||||\}}t|d |dd t||dd d S )N)      ?      @      @)r          @r   rn   rX   rW   r   vIh%<=r   rF   +=)r   rQ   r	   r   r   )	r7   bar8   r9   CDbbaar-   r-   r.   
test_basic  s   zTestSS2TF.test_basicc                 C   sF  d}t | \}}}}t|dggdd t|dggdd t|dggdd t|dggdd t||||\}}t|ddggdd t|ddgdd dgdggdf}t | \}}}}t|dggdd t|dggdd t|dgdggdd t|dgdggdd t||||\}}t|ddgddggdd t|ddgdd d S )N)rF   rW   r   r   r   rF   rW   rb   )r	   r   r   r7   tfr8   r9   r   r   numdenr-   r-   r.   test_zero_order_round_trip  s$   z$TestSS2TF.test_zero_order_round_tripc                 C   s  ddgddggddgf}t | \}}}}t|dggdd t|dggdd t|dgdggdd t|dgdggdd t||||\}}t|ddgddggdd t|ddgdd g dg d	gg d	f}t | \}}}}t|ddgddggdd t|dgdggdd t|ddgddggdd t|dgdggdd t||||\}}t|g dg d	gdd t|g d	dd g d
g d
gg df}t | \}}}}t|g dg dg dgdd t|dgdgdggdd t|g d
g d
gdd t|dgdggdd t||||\}}t|g dg dgdd t|g ddd tjdddggtdddgf}t | \}}}}t|dggdd t|dggdd t|dgdggdd t|dgdggdd t||||\}}t|ddgddggdd t|ddgdd tjddgg d
gtdg df}t | \}}}}t|ddgddggdd t|dgdggdd t|ddgddggdd t|dgdggdd t||||\}}t|g dg d
gdd t|g ddd d S )NrW   rF   rn   r   r   r   rY   )rW   r   rW   r   )rW   rF   rP   r   )rn   rX   rq   )rW   r   r   r   rW   r   )r   rW   rF   rP   rP   )dtypera   ighe99irX   )rW   ra   rb   r   rq   )r   rW   rX   )r	   r   r   r   rQ   objectr   r-   r-   r.   test_simo_round_trip4  sZ    "zTestSS2TF.test_simo_round_tripc                 C   sv   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	d
 t|g ddd d S )Nr   )r   r   rW   )rX   rq   rn   r   rW   )rb   rW   r   )        r   r   r   r   r   r(   r)   )r   r         @r   r   )r   r   )r7   r8   r9   r   r   r   r   r-   r-   r.   test_all_int_arraysm  s   
zTestSS2TF.test_all_int_arraysc                 C   s  t g dg dg dg dg}t dgdgdgdgg}t g dg d	g d
g}t dgdgdgg}t||||\}}t|||d |d \}}t|||d |d \}	}
t|||d |d \}}t||dd t|
|dd t||dd t|t ||	|fd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   rW   rF   r   r   r   r   )r   rQ   r   r   vstack)r7   r8   r9   r   r   b_allr   b0a0b1a1b2a2r-   r-   r.   test_multioutputv  s4   

 zTestSS2TF.test_multioutputN)
r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   r      s    9	r   c                   @   r   )TestLsimc                 G   s>   t  }|t t| }W d    |S 1 sw   Y  |S N)r   filterr   r   )r7   argssupsystemr-   r-   r.   
lti_nowarn  s   


zTestLsim.lti_nowarnc                 C   sb   |  dddd}tdd}t|}t|||dgd\}}}t| }t|| t|| d S Nr   r   r   r   rb   X0r   r   linspace
zeros_liker   expr   r7   r   tutoutyx
expected_xr-   r-   r.   test_first_order  s   

zTestLsim.test_first_orderc                 C   sV   |  dddd}tdd}|}t|||\}}}d|d  }t|| t|| d S )Nr   r   r   rb         ?rF   )r   r   r   r   r   r   r-   r-   r.   test_integrator  s   
zTestLsim.test_integratorc                 C   s   t ddgddgg}t dgdgg}t ddgg}| |||d}tdd}t|}t|||\}}}	ttd|d  |g}
|d }t|	|
 t|| d S )Nr   r   r   r   rb   r   rF   )	r   r   r   r   	ones_liker   	transposerQ   r   )r7   r8   r9   r   r   r   r   r   r   r   r   
expected_yr-   r-   r.   test_double_integrator  s   

zTestLsim.test_double_integratorc                 C   s   t ddgddgg}t dgdgg}t ddgg}| |||d}tdd}t|}t|||ddgd\}}}	|t|  }
t||
 d S r   )r   r   r   r   r   r   r   r   )r7   r8   r9   r   r   r   r   r   r   r   r   r-   r-   r.   test_jordan_block  s   
zTestLsim.test_jordan_blockc                 C   s   t ddgddgg}t ddgddgg}t ddg}t d}| ||||}t ddd}t |}t|||ddgd	\}}	}
t | }t | }t d| }t|	| t|
d d df | t|
d d d
f | d S )Nr   r          r   rW   rF   r   r   e   r   rW   )	r   rQ   r   r   r   r   r   r   r   )r7   r8   r9   r   r   r   r   r   r   r   r   r   expected_x0expected_x1r-   r-   r.   	test_miso  s   


zTestLsim.test_misoc                 C   sX   |  dddd}tdd}t|}t|||dgd\}}}t| }t|| d S )Nr   r   r   rW   rF   r   r   )r7   r   r   r   r   r   r   r   r-   r-   r.   test_nonzero_initial_time  s   
z"TestLsim.test_nonzero_initial_timeN)
r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   r     s    
r   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
Test_lsim2c                 C   sd   t ddd}t |}dgddgf}t|||dgd\}}}t | }t|d d df | d S )Nr   r^     r   r   r   r   r   r
   r   r   r7   r   r   r   r   r   r   r   r-   r-   r.   test_01  s   
zTest_lsim2.test_01c                 C   sh   t g d}t g d}dgddgf}t|||dgd\}}}t d|}t|d d df | d S )N)r   r   r   r   )r   r   r   r   r   r   r   r   )r   rQ   r
   maximumr   r   r-   r-   r.   test_02  s   zTest_lsim2.test_02c                 C   sh   t g d}t g d}dgddgf}t|||dd\}}}t g d}t|d d df | d S )	N)r   r   r   皙?r   r   )r   r   r   r   r   r   r   r   {Gz?)hmax)r   r   r   皙?r   r   r   )r   rQ   r
   r   r   r-   r-   r.   test_03  s   zTest_lsim2.test_03c                 C   sn   t ddd}t |}dgg df}t|||ddgd\}}}d| t |  }t|d d df | d S )Nr   r^   r   r   r   r   r   r   r   r   r   r-   r-   r.   test_04  s   
zTest_lsim2.test_04c                 C   s  t ddgddgg}t ddgddgg}t ddg}t d}t ddd}t }|t t||||f|ddgd	\}}}	W d    n1 sLw   Y  t | }
t | }t d| }t	||
 t	|	d d df | t	|	d d d
f | d S )Nr   r   r   r   r   r   g      $@r   )Tr   rW   )
r   rQ   r   r   r   r   r   r
   r   r   )r7   r8   r9   r   r   r   r   r   r   r   r   r   r   r-   r-   r.   test_05  s   

"
zTest_lsim2.test_05c                 C   sR   dgg df}t |ddgd\}}}d| t|  }t|d d df | d S )Nr   r   r   r   r   )r
   r   r   r   )r7   r   r   r   r   r   r-   r-   r.   test_062  s   zTest_lsim2.test_06N)	r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   r     s    
		r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_TestImpulseFuncsc                 C   s6   dgddgf}|  |\}}t| }t|| d S Nr   funcr   r   r   r7   r   r   r   r   r-   r-   r.   r   @  s   z_TestImpulseFuncs.test_01c                 C   sd   dgddgf}d}t dd|}| j||d\}}t|j|f t|| t | }t|| d S )Nr      r   r   r   r   r   r   r   r   r   r   r7   r   nr   r   r   r   r-   r-   r.   r   H  s   
z_TestImpulseFuncs.test_02c                 C   s>   dgddgf}| j |dd\}}dt|  }t|| d S Nr   r   r   r   r   r  r-   r-   r.   r   V  s   z_TestImpulseFuncs.test_03c                 C   s@   dgddgf}| j |dgd\}}dt|  }t|| d S r  r   r  r-   r-   r.   r   `  s   z_TestImpulseFuncs.test_04c                 C   s4   dgddgf}|  |\}}t|}t|| d S Nr   r   )r   r   r   r   r  r-   r-   r.   r   j  s   
z_TestImpulseFuncs.test_05c                 C   s:   dgg df}|  |\}}|t|  }t|| d S )Nr   r   r   r  r-   r-   r.   r   q  s   z_TestImpulseFuncs.test_06c                 C   sD   dgg df}| j |dgddgd\}}| j |dgdgd\}}d S )Nr   r   rP   rb   ra   r   r   r   r7   r   r   r   r-   r-   r.   test_array_likez  s   z!_TestImpulseFuncs.test_array_likec                 C   s&   dgg df}| j |ddd\}}d S )Nr   r   rP   rb   r	  r
  r  r-   r-   r.   test_array_like2  s   z"_TestImpulseFuncs.test_array_like2N)r   r   r   r   r   r   r   r   r   r  r  r-   r-   r-   r.   r   =  s    

	r   c                   @      e Zd Zdd ZdS )TestImpulse2c                 C   
   t | _d S r   )r   r   r7   r-   r-   r.   setup_method     
zTestImpulse2.setup_methodNr   r   r   r  r-   r-   r-   r.   r        r  c                   @   r  )TestImpulsec                 C   r  r   )r   r   r  r-   r-   r.   r    r  zTestImpulse.setup_methodNr  r-   r-   r-   r.   r    r  r  c                   @   r   )_TestStepFuncsc                 C   s:   dgddgf}|  |\}}dt|  }t|| d S r   r   r  r-   r-   r.   r     s   z_TestStepFuncs.test_01c                 C   sh   dgddgf}d}t dd|}| j||d\}}t|j|f t|| dt |  }t|| d S )Nr   r  r   r   r  rW   r  r  r-   r-   r.   r     s   
z_TestStepFuncs.test_02c                 C   sB   dgddgf}| j |dd\}}ddt|   }t|| d S Nr   r   r   rW   r   r   r  r-   r-   r.   r     s   z_TestStepFuncs.test_03c                 C   sD   dgddgf}| j |dgd\}}ddt|   }t|| d S r  r   r  r-   r-   r.   r     s   z_TestStepFuncs.test_04c                 C   s.   dgddgf}|  |\}}|}t|| d S r  r   r   r  r-   r-   r.   r     s   z_TestStepFuncs.test_05c                 C   sB   dgg df}|  |\}}dd| t|   }t|| d S )Nr   r   rW   r   r  r-   r-   r.   r     s   z_TestStepFuncs.test_06c                 C   s(   dgg df}| j |ddgd\}}d S )Nr   r   rb   ra   r  r
  r  r-   r-   r.   r    s   z_TestStepFuncs.test_array_likeN)
r   r   r   r   r   r   r   r   r   r  r-   r-   r-   r.   r    s    

	r  c                   @      e Zd Zdd Zdd ZdS )	TestStep2c                 C   r  r   )r   r   r  r-   r-   r.   r    r  zTestStep2.setup_methodc                 C   s4   dgddgf}| j |ddd\}}|}t|| d S )Nr   r   g|=r   )r)   r(   r  r  r-   r-   r.   r     s   zTestStep2.test_05N)r   r   r   r  r   r-   r-   r-   r.   r        r  c                   @   r  )TestStepc                 C   r  r   )r   r   r  r-   r-   r.   r    r  zTestStep.setup_methodc                 C   s   t g dgdf d S )NrY   y      ?        )r   r  r-   r-   r.   test_complex_input  s   zTestStep.test_complex_inputN)r   r   r   r  r  r-   r-   r-   r.   r    r  r  c                   @   r  )TestLtic                 C   s   t dgdg}tt|t tt|t  tt|t  t|jd u  t tg t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 )NrW   rY   rP   )
r   r   
isinstancer   r   dtr   rQ   r   r   r7   sr-   r-   r.   test_lti_instantiation  s    zTestLti.test_lti_instantiationN)r   r   r   r$  r-   r-   r-   r.   r    r  r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestStateSpacec                 C   sl   t dddd t dgdgdgdg t tddgddggtdgdggtddggtdgg d S )NrW   rF   rP   rB   r   )r   r   rQ   r  r-   r-   r.   test_initialization  s
   &z"TestStateSpace.test_initializationc                 C   sh   t dddd}tt| t  tt| t tt| t tt ||u t| |u d S )NrW   rF   rP   rB   )r   r   r   to_ssto_tfr   to_zpkr   r"  r-   r-   r.   test_conversion  s   zTestStateSpace.test_conversionc                 C   s<   t dddd}t|jdg t|jdg t|jd u  d S NrW   r   )r   r   polesr   r   r!  r"  r-   r-   r.   test_properties  s   zTestStateSpace.test_propertiesc              	   C   s  G dd d}t tddgddggtdgdggtddggtdgg}t td	d
gdd
ggtdgdggtddggtdgg}|d}|d}|d}tddd}t|}d|d< ttttj	tj
tjfD ]m}	tt|	d| ||dd |	dt|||dd   tt||	d ||dd t|||dd |	d  tt||	d ||dd t|||dd |	d  tt |	d|  W d    n1 sw   Y  qutt|d ||dd t|d| |dd  tt|| ||dd t|t|||dd |dd dd tt ||  W d    n	1 s,w   Y  tt ||  W d    n	1 sEw   Y  tt ||  W d    n	1 s^w   Y  tt ||   W d    n	1 sxw   Y  tt | |  W d    n	1 sw   Y  tt ||   W d    n	1 sw   Y  tt | |  W d    n	1 sw   Y  tt|d ||dd d| t|||dd   tt |tddg  W d    n	1 sw   Y  tt tddg|  W d    n	1 sw   Y  tt ||  W d    n	1 s4w   Y  tt |tddgddgg  W d    n	1 sVw   Y  tt ||  W d    n	1 sow   Y  tt ||   W d    n	1 sw   Y  tt | |  W d    n	1 sw   Y  tt|| ||dd t|||dd t|||dd   tt|d ||dd d| t|||dd   ttd| ||dd d| t| ||dd   tt|| ||dd t|||dd t|||dd   tt ||   W d    n	1 s,w   Y  tt | |  W d    n	1 sFw   Y  || }
t|
jdk || }
t|
jdk d| }
t|
jdk | }
t|
jdk d S )Nc                   @   s   e Zd ZdS )z.TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r-   r-   r-   r.   BadType+  s    r.  rI   gffffff?r   grW   r   rH   gg?r   g?d   rF   )Ur   gh㈵>)r)   rP   rB   rn   )r   r   rQ   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr$   r   r!  )r7   r.  s1s2
s_discretes2_discretes3_discreter   r   typr#  r-   r-   r.   test_operators(  s   























""

zTestStateSpace.test_operatorsN)r   r   r   r&  r*  r-  r>  r-   r-   r-   r.   r%    s
    
r%  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestTransferFunctionc                 C   s6   t dd t dgdg t tdgtdg d S NrW   rF   )r   r   rQ   r  r-   r-   r.   r&    s   
z(TestTransferFunction.test_initializationc                 C   sl   t ddgddg}tt| t tt| t  tt| t tt ||u t| |u d S NrW   r   rY   )r   r   r   r'  r   r(  r)  r   r"  r-   r-   r.   r*    s   z$TestTransferFunction.test_conversionc                 C   s2   t ddgddg}t|jdg t|jdg d S rA  )r   r   r,  r   r"  r-   r-   r.   r-    s   z$TestTransferFunction.test_propertiesN)r   r   r   r&  r*  r-  r-   r-   r-   r.   r?    s    r?  c                   @   r  )TestZerosPolesGainc                 C   s<   t ddd t dgdgd t tdgtdgd d S r@  )r   r   rQ   r  r-   r-   r.   r&    s    z&TestZerosPolesGain.test_initializationc                 C   sf   t ddd}tt| t tt| t tt| t  tt ||u t| |u d S )NrW   rF   rP   )r   r   r   r'  r   r(  r   r)  r"  r-   r-   r.   r*    s   z"TestZerosPolesGain.test_conversionN)r   r   r   r&  r*  r-   r-   r-   r.   rB    s    rB  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).Test_abcd_normalizec                 C   sR   t ddgddgg| _t dgdgg| _t ddgg| _t dgg| _d S )Nr   r   r   r   r   r         @)r   rQ   r8   r9   r   r   r  r-   r-   r.   r    s   z Test_abcd_normalize.setup_methodc                 C   s   t tt d S r   )r   r$   r   r  r-   r-   r.   test_no_matrix_fails  s   z(Test_abcd_normalize.test_no_matrix_failsc                 C   s    t ttddg| j| j| j d S )NrW   rY   )r   r$   r   r9   r   r   r  r-   r-   r.   test_A_nosquare_fails  s   z)Test_abcd_normalize.test_A_nosquare_failsc                 C       t tt| jddg| j| j d S NrY   rb   r   r$   r   r8   r   r   r  r-   r-   r.   test_AB_mismatch_fails     z*Test_abcd_normalize.test_AB_mismatch_failsc                 C   s$   t tt| j| jdgdgg| j d S )Nr   r   )r   r$   r   r8   r9   r   r  r-   r-   r.   test_AC_mismatch_fails  s   z*Test_abcd_normalize.test_AC_mismatch_failsc                 C   s    t tt| j| j| jddg d S )NrD  r   )r   r$   r   r8   r9   r   r  r-   r-   r.   test_CD_mismatch_fails  s   
z*Test_abcd_normalize.test_CD_mismatch_failsc                 C   rG  rH  rI  r  r-   r-   r.   test_BD_mismatch_fails  rK  z*Test_abcd_normalize.test_BD_mismatch_failsc                 C   sR   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   r-   r-   r.   "test_normalized_matrices_unchanged  s
   z6Test_abcd_normalize.test_normalized_matrices_unchangedc                 C   s   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 r+  )r   r8   r9   r   r   rO  r-   r-   r.   r     s   zTest_abcd_normalize.test_shapesc                 C   s~   t d}t d}t| j||d\}}}}t|| j t|| t|| t|jd |jd  t|jd | jjd  d S )NrF   r   )r   r   r8   r9   r   r   rW   r   r   r   r8   r   r   )r7   B_D_r8   r9   r   r   r-   r-   r.    test_zero_dimension_is_not_none1  s   



z4Test_abcd_normalize.test_zero_dimension_is_not_none1c                 C   s|   t d}t d}t| j||d\}}}}t|| j t|| t|| t|jd |jd  t|jd |jd  d S )NrQ  )r   rF   r8   r9   r   r   rW   rS  )r7   rT  C_r8   r9   r   r   r-   r-   r.    test_zero_dimension_is_not_none2  s   



z4Test_abcd_normalize.test_zero_dimension_is_not_none2c                 C   sl   t | j| j| jd\}}}}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   rW   )r   r9   r   r   r   r   rO  r-   r-   r.   test_missing_A     $z"Test_abcd_normalize.test_missing_Ac                 C   sl   t | j| j| jd\}}}}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   rW   )r   r8   r   r   r   r   rO  r-   r-   r.   test_missing_B  r[  z"Test_abcd_normalize.test_missing_Bc                 C   sl   t | j| j| jd\}}}}t|jd |jd  t|jd |jd  t|j| jjd | jjd f d S )NrR  r   rW   )r   r8   r9   r   r   r   rO  r-   r-   r.   test_missing_C$  r[  z"Test_abcd_normalize.test_missing_Cc                 C   sl   t | j| j| jd\}}}}t|jd |jd  t|jd |jd  t|j| jjd | jjd f d S )NrW  r   rW   )r   r8   r9   r   r   r   rO  r-   r-   r.   test_missing_D*  r[  z"Test_abcd_normalize.test_missing_Dc                 C   s   t | j| jd\}}}}t|jd |jd  t|jd |jd  t|jd |jd  t|j| jjd | jjd f t|j| jjd | jjd f d S )N)r   r   r   rW   )r   r   r   r   r   rO  r-   r-   r.   test_missing_AB0  s    $z#Test_abcd_normalize.test_missing_ABc                 C   s   t | j| jd\}}}}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   rW   )r   r9   r   r   r   rO  r-   r-   r.   test_missing_AC8      $z#Test_abcd_normalize.test_missing_ACc                 C   s   t | j| jd\}}}}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   rW   )r   r9   r   r   r   rO  r-   r-   r.   test_missing_ADA  ra  z#Test_abcd_normalize.test_missing_ADc                 C   s   t | j| jd\}}}}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   rW   )r   r8   r   r   r   rO  r-   r-   r.   test_missing_BCJ  ra  z#Test_abcd_normalize.test_missing_BCc                 C   s   t tt| jd d S )N)r   )r   r$   r   r   r  r-   r-   r.   test_missing_ABC_failsS  s   z*Test_abcd_normalize.test_missing_ABC_failsc                 C      t tt| j| jd d S )N)r8   r   )r   r$   r   r8   r   r  r-   r-   r.   test_missing_BD_failsV     z)Test_abcd_normalize.test_missing_BD_failsc                 C   re  )N)r8   r9   )r   r$   r   r8   r9   r  r-   r-   r.   test_missing_CD_failsY  rg  z)Test_abcd_normalize.test_missing_CD_failsN)r   r   r   r  rE  rF  rJ  rL  rM  rN  rP  r   rV  rY  rZ  r\  r]  r^  r_  r`  rb  rc  rd  rf  rh  r-   r-   r-   r.   rC    s.    

			rC  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )	Test_bodec                 C   sD   t dgddg}g d}t||d\}}}g d}t||dd d S )NrW   r   rW   r^   r/  r   )r   rX   rd   rj   decimalr   r   r   )r7   r   r   magphaseexpected_magr-   r-   r.   r   _  s
   zTest_bode.test_01c                 C   sD   t dgddg}g d}t||d\}}}g d}t||dd d S )NrW   r   rW   r^   rk  )gig33333Url  rn  )r7   r   r   ro  rp  expected_phaser-   r-   r.   r   m  s
   zTest_bode.test_02c                 C   sn   t dgddg}g d}t||d\}}}|d }t|j|t|j| }dtt| }t|| d S )NrW   rj  rk                ?g      4@)	r   r   r   polyvalr   r   log10absr   )r7   r   r   ro  rp  jwr   rq  r-   r-   r.   r   y  s   zTest_bode.test_03c                 C   sv   t dgddg}g d}t||d\}}}|d }t|j|t|j| }t|j|jd tj	 }t
|| d S )NrW   rj  rk  rt  g     f@)r   r   r   ru  r   r   arctan2r"   r!   pir   )r7   r   r   ro  rp  rx  r   rs  r-   r-   r.   r     s   zTest_bode.test_04c                 C   sB   t dgddg}d}tdd|}t||d\}}}t|| d S NrW   r^   rn   r  )r   r   logspacer   r   )r7   r   r  
expected_wr   ro  rp  r-   r-   r.   r     s
   zTest_bode.test_05c                 C   s4   t dgddg}t|dd\}}}t|d d d S NrW   r   rF   r|  r   )r   r   r   r7   r   r   ro  rp  r-   r-   r.   r     s   zTest_bode.test_06c                 C   s&   t dgg d}t|dd\}}}d S )NrW   )rW   r   r/  rF   r|  )r   r   r  r-   r-   r.   test_07  s   zTest_bode.test_07c                 C   sB   t g g dd}|jtdddd\}}}tt|ddd	 d S )
N)r]   re   rj   rk   rl   rW   rX   rf   r/  rk  i>   rl  )r   r   r   r}  r   minr  r-   r-   r.   test_08  s   zTest_bode.test_08c              	   C   s   t g d}t|j}t dgdgdgg}t g dg}t dgg}t }|t t||||}t	|dd\}}	}
W d    n1 sJw   Y  dt 
t dd|d    }t|	| d S )	Nr   r   r   r   r   r   r   r   r   r/  r|     ra   )r   rQ   r1   	companionr   r   r   r   r   r   rv  sqrtr   )r7   r   r8   r9   r   r   r   r   r   ro  rp  expected_magnituder-   r-   r.   test_from_state_space  s   
 zTest_bode.test_from_state_spaceN)r   r   r   r   r   r   r   r   r   r  r  r  r-   r-   r-   r.   ri  ]  s    
ri  c                   @   r   )Test_freqrespc                 C   s\   t dgddg}g d}t||d\}}g d}g d}t|j|dd t|j|dd d S )NrW   rr  rk  )gGz?r   gׁsF?)MbXrI   r  rl  r   r   r   r!   r"   )r7   r   r   Hexpected_reexpected_imr-   r-   r.   test_output_manual  s   z Test_freqresp.test_output_manualc                 C   sl   t dgddg}g d}t||d\}}|d }t|j|t|j| }t|j|j t|j|j d S )NrW   rj  rk  rt  )	r   r   r   ru  r   r   r   r!   r"   r7   r   r   r  r#  r=   r-   r-   r.   test_output  s   zTest_freqresp.test_outputc                 C   s@   t dgddg}d}tdd|}t||d\}}t|| d S r{  )r   r   r}  r   r   )r7   r   r  r~  r   r  r-   r-   r.   test_freq_range  s
   zTest_freqresp.test_freq_rangec                 C   s2   t dgddg}t|dd\}}t|d d d S r  )r   r   r   )r7   r   r   r  r-   r-   r.   test_pole_zero  s   zTest_freqresp.test_pole_zeroc                 C   s   t g d}t|j}t dgdgdgg}t g dg}t dgg}t }|t t||||}t	|dd\}}	W d    n1 sIw   Y  |d }
ddd|
  d|
d   |
d	   }t
|	j|j t
|	j|j d S )
Nr  r   r   r  r/  r|  rt  rF   rP   )r   rQ   r1   r  r   r   r   r   r   r   r   r!   r"   )r7   r   r8   r9   r   r   r   r   r   r  r#  r=   r-   r-   r.   r    s   
$z#Test_freqresp.test_from_state_spacec                 C   sd   t g dgd dg}g d}t||d\}}|d }d|d d  }t|j|j t|j|j d S )NrY   rB   rW   rj  rk  rt  r  r  r-   r-   r.   test_from_zpk  s   zTest_freqresp.test_from_zpkN)	r   r   r   r  r  r  r  r  r  r-   r-   r-   r.   r    s    
r  )r   r   )6r   numpyr   numpy.testingr   r   r   r   r   pytestr   r   scipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr1   scipy.sparse._sputilsr   r/   r0   r   r   r   r   r  r  r  r  r  r  r%  r?  rB  rC  ri  r  r-   r-   r-   r.   <module>   s<    L
 Z UKIC  d