o
    ?Hh                     @   sR  d dl Z d dlZd dlmZ d dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d"d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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!Z+dS )#    N)suppress_warnings)raises)assert_almost_equalxp_assert_equalxp_assert_close)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficients: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/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_close   s    r*   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zejj	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?r<   grh|?gE    )r   K@V-?r?   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rA   rA      rK   )r   arrayreshaper:   errstate)r2   r3   r4   r5   r(   r(   r)   	test_real6   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      )                          ?rI   )dividerJ   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirA   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^   rY   rY   )rX   (   2   <   F   y      4      y      4      @y      @      @y      @      )
rX   r_   r`   iiiirT   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rP   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r   r   r   r]   r   r   r   r   	   )
r   r   r   r   rR   r   r   rR   rA   rK   rA   )y            ?y                        ?            )ri   rS   rj   rk   )	r   rL   rN   r:   rM   oneseyediagr   )r2   r3   r4   r5   big_Abig_Br(   r(   r)   test_complexL   sl   

,..$zTestPlacePoles.test_complexc                 C   s   t g ddd}t g ddd}t g d}| |||}t |js,J t |js4J t d}| |||}t |jsHJ t |jsPJ |d d df dd}t d}| |||}|jdksoJ |jdksvJ d S )Nr;   r=   )r   r>   r?   r?   r   r   r@   r   rR   rA   rK   r=   r]   r\   rP      rB   )rV   rU   rS   ri   r   rR   )r   rL   rM   r:   isnanr#   nb_iter)r2   r3   r4   r5   r7   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:}t
d t||dddd}t|dksJ t|d jtsJ dt|d jv sJ |jdksJ 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   rP   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r   r=   )r   r   r   r   rR   r   r   rR   rA   ) 皙ffffff333333foorF   rR   )rw   rx   ry   rz   rS   )rw   rx   ry   *   r#   irZ   )ri   ri   ri   ri   )r=   r=   )r=   rA   rR   rA   rK   r=   T)recordalways)rT   ri   rS   rl   gؗҜ<)r#   r[   rT   z4Convergence was not reached after maxiter iterations)rV   rU                @ri   rK   )ri   rS   rl   )rV   rU   r   y             rE   )r   rL   rM   assert_raisesr   r   newaxisrm   warningscatch_warningssimplefilterlen
issubclasscategoryUserWarningr    messageru   )r2   r3   r4   wr7   r(   r(   r)   test_errors   sT   



  

zTestPlacePoles.test_errorsN)__name__
__module____qualname__r:   rO   rr   rv   pytestmarkthread_unsafer   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r2   pqrr(   r(   r)   check_matrix_shapes  s
   zTestSS2TF.check_matrix_shapesc                 C   s"   dD ]\}}}|  ||| qd S )N))rK   rK   rK   )rR   rK   rK   rR   rR   rR   )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          rS   rR   r   vIh%<=r}   r   rA   +=)r   rL   r   r   r   )	r2   bar3   r4   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)rA   rR           r   r}   r   r   r   r]   rA   rR   r   )r   r   r   r2   tfr3   r4   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 )%NrR   rA   r   r   r}   r   r         r   )rR   r   rR   r   )r   r   r   )r   r   r   )rR   rA   rK   r~   )r   rS   rl   )rR   r   r   r   rR   r   r   )r   rA   rK   )r   rR   rA   rK   )r   rR   rA   rK   )r   rA   rK   r=   rK   )dtyper\   g      ghe99irS   )rR   r\   r]   r   rl   ri   )r   rR   rS   )r   r\   r]   )r   r   r   r   rL   objectr   r(   r(   r)   test_simo_round_trip7  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   rR   )rS   rl   ri   r   rR   )r]   rR   r   )r   r   r   r   r   r   r#   r$   )r   r         @r   r}   )r   r   )r2   r3   r4   r   r   r   r   r(   r(   r)   test_all_int_arraysp  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   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   rR   rA   r   r}   r   r   )r   rL   r   r   vstack)r2   r3   r4   r   r   b_allr   b0a0b1a1b2a2r(   r(   r)   test_multioutputy  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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 )TestLsimrP   c                 G   s>   t  }|t t| }W d    |S 1 sw   Y  |S N)r   filterr   r	   )r2   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   r]   X0r   r   linspace
zeros_liker   expr   r2   r   tutoutyx
expected_xr(   r(   r)   test_first_order  s   

zTestLsim.test_first_orderc                 C   sr   t ddd}t |}| dgg d}t|||ddgd\}}}d| t |  }t|d d df | d S )Nr   rY   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r2   r   r   r   r   r   r   r   r(   r(   r)   test_second_order  s   
zTestLsim.test_second_orderc                 C   sb   |  dddd}tdd}|}t|||\}}}d|d  }t||| jd t||| jd d S )Nr   r   r   r]         ?rA   decimal)r   r   r   r   r   digits_accuracyr   r(   r(   r)   test_integrator  s   zTestLsim.test_integratorc                 C      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}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   rR   rA   r   g      $@   rA   )UTr   rR   	r   rL   r   r   r   r   r   r   r   r2   r3   r4   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1r(   r(   r)   test_two_states  s   

zTestLsim.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 t d|d  |g}
|d }t|	|
| jd t||| jd d S )	Nr   r   r   r   r]   r   rA   r   )	r   rL   r   r   	ones_liker   	transposer   r   )r2   r3   r4   r   r   r   r   r   r   r   r   r   r(   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   rL   r   r   r   r   r   r   )r2   r3   r4   r   r   r   r   r   r   r   r   r(   r(   r)   test_jordan_block  s   
zTestLsim.test_jordan_blockc                 C   r   )Nr   r   r   r   r   r   r   e   rA   r   rR   r   r   r(   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   rR   rA   r   r   )r2   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 t|||dgd\}}}W d    d S 1 s3w   Y  d S )N)r   r   r   r   )r   r   r   r   r   r   z"Time steps are not equally spaced.)matchr   )r   rL   r   r   r   )r2   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   r   r   r   r(   r(   r(   r)   r     s    
r   c                   @   L   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 )TestImpulsec                 C   s4   dgddgf}t |\}}t| }t|| d S Nr   r   r   r   r   r2   r   r   r   r   r(   r(   r)   r     s   zTestImpulse.test_first_orderc                 C   sd   dgddgf}d}t dd|}t||d\}}|j|fks J t|| t | }t|| d S )Nr   r   r   r   r   )r   r   r   r   r   r   r2   r   nr   r   r   r   r(   r(   r)   test_first_order_fixed_time'  s   
z'TestImpulse.test_first_order_fixed_timec                 C   s<   dgddgf}t |dd\}}dt|  }t|| d S Nr   r   r   r   r   r   r(   r(   r)   test_first_order_initial5  s   z$TestImpulse.test_first_order_initialc                 C   s>   dgddgf}t |dgd\}}dt|  }t|| d S r   r   r   r(   r(   r)   test_first_order_initial_list?  s   z)TestImpulse.test_first_order_initial_listc                 C   s2   dgddgf}t |\}}t|}t|| d S Nr   r   )r   r   r   r   r   r(   r(   r)   r   I  s   
zTestImpulse.test_integratorc                 C   s8   dgg df}t |\}}|t|  }t|| d S )Nr   r   r   r   r(   r(   r)   r   P  s   zTestImpulse.test_second_orderc                 C   s@   dgg df}t |dgddgd\}}t |dgdgd\}}d S )Nr   r   rK   r]   r\   r   r   r   r2   r   r   r   r(   r(   r)   test_array_likeY  s   zTestImpulse.test_array_likec                 C   s$   dgg df}t |ddd\}}d S )Nr   r   rK   r]   r  r  r  r(   r(   r)   test_array_like2`  s   zTestImpulse.test_array_like2N)r   r   r   r   r   r   r  r   r   r  r  r(   r(   r(   r)   r     s    

	r   c                   @   r   )TestStepc                 C   s8   dgddgf}t |\}}dt|  }t|| d S r   r   r   r   r   r   r(   r(   r)   r   f  s   zTestStep.test_first_orderc                 C   sh   dgddgf}d}t dd|}t||d\}}|j|fks J t|| dt |  }t|| d S )Nr   r   r   r   r   rR   )r   r   r   r   r   r   r   r(   r(   r)   r   n  s   
z$TestStep.test_first_order_fixed_timec                 C   s@   dgddgf}t |dd\}}ddt|   }t|| d S Nr   r   r   rR   r   r	  r   r(   r(   r)   r   |  s   z!TestStep.test_first_order_initialc                 C   sB   dgddgf}t |dgd\}}ddt|   }t|| d S r
  r	  r   r(   r(   r)   r    s   z&TestStep.test_first_order_initial_listc                 C   s,   dgddgf}t |\}}|}t|| d S r  )r   r   r   r(   r(   r)   r     s   zTestStep.test_integratorc                 C   s@   dgg df}t |\}}dd| t|   }t|| d S )Nr   r   rR   r	  r   r(   r(   r)   r     s   zTestStep.test_second_orderc                 C   s&   dgg df}t |ddgd\}}d S )Nr   r   r]   r\   r   r   r  r(   r(   r)   r    s   zTestStep.test_array_likec                 C   s   t g dgdf d S )NrT   y      ?        r  r2   r(   r(   r)   test_complex_input  s   zTestStep.test_complex_inputN)r   r   r   r   r   r   r  r   r   r  r  r(   r(   r(   r)   r  e  s    

	r  c                   @   s   e Zd Zdd ZdS )TestLtic                 C   s   t dgdg}t|tsJ t|t sJ t|trJ |jd u s#J t tg tdgd}t|ts7J t|t s>J t|trEJ |jd u sLJ t g dgd}t dgdgdd}t|tscJ t|t sjJ t|trqJ |jd u sxJ d S )NrR   rT   rK   )	r	   
