a
    Re{                     @   s  d dl mZ d dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z" d dl#m$Z$ d/d	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e.Z/G dd  d e.Z0G d!d" d"Z1G d#d$ d$Z2G d%d& d&Z3G d'd( d(Z4G d)d* d*Z5G d+d, d,Z6G d-d. d.Z7dS )0    )abstractmethodN)assert_almost_equalassert_equalassert_allcloseassert_suppress_warnings)raises)warns)ss2tftf2sslsim2impulse2step2ltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients: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*   R/var/www/sunrise/env/lib/python3.9/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    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 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    n1 s0    Y  d S )NgGz?gʿg\(@gNbX9g<,Ԛg)\(r   g?gOn?d;O@gV-gOn@g~jt?r:   grh|?gE    )r   K@V-?r=   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodZYTignore)invalid)r?   r?      rH   )r    arrayreshaper8   errstate)r0   r1   r2   r3   r*   r*   r+   	test_real5   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 s0    Y  g d	}t jddd" | j|||d
d W d    n1 s0    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 s0    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 s0    Y  t g d}t jddd | ||| W d    n1 s0    Y  d S )N)r      r   r   )r   r   r   竪@)r   r   r   r   r      )                          ?rF   )dividerG   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiir?   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   r[   r[   )r[   rV   rV   )rU   (   2   <   F   y      4      y      4      @y      @      @y      @      )
rU   r\   r]   iiiirQ   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rM   r   r   r   r   r   rN   r   r   r   r   r   r   r   r   r   r   r   rZ   r   r   r   r   	   )
r   r   r   r   rO   r   r   rO   r?   rH   r?   )y            ?y                        ?            )rf   rP   rg   rh   )	r    rI   rK   r8   rJ   onesZeyeZdiagr   )r0   r1   r2   r3   Zbig_AZbig_Br*   r*   r+   test_complexK   sb    

,0,...,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 )Nr9   r;   )r   r<   r=   r=   r   r   r>   r   rO   r?   rH   r;   rZ   rY   rM      r@   )rS   rR   rP   rf   r   rO   )r    rI   rJ   r8   r   r&   nannb_iter)r0   r1   r2   r3   r5   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r}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 s0    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   rM   r   r   r   r   r   rN   r   r   r   r   r   r   r   r   r;   )r   r   r   r   rO   r   r   rO   r?   ) 皙ffffff333333ZfoorD   rO   )rp   rq   rr   rs   rP   )rp   rq   rr   *   r&   irW   )rf   rf   rf   rf   )r;   r;   )r;   r?   rO   r?   rH   r;   T)recordalways)rQ   rf   rP   ri   gؗҜ<)r&   rX   rQ   z4Convergence was not reached after maxiter iterations)rS   rR                @rf   rH   )rf   rP   ri   )rS   rR   ry   y             rC   )r    rI   rJ   assert_raisesr$   r   Znewaxisrj   warningscatch_warningssimplefilterr   len
issubclasscategoryUserWarningr%   messager   rn   )r0   r1   r2   wr5   r*   r*   r+   test_errors   sR    


,  
zTestPlacePoles.test_errorsN)__name__
__module____qualname__r8   rL   rk   ro   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r0   pqrr*   r*   r+   check_matrix_shapes  s
    zTestSS2TF.check_matrix_shapesc                 C   s"   dD ]\}}}|  ||| qd S )N))rH   rH   rH   )rO   rH   rH   rO   rO   rO   )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   rf   rP   rO   r   vIh%<=ru   r?   +=)r    rI   r   r   r
   )	r0   bar1   r2   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)r?   rO   r   r   ru   r?   rO   rZ   )r   r   r
   r0   tfr1   r2   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 )NrO   r?   rf   r   ru   r   rQ   )rO   r   rO   r   )rO   r?   rH   rv   )rf   rP   ri   )rO   r   r   r   rO   r   )r   rO   r?   rH   rH   )ZdtyperY   ighe99irP   )rO   rY   rZ   rz   ri   )r   rO   rP   )r   r   r
   r    rI   objectr   r*   r*   r+   test_simo_round_trip5  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   rO   )rP   ri   rf   r   rO   )rZ   rO   r   )        r   r   r   r   r   r&   r'   )r   r         @r   ru   )r
   r   )r0   r1   r2   r   r   r   r   r*   r*   r+   test_all_int_arraysn  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   rO   r?   r   ru   r   r   )r    rI   r
   r   Zvstack)r0   r1   r2   r   r   Zb_allr   Zb0Za0b1Za1b2Za2r*   r*   r+   test_multioutputw  s4    

