U
    Hvfݸ                     @   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}t|jd D ]P}tt|t|gt|| t|| g||r"d}t||  qtq"|st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npZallcloserealimagdelete
ValueErrorstr)ZP1ZP2rtolatolp1foundZp2_idx r)   B/tmp/pip-unpacked-wheel-96ln3f52/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   sV   t |||f|}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   linalgZeigdotZgain_matrixr+   Zrequested_polesZcomputed_poles)selfABPkwargsfsfexpected_r)   r)   r*   _check(   s    zTestPlacePoles._checkc                 C   s   t ddddddddd	d
dddd
ddgdd}t ddddddddgdd}t ddddg}| j|||dd | j|||dd t jdd | ||d W 5 Q R X d S )NGz?砉ʿ\(@NbX9<,Ԛ)\(r   皙?On?d;O@V-On@~jt?rh|?E    K@V-?^I+	   皙ɿ      }гY9DT!KNV0methodZYTignore)invalid)rJ   rJ      rT   )r   arrayreshaper7   errstate)r/   r0   r1   r2   r)   r)   r*   	test_real4   s(            "zTestPlacePoles.test_realc              &   C   s  t ddddgddddgddddgddddgg}t ddgddgddgddgg}t ddddg}t jd	d	d
 | ||| W 5 Q R X ddddg}t jd	d	d
 | j|||dd W 5 Q R X t dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4g$d5d5}t d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSgd5dT}dUdVdWdXdYdZg}| ||| t d[t d\ }t d]t dgd dd d dd f  }||d d5d d5f< ||d d5d dTf< dd^d_d`dadbdcdddedfdgg}t jd	d	d
 | ||| W 5 Q R X dd^d_dhdidjdkdldmdng
}| |d dd df |d dd df | dodpdqdrdsdtdudvdwdxg
}| |d dd df |d dd df | t ddddddddddddddddddddTdddddygdTdT}t ddddddddd+dzg
dTd+}t d{d|d}d~dg}t jd	d	d
 t||| W 5 Q R X t d{ddd~dg}t jd	d	d
 | ||| W 5 Q R X d S )Nr      竪@                             ?rR   )dividerS   y        ưy        ư>
   i  maxiteriii%iiFii[iiiYiiii\ii^iciii(i~iiiiirJ   iSiiigiiipii   iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rg   rg   )rg   rb   (   2   <   F   y      4      y      4      @y      @      @y      @      iiiiy      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I	   rT   y            ?y            y            ?y            )	r   rU   rW   r7   rV   onesZeyeZdiagr   )r/   r0   r1   r2   Zbig_AZbig_Br)   r)   r*   test_complexJ   s    



                                            ,.
    .$         &zTestPlacePoles.test_complexc                 C   s   t ddddddddd	d
dddd
ddgdd}t ddddddddddddddddgdd}t ddddg}| |||}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 ) Nr8   r9   r:   r;   r<   r=   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   r[   rJ   rT   rf   re   rY      rK   rL   rM   rN   )r_   r^   r\   rr   )r   rU   rV   r7   r   r%   nannb_iter)r/   r0   r1   r2   r4   r)   r)   r*   test_tricky_B   sH                

zTestPlacePoles.test_tricky_Bc                 C   s$  t ddddddddddddddddgdd}t ddddddddg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h}t
d t||dddd}tt|dk tt|d jt tdt|d jk t|jd W 5 Q R X 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 )!Nr   rY   rZ   rF   r[   rJ   ) 皙ffffff333333ZfoorP   )rz   r{   r|   r}   r\   )rz   r{   r|   *   r%   irc   )rr   rr   rr   rr   )rF   rF   )rF   rJ   )r[   rJ   rT   rF   T)recordalways)r]   rr   r\   rs   gؗҜ<)r%   rd   r]   z4Convergence was not reached after maxiter iterations)r_   r^                @rr   rT   )rr   r\   rs   )r_   r^   r   y             rO   )r   rU   rV   assert_raisesr#   r   Znewaxisrt   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr$   messager   rx   )r/   r0   r1   wr4   r)   r)   r*   test_errors   sV    2"
 
  
 zTestPlacePoles.test_errorsN)__name__
__module____qualname__r7   rX   ru   ry   r   r)   r)   r)   r*   r,   &   s
   P"r,   c                   @   sD   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r/   pqrr)   r)   r*   check_matrix_shapes  s     zTestSS2TF.check_matrix_shapesc                 C   s"   dD ]\}}}|  ||| qd S )N))rT   rT   rT   )r[   rT   rT   )r[   r[   r[   )r   r   r)   r)   r*   test_shapes  s    zTestSS2TF.test_shapesc           	      C   s   t dddg}t dddg}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      ?      @      @       @rr   r\   r[   r   vIh%<=r   rJ   +=)r   rU   r	   r   r   )	r/   bar0   r1   CDZbbZ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)rJ   r[   r   r   r   rJ   r[   rf   )r	   r   r   r/   tfr0   r1   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 dddgdddggdddg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|dddgdddggdd t|dddgdd dddgdddggdddd	gf}t | \}}}}t|dd
dgdddgdddggdd t|dgdgdggdd t|dddgdddggdd t|dgdggdd t||||\}}t|ddddgddddggdd t|dddd	g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dddggtddddg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|ddd
gdddggdd t|dddgdd d S )Nr[   rJ   rr   r   r   r   r]   rT   rF   r\   rs   )Zdtypere   ighe99irf   r   )r	   r   r   r   rU   objectr   r)   r)   r*   test_simo_round_trip4  sZ     &"&zTestSS2TF.test_simo_round_tripc                 C   s   dddgdddgdddgg}dgdgdgg}dddgg}dgg}t ||||\}}t|dddd	ggd
dd t|ddddgd
d d S )Nr   r[   r\   rs   rr   rf           r   r   r   r   r%   r&   r         @r   r   )r   r   )r/   r0   r1   r   r   r   r   r)   r)   r*   test_all_int_arraysm  s    zTestSS2TF.test_all_int_arraysc              	   C   s4  t ddddgddddgddddgdddd	gg}t d
gdgdgdgg}t ddddgddddgddddg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   g      r   g       g       @r   333333?g      @r   r[   rJ   r   r   r   r   )r   rU   r   r   Zvstack)r/   r0   r1   r   r   Zb_allr   Zb0Za0Zb1Za1Zb2Z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                   @   sD   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 )TestLsimc              	   G   s(   t  }|t t| }W 5 Q R X |S N)r   filterr   r   )r/   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   rf   X0r   r   linspace
zeros_liker   expr   r/   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   rf         ?rJ   )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   rf   r   rJ   )	r   r   r   r   	ones_liker   Z	transposerU   r   )r/   r0   r1   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   )r/   r0   r1   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   r[   rJ   r   r   e   r   r[   )	r   rU   r   r   r   r   r   r   r   )r/   r0   r1   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   r[   rJ   r   r   )r/   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                   @   s<   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   rb     r   r   r   r   r   r
   r   r   r/   r   r   r   r   r   r   r   r)   r)   r*   test_01  s    
zTest_lsim2.test_01c                 C   sp   t ddddg}t ddddg}dgddgf}t|||dgd\}}}t d|}t|d d df | d S )Nr   r   r   r   r   )r   rU   r
   maximumr   r   r)   r)   r*   test_02  s    zTest_lsim2.test_02c                 C   s   t ddddddg}t ddddddg}dgddgf}t|||dd\}}}t ddddddg}t|d d df | d S )	Nr   r   g?r   {Gz?)Zhmax皙?r   )r   rU   r
   r   r   r)   r)   r*   test_03  s    zTest_lsim2.test_03c                 C   sp   t ddd}t |}dgdddgf}t|||ddgd\}}}d| t |  }t|d d df | d S )Nr   rb   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 0}|t t||||f|ddgd	\}}}	W 5 Q R X 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   r[   )
r   rU   r   r   r   r   r   r
   r   r   )r/   r0   r1   r   r   r   r   r   r   r   r   r   r   r)   r)   r*   test_05  s    

*
zTest_lsim2.test_05c                 C   sT   dgdddg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   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   r/   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   r/   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dddgf}|  |\}}|t|  }t|| d S )Nr   r   r   r   r)   r)   r*   r   q  s    z_TestImpulseFuncs.test_06c                 C   sF   dgdddgf}| j |dgddgd\}}| j |dgdgd\}}d S )Nr   r   rT   rf   re   r   r   r   r/   r   r   r   r)   r)   r*   test_array_likez  s    z!_TestImpulseFuncs.test_array_likec                 C   s(   dgdddgf}| j |ddd\}}d S )Nr   r   rT   rf   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                   @   s   e Zd Zdd ZdS )TestImpulse2c                 C   s
   t | _d S r   )r   r   r/   r)   r)   r*   setup_method  s    zTestImpulse2.setup_methodNr   r   r   r   r)   r)   r)   r*   r     s   r   c                   @   s   e Zd Zdd ZdS )TestImpulsec                 C   s
   t | _d S r   )r   r   r   r)   r)   r*   r     s    zTestImpulse.setup_methodNr   r)   r)   r)   r*   r     s   r   c                   @   sD   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 )_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   r[   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   r[   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   sD   dgdddgf}|  |\}}dd| t|   }t|| d S )Nr   r   r[   r   r   r)   r)   r*   r     s    z_TestStepFuncs.test_06c                 C   s*   dgdddgf}| j |ddgd\}}d S )Nr   r   rf   re   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                   @   s   e Zd Zdd Zdd ZdS )	TestStep2c                 C   s
   t | _d S r   )r   r   r   r)   r)   r*   r     s    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     s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestStepc                 C   s
   t | _d S r   )r   r   r   r)   r)   r*   r     s    zTestStep.setup_methodc                 C   s   t g dgdf d S )Nr]   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     s   r   c                   @   s   e Zd Zdd ZdS )TestLtic                 C   s   t dgdg}tt|t tt|t  tt|t  t|jd k t tg tdgd}tt|t tt|t  tt|t  t|jd k t g dgd}t dgdgdd}tt|t	 tt|t  tt|t  t|jd k d S )Nr[   r]   rT   )
r   r   
isinstancer   r   dtr   rU   r   r   r/   sr)   r)   r*   test_lti_instantiation  s     zTestLti.test_lti_instantiationN)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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 )Nr[   rJ   rT   rF   r   )r   r   rU   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 ||k	 t| |k	 d S )Nr[   rJ   rT   rF   )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 k d S Nr[   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 ]}	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 5 Q R X qtt|d ||dd t|d| |dd  tt|| ||dd t|t|||dd |dd dd tt ||  W 5 Q R X tt ||  W 5 Q R X tt ||  W 5 Q R X tt ||   W 5 Q R X tt | |  W 5 Q R X tt ||   W 5 Q R X tt | |  W 5 Q R X tt|d ||dd d| t|||dd   tt |tddg  W 5 Q R X tt tddg|  W 5 Q R X tt ||  W 5 Q R X tt  |tddgddgg  W 5 Q R X tt ||  W 5 Q R X tt ||   W 5 Q R X tt | |  W 5 Q R X 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 5 Q R X tt | |  W 5 Q R X || }
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  rL   gffffff?r   gr[   r   rK   gg?r   g?d   rJ   )Ur   gh㈵>)r&   rT   rF   rr   )r   r   rU   Zto_discreter   r   intfloatcomplexZfloat32Z
complex128r   r   r   	TypeErrorr#   r   r  )r/   r  s1s2Z
s_discreteZs2_discreteZ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 Nr[   rJ   )r   r   rU   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 ||k	 t| |k	 d S Nr[   r   r]   )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 r  )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                   @   s   e Zd Zdd Zdd ZdS )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   rU   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 ||k	 t| |k	 d S )Nr[   rJ   rT   )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*   r    s   r  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   rU   r0   r1   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 )Nr[   r]   )r   r#   r   r1   r   r   r   r)   r)   r*   test_A_nosquare_fails  s
      z)Test_abcd_normalize.test_A_nosquare_failsc                 C   s    t tt| jddg| j| j d S Nr]   rf   r   r#   r   r0   r   r   r   r)   r)   r*   test_AB_mismatch_fails  s     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   r0   r1   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 )Nr  r   )r   r#   r   r0   r1   r   r   r)   r)   r*   test_CD_mismatch_fails  s     z*Test_abcd_normalize.test_CD_mismatch_failsc                 C   s    t tt| jddg| j| j d S r"  r#  r   r)   r)   r*   test_BD_mismatch_fails  s     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   r0   r1   r   r   r   r/   r0   r1   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   r0   r1   r   r   r(  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rJ   r   )r   r   r0   r1   r   r   r[   r   r   r   r0   r   r   )r/   B_ZD_r0   r1   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 )Nr*  )r   rJ   r0   r1   r   r   r[   r,  )r/   r-  ZC_r0   r1   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)r1   r   r   r   r[   )r   r1   r   r   r   r   r(  r)   r)   r*   test_missing_A  s    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)r0   r   r   r   r[   )r   r0   r   r   r   r   r(  r)   r)   r*   test_missing_B  s    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 )Nr+  r   r[   )r   r0   r1   r   r   r   r(  r)   r)   r*   test_missing_C$  s    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 )Nr/  r   r[   )r   r0   r1   r   r   r   r(  r)   r)   r*   test_missing_D*  s    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   r[   )r   r   r   r   r   r(  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)r1   r   r   r[   )r   r1   r   r   r   r(  r)   r)   r*   test_missing_AC8  s     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)r1   r   r   r[   )r   r1   r   r   r   r(  r)   r)   r*   test_missing_ADA  s     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)r0   r   r   r[   )r   r0   r   r   r   r(  r)   r)   r*   test_missing_BCJ  s     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   s   t tt| j| jd d S )N)r0   r   )r   r#   r   r0   r   r   r)   r)   r*   test_missing_BD_failsV  s    z)Test_abcd_normalize.test_missing_BD_failsc                 C   s   t tt| j| jd d S )N)r0   r1   )r   r#   r   r0   r1   r   r)   r)   r*   test_missing_CD_failsY  s    z)Test_abcd_normalize.test_missing_CD_failsN)r   r   r   r   r   r!  r$  r%  r&  r'  r)  r   r.  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r)   r)   r)   r*   r    s,   

			r  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   sL   t dgddg}ddddg}t||d\}}}dddd	g}t||dd
 d S )Nr[   r   rb   r  r   r   r\   rh   rn   decimalr   r   r   )r/   r   r   magphaseexpected_magr)   r)   r*   r   _  s
    zTest_bode.test_01c                 C   sH   t dgddg}dddg}t||d\}}}dddg}t||dd d S )	Nr[   r   rb   r=  gig33333Ur>  r@  )r/   r   r   rA  rB  expected_phaser)   r)   r*   r   m  s
    

zTest_bode.test_02c                 C   sr   t dgddg}ddddg}t||d\}}}|d }t|j|t|j| }dtt| }t|| d S )Nr[   r   rb   r  r=                ?g      4@)	r   r   r   polyvalr   r   log10absr   )r/   r   r   rA  rB  jwr   rC  r)   r)   r*   r   y  s    zTest_bode.test_03c                 C   sz   t dgddg}ddddg}t||d\}}}|d }t|j|t|j| }t|j|jd tj	 }t
|| d S )Nr[   r   rb   r  r=  rE  g     f@)r   r   r   rF  r   r   Zarctan2r!   r    pir   )r/   r   r   rA  rB  rI  r   rD  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 Nr[   rb   rr   r   )r   r   logspacer   r   )r/   r   r   
expected_wr   rA  rB  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 Nr[   r   rJ   rL  r   )r   r   r   r/   r   r   rA  rB  r)   r)   r*   r     s    zTest_bode.test_06c                 C   s(   t dgdddg}t|dd\}}}d S )Nr[   r   r  rJ   rL  )r   r   rP  r)   r)   r*   test_07  s    zTest_bode.test_07c                 C   sH   t g dddddgd}|jtddd	d
\}}}tt|ddd d S )Nra   ri   rn   ro   rp   r[   r\   rj   r  r=  i>   r>  )r   r   r   rM  r   minrP  r)   r)   r*   test_08  s    zTest_bode.test_08c              	   C   s   t ddddg}t|j}t dgdgdgg}t dddgg}t dgg}t 0}|t t||||}t	|dd\}}	}
W 5 Q R X dt 
t dd|d    }t|	| d S )Nr   r   r   r  rL     re   )r   rU   r-   	companionr   r   r   r   r   r   rG  sqrtr   )r/   r   r0   r1   r   r   r   r   r   rA  rB  Z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   rQ  rT  rX  r)   r)   r)   r*   r<  ]  s   
r<  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S )Test_freqrespc                 C   sb   t dgddg}dddg}t||d\}}dddg}dd	dg}t|j|dd
 t|j|dd
 d S )Nr[   r   rb   r=  gGz?r   gׁsF?gMbXrL   r>  r   r   r   r    r!   )r/   r   r   HZexpected_reZexpected_imr)   r)   r*   test_output_manual  s    


z Test_freqresp.test_output_manualc                 C   sp   t dgddg}ddddg}t||d\}}|d }t|j|t|j| }t|j|j t|j|j d S )Nr[   r   rb   r  r=  rE  )	r   r   r   rF  r   r   r   r    r!   r/   r   r   r[  r  r5   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 rK  )r   r   rM  r   r   )r/   r   r   rN  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 rO  )r   r   r   )r/   r   r   r[  r)   r)   r*   test_pole_zero  s    zTest_freqresp.test_pole_zeroc              	   C   s   t ddddg}t|j}t dgdgdgg}t dddgg}t dgg}t .}|t t||||}t	|dd\}}	W 5 Q R X |d }
ddd|
  d|
d   |
d   }t
|	j|j t
|	j|j d S )	Nr   r   r   r  rL  rE  rJ   rT   )r   rU   r-   rV  r   r   r   r   r   r   r   r    r!   )r/   r   r0   r1   r   r   r   r   r   r[  r  r5   r)   r)   r*   rX    s    
$z#Test_freqresp.test_from_state_spacec                 C   sh   t g dgd dg}ddddg}t||d\}}|d }d|d d  }t|j|j t|j|j d S )	Nr]   rF   r[   r   rb   r  r=  rE  rZ  r]  r)   r)   r*   test_from_zpk  s    zTest_freqresp.test_from_zpkN)	r   r   r   r\  r^  r_  r`  rX  ra  r)   r)   r)   r*   rY    s   
rY  )r   r   )6r   Znumpyr   Znumpy.testingr   r   r   r   r   Zpytestr   r   Zscipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscipy.signal._filter_designr   Zscipy.linalgr-   Zscipy.sparse._sputilsr   r+   r,   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r<  rY  r)   r)   r)   r*   <module>   s:   L
 Z UKIC  d