isinstancer   r
   dtr   rL   r   r   r2   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 )NrR   rA   rK   r=   r   )r   r   rL   r  r(   r(   r)   test_initialization  s
   &z"TestStateSpace.test_initializationc                 C   sh   t dddd}t| t sJ t| tsJ t| ts"J t ||us*J | |us2J d S )NrR   rA   rK   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 |jd u sJ d S )NrR   r   r   )r   r   polesr   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  || }
|
jdksWJ || }
|
jdkscJ d| }
|
jdksoJ | }
|
jdkszJ 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  rD   gffffff?r   grR   r   rC   gg?皙?g?d   rA   )r   r   gh㈵>)r$   rK   r=   ri   )r   r   rL   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr   r  )r2   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 NrR   rA   )r   r   rL   r  r(   r(   r)   r  h  s   
z(TestTransferFunction.test_initializationc                 C   sl   t ddgddg}t| tsJ t| t sJ t| ts$J t ||us,J | |us4J d S )NrR   r   rT   )r   r  r  r   r  r  r   r  r(   r(   r)   r  n  s   z$TestTransferFunction.test_conversionc                 C   s2   t ddgddg}t|jdg t|jdg d S )NrR   r   rT   r   r   )r   r   r  r   r  r(   r(   r)   r  y  s   z$TestTransferFunction.test_propertiesN)r   r   r   r  r  r  r(   r(   r(   r)   r-  g  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   rL   r  r(   r(   r)   r    s    z&TestZerosPolesGain.test_initializationc                 C   sf   t ddd}t| tsJ t| tsJ t| t s!J t ||us)J | |us1J d S )NrR   rA   rK   )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   rL   r3   r4   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 )NrR   rT   )r   r   r   r4   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 NrT   r]   r   r   r   r3   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   r3   r4   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 )Nr1  r   )r   r   r   r3   r4   r   r  r(   r(   r)   test_CD_mismatch_fails  s   
z*Test_abcd_normalize.test_CD_mismatch_failsc                 C   r5  r6  r7  r  r(   r(   r)   test_BD_mismatch_fails  r9  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   r3   r4   r   r   r   r2   r3   r4   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 )NrR   r   )r   r3   r4   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|| |jd |jd ks2J |jd | jjd ks?J d S )NrA   r   )r   r   r3   r4   r   r   rR   r   r   r   r3   r   r   )r2   B_D_r3   r4   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|| |jd |jd ks2J |jd |jd ks>J d S )Nr?  )r   rA   r3   r4   r   r   rR   rA  )r2   rB  C_r3   r4   r   r   r(   r(   r)    test_zero_dimension_is_not_none2  s   



z4Test_abcd_normalize.test_zero_dimension_is_not_none2c                 C   sr   t | j| j| jd\}}}}|jd |jd ksJ |jd |jd ks&J |j| jjd | jjd fks7J d S )N)r4   r   r   r   rR   )r   r4   r   r   r   r=  r(   r(   r)   test_missing_A     &z"Test_abcd_normalize.test_missing_Ac                 C   sr   t | j| j| jd\}}}}|jd |jd ksJ |jd |jd ks&J |j| jjd | jjd fks7J d S )N)r3   r   r   r   rR   )r   r3   r   r   r   r=  r(   r(   r)   test_missing_B  rI  z"Test_abcd_normalize.test_missing_Bc                 C   sr   t | j| j| jd\}}}}|jd |jd ksJ |jd |jd ks&J |j| jjd | jjd fks7J d S )Nr@  r   rR   )r   r3   r4   r   r   r=  r(   r(   r)   test_missing_C  rI  z"Test_abcd_normalize.test_missing_Cc                 C   sr   t | j| j| jd\}}}}|jd |jd ksJ |jd |jd ks&J |j| jjd | jjd fks7J d S )NrE  r   rR   )r   r3   r4   r   r   r=  r(   r(   r)   test_missing_D  rI  z"Test_abcd_normalize.test_missing_Dc                 C   s   t | j| jd\}}}}|jd |jd ksJ |jd |jd ks$J |jd |jd ks0J |j| jjd | jjd fksAJ |j| jjd | jjd fksRJ d S )N)r   r   r   rR   )r   r   r   r   r=  r(   r(   r)   test_missing_AB  s   "&z#Test_abcd_normalize.test_missing_ABc                 C   s   t | j| jd\}}}}|jd |jd ksJ |jd |jd ks$J |jd |jd ks0J |jd |jd ks<J |j| jjd | jjd fksMJ |j| jjd | jjd fks^J d S )N)r4   r   r   rR   )r   r4   r   r   r=  r(   r(   r)   test_missing_AC     "&z#Test_abcd_normalize.test_missing_ACc                 C   s   t | j| jd\}}}}|jd |jd ksJ |jd |jd ks$J |jd |jd ks0J |jd |jd ks<J |j| jjd | jjd fksMJ |j| jjd | jjd fks^J d S )N)r4   r   r   rR   )r   r4   r   r   r=  r(   r(   r)   test_missing_AD   rO  z#Test_abcd_normalize.test_missing_ADc                 C   s   t | j| jd\}}}}|jd |jd ksJ |jd |jd ks$J |jd |jd ks0J |jd s<J |jd |j| jjd | jjd fksMJ |j| jjd | jjd fks^J d S )N)r3   r   r   rR   )r   r3   r   r   r=  r(   r(   r)   test_missing_BC	  rO  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_fails  s   z*Test_abcd_normalize.test_missing_ABC_failsc                 C      t tt| j| jd d S )N)r3   r   )r   r   r   r3   r   r  r(   r(   r)   test_missing_BD_fails     z)Test_abcd_normalize.test_missing_BD_failsc                 C   rS  )N)r3   r4   )r   r   r   r3   r4   r  r(   r(   r)   test_missing_CD_fails  rU  z)Test_abcd_normalize.test_missing_CD_failsN)r   r   r   r2  r3  r4  r8  r:  r;  r<  r>  r   rD  rG  rH  rJ  rK  rL  rM  rN  rP  rQ  rR  rT  rV  r(   r(   r(   r)   r0    s.    

			r0  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 )NrR   r  rR   rY   r  r   )r   rS   r_   re   r   r	   r   r   )r2   r   r   magphaseexpected_magr(   r(   r)   test_01  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 )NrR   r  rR   rY   rY  )gig33333Ur   rZ  )r2   r   r   r[  r\  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 )NrR   rX  rY                ?g      4@)	r	   r   r   polyvalr   r   log10absr   )r2   r   r   r[  r\  jwr   r]  r(   r(   r)   test_038  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 )NrR   rX  rY  rb  g     f@)r	   r   r   rc  r   r   arctan2r   r   pir   )r2   r   r   r[  r\  rf  r   r`  r(   r(   r)   test_04C  s   zTest_bode.test_04c                 C   sB   t dgddg}d}tdd|}t||d\}}}t|| d S NrR   rY   ri   r   )r	   r   logspacer   r   )r2   r   r   
expected_wr   r[  r\  r(   r(   r)   test_05N  s
   zTest_bode.test_05c                 C   s6   t dgddg}t|dd\}}}|d dksJ d S NrR   r   rA   rl  g{Gz?r	   r   r2   r   r   r[  r\  r(   r(   r)   test_06X  s   zTest_bode.test_06c                 C   s&   t dgg d}t|dd\}}}d S )NrR   )rR   r   r  rA   rl  rq  rr  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)rX   r`   re   rf   rg   rR   rS   ra   r  rY  i>   r   )r	   r   r   rm  r   minrr  r(   r(   r)   test_08e  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  rl     r\   )r   rL   r,   	companionr   r   r   r   r	   r   rd  sqrtr   )r2   r   r3   r4   r   r   r   r   r   r[  r\  expected_magnituder(   r(   r)   test_from_state_spacek  s   
 zTest_bode.test_from_state_spaceN)r   r   r   r^  ra  rg  rj  ro  rs  rt  rw  r~  r(   r(   r(   r)   rW    s    
rW  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 )NrR   r_  rY  )gGz?r   gׁsF?)MbXrD   r  r   r	   r   r   r   r   )r2   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 )NrR   rX  rY  rb  )	r	   r   r   rc  r   r   r   r   r   r2   r   r   r  r  r8   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   )r2   r   r   rn  r   r  r(   r(   r)   test_freq_range  s
   zTest_freqresp.test_freq_rangec                 C   s4   t dgddg}t|dd\}}|d dksJ d S rp  )r	   r   )r2   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 )
Nrx  r   r   ry  r  rl  rb  rA   rK   )r   rL   r,   r{  r   r   r   r   r	   r   r   r   r   )r2   r   r3   r4   r   r   r   r   r   r  r  r8   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 )NrT   r=   rR   rX  rY  rb  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   ),r   numpyr   numpy.testingr   r   r   r   scipy._lib._array_apir   r   r   scipy.signalr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr,   r*   r+   r   r   r   r  r  r  r-  r/  r0  rW  r  r(   r(   r(   r)   <module>   s4    @
 [ ~GI  d