zTestSS2TF.test_multioutputN)
r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r      s   9	r   c                   @   s\   e Zd ZdZe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 )_TestLsimFuncsrM   c                 O   s   d S Nr*   r0   argsr4   r*   r*   r+   func  s    z_TestLsimFuncs.funcc                 G   s<   t  "}|t t| }W d    n1 s.0    Y  |S r   )r   filterr   r   )r0   r   supsystemr*   r*   r+   
lti_nowarn  s    
&z_TestLsimFuncs.lti_nowarnc                 C   sd   |  dddd}tdd}t|}| j|||dgd\}}}t| }t|| t|| d S Nr   r   r   r   rZ   X0r   r    linspace
zeros_liker   expr   r0   r   tutoutyx
expected_xr*   r*   r+   test_first_order  s    

z_TestLsimFuncs.test_first_orderc                 C   st   t ddd}t |}| dgg d}| j|||ddgd\}}}d| t |  }t|d d df | d S )Nr   rV   i  r   r   r   r   r   r   )r    r   r   r   r   r   r   r0   r   r   r   r   r   r   r   r*   r*   r+   test_second_order  s    
z _TestLsimFuncs.test_second_orderc                 C   sd   |  dddd}tdd}|}| |||\}}}d|d  }t||| jd t||| jd d S )Nr   r   r   rZ         ?r?   decimal)r   r    r   r   r   digits_accuracyr   r*   r*   r+   test_integrator  s    z_TestLsimFuncs.test_integratorc                 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	f}| j|||ddgd
\}}	}
t | }t | }t d| }t|	| t|
d d df | t|
d d df | d S )Nr   r          r   rO   r?   r   g      $@   r?   )UTr   rO   	r    rI   r   r   r   r   r   r   r   r0   r1   r2   r   r   r   r   r   r   r   r   
expected_yZexpected_x0Zexpected_x1r*   r*   r+   test_two_states  s    

z_TestLsimFuncs.test_two_statesc                 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 d|d  |g}
|d }t|	|
| jd t||| jd d S )	Nr   r   r   r   rZ   r   r?   r   )	r    rI   r   r   	ones_liker   Z	transposer   r   )r0   r1   r2   r   r   r   r   r   r   r   r   r   r*   r*   r+   test_double_integrator  s    
z%_TestLsimFuncs.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 |}| j|||ddgd\}}}	|t |  }
t||
 d S r   )r    rI   r   r   r   r   r   r   )r0   r1   r2   r   r   r   r   r   r   r   r   r*   r*   r+   test_jordan_block  s    
z _TestLsimFuncs.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	f}| j|||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   r   r   r   e   r?   r   rO   r   r   r*   r*   r+   	test_miso  s    

z_TestLsimFuncs.test_misoN)r   r   r   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d Zdd ZdS )TestLsimc                 O   s   t |i |S r   )r   r   r*   r*   r+   r     s    zTestLsim.funcc                 C   sZ   |  dddd}tdd}t|}| j|||dgd\}}}t| }t|| d S )Nr   r   r   rO   r?   r   r   )r0   r   r   r   r   r   r   r   r*   r*   r+   test_nonzero_initial_time  s    
z"TestLsim.test_nonzero_initial_timec                 C   st   t g d}t g d}dgddgf}ttdd* | j|||dgd\}}}W d    n1 sf0    Y  d S )Nr   r   r   r   r   r   r   r   r   r   z"Time steps are not equally spaced.matchr   )r    rI   r{   r$   r   )r0   r   r   r   r   r   r   r*   r*   r+   test_nonequal_timesteps  s    z TestLsim.test_nonequal_timestepsN)r   r   r   r   r   r   r*   r*   r*   r+   r     s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )	TestLsim2rY   c                 O   sV   t tdd$ t|i |\}}}W d    n1 s60    Y  |t|t|fS )Nzlsim2 is deprecatedr   )r	   DeprecationWarningr   r    Zsqueeze)r0   r   r4   r   r   r   r*   r*   r+   r   )  s    2zTestLsim2.funcc                 C   s^   t g d}t g d}dgddgf}| j|||dgd\}}}t d|}t|| d S )Nr   r   r   r   r   )r    rI   r   maximumr   r   r*   r*   r+   "test_integrator_nonequal_timestamp.  s    z,TestLsim2.test_integrator_nonequal_timestampc                 C   s^   t g d}t g d}dgddgf}| j|||dd\}}}t g d}t|| d S )N)r   r   r   皙?r   r   )r   r   r   r   r   r   r   r   {Gz?)Zhmax)r   r   r   皙?r   r   )r    rI   r   r   r   r*   r*   r+   (test_integrator_nonequal_timestamp_kwarg7  s    z2TestLsim2.test_integrator_nonequal_timestamp_kwargc                 C   sT   dgg df}| j |ddgd\}}}d| t|  }t|d d df | d S )Nr   r   r   r   r   r   r    r   r   )r0   r   r   r   r   r   r*   r*   r+   test_default_arguments@  s    z TestLsim2.test_default_argumentsN)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   r   r0   r   r   r   r   r*   r*   r+   r   N  s    z"_TestImpulseFuncs.test_first_orderc                 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   r0   r   nr   r   r   r   r*   r*   r+   test_first_order_fixed_timeV  s    
z-_TestImpulseFuncs.test_first_order_fixed_timec                 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+   test_first_order_initiald  s    z*_TestImpulseFuncs.test_first_order_initialc                 C   s@   dgddgf}| j |dgd\}}dt|  }t|| d S r   r   r   r*   r*   r+   test_first_order_initial_listn  s    z/_TestImpulseFuncs.test_first_order_initial_listc                 C   s4   dgddgf}|  |\}}t|}t|| d S Nr   r   )r   r    r   r   r   r*   r*   r+   r   x  s    
z!_TestImpulseFuncs.test_integratorc                 C   s:   dgg df}|  |\}}|t|  }t|| d S )Nr   r   r   r   r*   r*   r+   r     s    z#_TestImpulseFuncs.test_second_orderc                 C   sD   dgg df}| j |dgddgd\}}| j |dgdgd\}}d S )Nr   r   rH   rZ   rY   r   r   r   r0   r   r   r   r*   r*   r+   test_array_like  s    z!_TestImpulseFuncs.test_array_likec                 C   s&   dgg df}| j |ddd\}}d S )Nr   r   rH   rZ   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   K  s   

	r   c                   @   s   e Zd Zdd ZdS )TestImpulse2c                 O   s>   t tdd t|i |W  d    S 1 s00    Y  d S )Nzimpulse2 is deprecatedr   )r	   r   r   r   r*   r*   r+   r     s    zTestImpulse2.funcNr   r   r   r   r*   r*   r*   r+   r     s   r   c                   @   s   e Zd Zdd ZdS )TestImpulsec                 O   s   t |i |S r   )r   r   r*   r*   r+   r     s    zTestImpulse.funcNr   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_first_orderc                 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   rO   r   r   r*   r*   r+   r     s    
z*_TestStepFuncs.test_first_order_fixed_timec                 C   sB   dgddgf}| j |dd\}}ddt|   }t|| d S Nr   r   r   rO   r   r   r   r*   r*   r+   r     s    z'_TestStepFuncs.test_first_order_initialc                 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_first_order_initial_listc                 C   s.   dgddgf}|  |\}}|}t|| d S r   r   r   r   r*   r*   r+   r     s    z_TestStepFuncs.test_integratorc                 C   sB   dgg df}|  |\}}dd| t|   }t|| d S )Nr   r   rO   r   r   r*   r*   r+   r     s    z _TestStepFuncs.test_second_orderc                 C   s(   dgg df}| j |ddgd\}}d S )Nr   r   rZ   rY   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                 O   s>   t tdd t|i |W  d    S 1 s00    Y  d S )Nzstep2 is deprecatedr   )r	   r   r   r   r*   r*   r+   r     s    zTestStep2.funcc                 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_integratorN)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                 O   s   t |i |S r   r   r   r*   r*   r+   r     s    zTestStep.funcc                 C   s   t g dgdf d S )NrQ   y      ?        r  r0   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 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 )NrO   rQ   rH   )
r   r   
isinstancer   r   dtr    rI   r   r   r0   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 )NrO   r?   rH   r;   r   )r   r    rI   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 )NrO   r?   rH   r;   )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 NrO   r   )r   r   polesr   r   r  r  r*   r*   r+   test_properties0  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 d    q1 s0    Y  qt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 sZ0    Y  tt ||  W d    n1 s0    Y  tt ||  W d    n1 s0    Y  tt ||   W d    n1 s0    Y  tt | |  W d    n1 s&0    Y  tt ||   W d    n1 sZ0    Y  tt | |  W d    n1 s0    Y  tt|d ||dd d| t|||dd   tt" |tddg  W d    n1 s0    Y  tt" tddg|  W d    n1 s80    Y  tt ||  W d    n1 sj0    Y  tt* |tddgddgg  W d    n1 s0    Y  tt ||  W d    n1 s0    Y  tt ||   W d    n1 s0    Y  tt | |  W d    n1 sH0    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 sZ0    Y  tt | |  W d    n1 s0    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  rB   gffffff?r   grO   r   rA   gg?r   g?d   r?   )r   r   gh㈵>)r'   rH   r;   rf   )r   r    rI   Zto_discreter   r   intfloatcomplexfloat32Z
complex128r   r   r{   	TypeErrorr$   r   r  )r0   r  s1s2Z
s_discreteZs2_discreteZs3_discreter   r   typr  r*   r*   r+   test_operators:  s    




.
(
(
(
*
*
*
*
2
2
(
:
(
*
*""
*
*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 NrO   r?   )r   r    rI   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 NrO   r   rQ   )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    rI   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 )NrO   r?   rH   )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    rI   r1   r2   r   r   r  r*   r*   r+   setup_method  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 )NrO   rQ   )r{   r$   r   r2   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 NrQ   rZ   r{   r$   r   r1   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   r1   r2   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   r1   r2   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   r1   r2   r   r   r   r0   r1   r2   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   r1   r2   r   r   r3  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r?   r   )r   r   r1   r2   r   r   rO   r    r   r   r1   r   r   )r0   B_ZD_r1   r2   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 )Nr5  )r   r?   r1   r2   r   r   rO   r7  )r0   r8  ZC_r1   r2   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)r2   r   r   r   rO   )r   r2   r   r   r   r   r3  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)r1   r   r   r   rO   )r   r1   r   r   r   r   r3  r*   r*   r+   test_missing_B0  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 )Nr6  r   rO   )r   r1   r2   r   r   r   r3  r*   r*   r+   test_missing_C6  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   rO   )r   r1   r2   r   r   r   r3  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   rO   )r   r   r   r   r   r3  r*   r*   r+   test_missing_ABB  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)r2   r   r   rO   )r   r2   r   r   r   r3  r*   r*   r+   test_missing_ACJ  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)r2   r   r   rO   )r   r2   r   r   r   r3  r*   r*   r+   test_missing_ADS  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)r1   r   r   rO   )r   r1   r   r   r   r3  r*   r*   r+   test_missing_BC\  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_failse  s    z*Test_abcd_normalize.test_missing_ABC_failsc                 C   s   t tt| j| jd d S )N)r1   r   )r{   r$   r   r1   r   r  r*   r*   r+   test_missing_BD_failsh  s    z)Test_abcd_normalize.test_missing_BD_failsc                 C   s   t tt| j| jd d S )N)r1   r2   )r{   r$   r   r1   r2   r  r*   r*   r+   test_missing_CD_failsk  s    z)Test_abcd_normalize.test_missing_CD_failsN)r   r   r   r*  r+  r,  r/  r0  r1  r2  r4  r   r9  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  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   sD   t dgddg}g d}t||d\}}}g d}t||dd d S )NrO   r   rO   rV   r  r   )r   rP   r\   rb   r   r   r   r   )r0   r   r   magphaseexpected_magr*   r*   r+   test_01q  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 )NrO   r   rO   rV   rI  )gig33333Ur   rJ  )r0   r   r   rK  rL  expected_phaser*   r*   r+   test_02  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 )NrO   rH  rI                ?g      4@)	r   r   r    polyvalr   r   log10absr   )r0   r   r   rK  rL  jwr   rM  r*   r*   r+   test_03  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 )NrO   rH  rI  rR  g     f@)r   r   r    rS  r   r   Zarctan2r"   r!   pir   )r0   r   r   rK  rL  rV  r   rP  r*   r*   r+   test_04  s    zTest_bode.test_04c                 C   sB   t dgddg}d}tdd|}t||d\}}}t|| d S NrO   rV   rf   r   )r   r    logspacer   r   )r0   r   r   
expected_wr   rK  rL  r*   r*   r+   test_05  s
    zTest_bode.test_05c                 C   s4   t dgddg}t|dd\}}}t|d d d S NrO   r   r?   r[  r   )r   r   r   r0   r   r   rK  rL  r*   r*   r+   test_06  s    zTest_bode.test_06c                 C   s&   t dgg d}t|dd\}}}d S )NrO   )rO   r   r  r?   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)rU   r]   rb   rc   rd   rO   rP   r^   r  rI  i>   r   )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 s0    Y  dt 
t dd|d    }t|	| d S )	Nr   r   r   r   r   r   r   r   r   r  r[     rY   )r    rI   r.   	companionr   r   r   r   r   r   rT  sqrtr   )r0   r   r1   r2   r   r   r   r   r   rK  rL  Zexpected_magnituder*   r*   r+   test_from_state_space  s    
0 zTest_bode.test_from_state_spaceN)r   r   r   rN  rQ  rW  rY  r^  ra  rb  re  rk  r*   r*   r*   r+   rG  o  s   
rG  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   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 )NrO   rO  rI  )gGz?r   gׁsF?)MbXrB   rm  r   r   r   r   r!   r"   )r0   r   r   HZexpected_reZ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 )NrO   rH  rI  rR  )	r   r   r    rS  r   r   r   r!   r"   r0   r   r   ro  r  r6   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 rZ  )r   r    r\  r   r   )r0   r   r   r]  r   ro  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   )r0   r   r   ro  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 8}|t t||||}t	|dd\}}	W d    n1 s0    Y  |d }
ddd|
  d|
d   |
d	   }t
|	j|j t
|	j|j d S )
Nrf  r   r   rg  r  r[  rR  r?   rH   )r    rI   r.   ri  r   r   r   r   r   r   r   r!   r"   )r0   r   r1   r2   r   r   r   r   r   ro  r  r6   r*   r*   r+   rk    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 )NrQ   r;   rO   rH  rI  rR  rn  rq  r*   r*   r+   test_from_zpk  s    zTest_freqresp.test_from_zpkN)	r   r   r   rp  rr  rs  rt  rk  ru  r*   r*   r*   r+   rl    s   
rl  )r   r   )8abcr   r|   numpyr    Znumpy.testingr   r   r   r   r   Zpytestr   r{   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.   r,   r-   r   r   r   r   r   r   r  r  r  r  r
  r  r$  r'  r(  rG  rl  r*   r*   r*   r+   <module>   s>   L
 Z q%IC  d