a
    ˆù»j]µ  ã                   @   sF  d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d!d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)Úassert_almost_equalÚassert_equalÚassert_allcloseÚassert_Úsuppress_warnings)Úraises)Úss2tfÚtf2ssÚltiÚdltiÚbodeÚfreqrespÚlsimÚimpulseÚstepÚabcd_normalizeÚplace_polesÚTransferFunctionÚ
StateSpaceÚZerosPolesGain)ÚBadCoefficientsç:Œ0âŽyE>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%   úDE:\soccer\ml_env\Lib\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 sŽ0    Y  d S )N©g®Gázö?g ‰°áé•Ê¿g\�Âõ(Ü@gNbX9´Àgíž<,Ôšâ¿g)\�Âõ(Àr   gš™™™™™å?gßO�—nñ?çd;ßO�@gV-²�ÀgßO�—n’@gú~j¼t“¨?r5   g°rh‘í|õ?g¢E¶óýÔ Àé   )r   çžï§ÆK·@ç“V-ò?r8   r   r   ç^ºI+	Àr   é   ©çš™™™™™É¿ç      à¿g}Ð³Yõ9ÀgÐDØðT!ÀÚKNV0©ÚmethodZYTÚignore)Úinvalid)r:   r:   é   rC   )r   ÚarrayÚreshaper3   Úerrstate)r+   r,   r-   r.   r%   r%   r&   Ú	test_real3   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 s„0    Y  g d	¢}t jddd��" | j|||d
d� W d   ƒ n1 sÌ0    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 �s¼0    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 �sž0    Y  t  g d¢¡}t jddd�� |  |||¡ W d   ƒ n1 �sê0    Y  d S )N)r   é   r   r   )r   r   r   ç«ªªªªª@)r   r   r   r   r   é   )éýÿÿÿéÿÿÿÿù       À      ð¿ù       À      ð?rA   )ÚdividerB   )y        �íµ ÷Æ°¾y        �íµ ÷Æ°>éöÿÿÿé
   iè  ©Úmaxiter)$iœ÷ÿÿiªôÿÿi%÷ÿÿiªýÿÿiFùÿÿiÛøÿÿi[ÿÿÿiåþÿÿiöÿÿiYÿÿÿiýÿÿi÷ÿÿiáýÿÿi\ùÿÿi¸ýÿÿi^ôÿÿicüÿÿiìúÿÿiÑùÿÿi(üÿÿi~þÿÿi¦õÿÿiýÿÿiüÿÿiûýÿÿiÂùÿÿr:   iSùÿÿiÝþÿÿi®þÿÿigÿÿÿiôøÿÿi®ûÿÿipûÿÿi�üÿÿi÷ÿÿé   )i”ÿÿÿiŠþÿÿiôýÿÿiûúÿÿi0ûÿÿi_ÿÿÿiLûÿÿi`ýÿÿiƒýÿÿiñÿÿÿiþÿÿiéÿÿÿi]üÿÿiôüÿÿi#ûÿÿi—ûÿÿiöúÿÿi"úÿÿiHüÿÿi¢úÿÿiÂÿÿÿi<üÿÿi^üÿÿiUüÿÿièüÿÿiýÿÿicúÿÿiþÿÿiùùÿÿiRýÿÿé   )y      9À      =Ày      9À      =@y      ?@      EÀy      ?@      E@y     €@@     €DÀy     €@@     €D@)é   rV   rV   )rV   rQ   rQ   )rP   éìÿÿÿéâÿÿÿé(   é2   é<   éF   y      4À      Ày      4À      @y      @      @y      @      À)
rP   rW   rX   éØÿÿÿiÎÿÿÿéÄÿÿÿéºÿÿÿi°ÿÿÿi¦ÿÿÿiœÿÿÿrL   )
y      $À      $@y      4À      4@y      >À      >@y      DÀ      D@y      IÀ      I@y      $À      $Ày      4À      4Ày      >À      >Ày      DÀ      DÀy      IÀ      IÀ)r   rH   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   rU   r   r   r   r   é	   )
r   r   r   r   rJ   r   r   rJ   r:   rC   r:   )éþÿÿÿy      À      ð?y      À      ð¿ù      ð¿      ð?ù      ð¿      ð¿)ra   rK   éüÿÿÿrb   rc   )	r   rD   rF   r3   rE   ÚonesÚeyeZdiagr   )r+   r,   r-   r.   Zbig_AZbig_Br%   r%   r&   Útest_complexI   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 )Nr4   r6   )r   r7   r8   r8   r   r   r9   r   rJ   r:   rC   r6   rU   rT   rH   é   r;   )rN   rM   rK   ra   r   rJ   )r   rD   rE   r3   r   r!   ÚnanÚnb_iter)r+   r,   r-   r.   r0   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 �s 0    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   rH   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r6   )r   r   r   r   rJ   r   r   rJ   r:   )çÍÌÌÌÌÌ Àçš™™™™™ÀçffffffÀç333333ÀZfoor?   rJ   )rl   rm   rn   ro   rK   )rl   rm   rn   é*   ©r!   iÖÿÿÿrR   )ra   ra   ra   ra   )r6   r6   )r6   r:   ©rJ   r:   rC   r6   T)ÚrecordÚalways)rL   ra   rK   rd   g¼‰Ø—²Òœ<)r!   rS   rL   z4Convergence was not reached after maxiter iterations)rN   rM   ù       À      @ra   rC   )ra   rK   rd   éûÿÿÿ)rN   rM   ru   y       À      Àr>   )r   rD   rE   Úassert_raisesr   r   Znewaxisre   ÚwarningsÚcatch_warningsÚsimplefilterr   ÚlenÚ
issubclassÚcategoryÚUserWarningr    Úmessager   rj   )r+   r,   r-   Úwr0   r%   r%   r&   Útest_errors»   sR    ÿ
ÿÿÿÿÿ
ÿ
ÿ,  
ÿzTestPlacePoles.test_errorsN)Ú__name__Ú
__module__Ú__qualname__r3   rG   rg   rk   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))rC   rC   rC   )rJ   rC   rC   ©rJ   rJ   rJ   )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�   ra   rK   rJ   r   ç‚vIhÂ%<=rq   r:   ç›+¡†›„=)r   rD   r	   r   r   )	r+   ÚbÚar,   r-   Ú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:   rJ   r   r’   rq   r:   rJ   rU   )r	   r   r   ©r+   Útfr,   r-   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 )NrJ   r:   ra   r’   rq   r   rL   )rJ   r   rJ   rŒ   )rJ   r:   rC   rr   )ra   rK   rd   )rJ   r   r   ©r   rJ   r   )r   rJ   r:   rC   rC   )ZdtyperT   iúÿÿÿg€h‰eÖ9€9i÷ÿÿÿrK   )rJ   rT   rU   rv   rd   )r   rJ   rK   )r	   r   r   r   rD   Úobjectr™   r%   r%   r&   Útest_simo_round_trip3  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   rJ   )rK   rd   ra   r   rJ   )rU   rJ   r   )ç        r¡   rŽ   r�   r’   r“   ©r!   r"   )rŽ   r‘   ç      @r�   rq   )r   r   )r+   r,   r-   r–   r—   r›   rœ   r%   r%   r&   Útest_all_int_arraysl  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   rJ   r:   r’   rq   r“   r¢   )r   rD   r   r   Zvstack)r+   r,   r-   r–   r—   Zb_allr•   Zb0Za0Úb1Za1Úb2Za2r%   r%   r&   Útest_multioutputu  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 )ÚTestLsimrH   c                 G   s<   t ƒ �"}| t¡ t|Ž }W d   ƒ n1 s.0    Y  |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   rU   ©Ú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   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   rQ   ié  rŽ   ©rŽ   r‘   rŽ   r¡   r³   )r   r¶   r·   r±   r   r¸   r   )r+   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   rU   ç      à?r:   ©Údecimal)r±   r   r¶   r   r   Údigits_accuracyr¹   r%   r%   r&   Útest_integrator»  s    zTestLsim.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¡}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Ž   ©rJ   r:   r   g      $@é   r:   )ÚUÚTr´   rJ   ©	r   rD   r†   r±   r¶   r{   r   r¸   r   ©r+   r,   r-   r–   r—   r°   rº   r»   r¼   r½   r¾   Ú
expected_yZexpected_x0Z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   rU   rÃ   r:   rÄ   )	r   rD   r±   r¶   Ú	ones_liker   Z	transposer   rÆ   )r+   r,   r-   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   rD   r±   r¶   r·   r   r¸   r   )r+   r,   r-   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	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Ž   rÉ   r   r�   ée   r:   r³   rJ   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¡   rJ   r:   r³   rµ   )r+   r°   rº   r»   r¼   r½   r¾   rÏ   r%   r%   r&   Útest_nonzero_initial_time  s    
z"TestLsim.test_nonzero_initial_timec                 C   sr   t  g d¢¡}t  g d¢¡}dgddgf}ttdd��( t|||dgd�\}}}W d   ƒ n1 sd0    Y  d S )N)r¡   rŽ   rŽ   r�   )r¡   r¡   rŽ   rŽ   rŽ   r¡   z"Time steps are not equally spaced.)Úmatchr³   )r   rD   rw   r   r   )r+   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                   @   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 )ÚTestImpulsec                 C   s4   dgddgf}t |ƒ\}}t | ¡}t||ƒ d S ©NrŽ   ©r   r   r¸   r   ©r+   r°   r¼   r½   rÏ   r%   r%   r&   rÀ     s    zTestImpulse.test_first_orderc                 C   sb   dgddgf}d}t  dd|¡}t||d�\}}t|j|fƒ t||ƒ t  | ¡}t||ƒ d S )NrŽ   rÊ   r   r‘   ©rÌ   )r   r¶   r   r   r   r   r¸   ©r+   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_initial1  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Ç   E  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Â   L  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Á   rC   rU   rT   ©r´   rÌ   ©r   ©r+   r°   r¼   r½   r%   r%   r&   Útest_array_likeU  s    zTestImpulse.test_array_likec                 C   s$   dgg d¢f}t |ddd�\}}d S )NrŽ   rÁ   rC   rU   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                   @   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 )Ú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À   b  s    zTestStep.test_first_orderc                 C   sf   dgddgf}d}t  dd|¡}t||d�\}}t|j|fƒ t||ƒ dt  | ¡ }t||ƒ d S )NrŽ   rÊ   r   r‘   rÝ   rJ   )r   r¶   r   r   r   r   r¸   rÞ   r%   r%   r&   rà   j  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³   rJ   r‘   rë   rÜ   r%   r%   r&   râ   x  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Á   rJ   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Á   rU   rT   rÝ   ©r   rç   r%   r%   r&   rè   �  s    zTestStep.test_array_likec                 C   s   t g dgdfƒ d S )NrL   y      ð?        rí   ©r+   r%   r%   r&   Útest_complex_input£  s    zTestStep.test_complex_inputN)r‚   rƒ   r„   rÀ   rà   râ   rã   rÇ   rÂ   rè   rï   r%   r%   r%   r&   rê   a  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 )NrJ   rL   rC   )
r
   r   Ú
isinstancer   r   Údtr   rD   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 )NrJ   r:   rC   r6   r   )r   r   rD   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 )NrJ   r:   rC   r6   )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 ©NrJ   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 d   ƒ qê1 �s¼0    Y  qêt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 �sŒ0    Y  ttƒ� ||  W d   ƒ n1 �s¾0    Y  ttƒ� ||ƒ   W d   ƒ n1 �sò0    Y  ttƒ� |ƒ |  W d   ƒ n1 �s&0    Y  ttƒ� ||ƒ   W d   ƒ n1 �sZ0    Y  ttƒ� |ƒ |  W d   ƒ n1 �sŽ0    Y  tt|d ||d�d d| t|||d�d  ƒ ttƒ�" |t ddg¡  W d   ƒ n1 �sü0    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 �s®0    Y  ttƒ� ||  W d   ƒ n1 �sà0    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 �sŽ0    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ÿ   r=   gffffffæ?r§   gš™™™™™é¿rJ   r   r<   gš™™™™™¹¿gš™™™™™Ù?çš™™™™™¹?gš™™™™™É?éd   r:   )rË   rÌ   gñhãˆµøä>)r"   rC   r6   ra   )r   r   rD   Zto_discreter¶   r·   ÚintÚfloatÚcomplexZfloat32Z
complex128r   r   rw   Ú	TypeErrorr   r   rò   )r+   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 ©NrJ   r:   )r   r   rD   rî   r%   r%   r&   r÷   d  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 ©NrJ   r   rL   )r   r   rñ   rø   r   rù   rú   r   ró   r%   r%   r&   rû   j  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þ   u  s    z$TestTransferFunction.test_propertiesN)r‚   rƒ   r„   r÷   rû   rþ   r%   r%   r%   r&   r
  c  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   rD   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 )NrJ   r:   rC   )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   rD   r,   r-   r–   r—   rî   r%   r%   r&   Úsetup_method“  s    z Test_abcd_normalize.setup_methodc                 C   s   t ttƒ d S r¬   )rw   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 )NrJ   rL   )rw   r   r   r-   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 ©NrL   rU   ©rw   r   r   r,   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�   )rw   r   r   r,   r-   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   )rw   r   r   r,   r-   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   r,   r-   r–   r—   r   ©r+   r,   r-   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   r,   r-   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©r:   r   )r   r   ©r,   r-   r—   r   rJ   ©r   r†   r   r,   r   r   )r+   ÚB_ZD_r,   r-   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   r:   ©r,   r-   r–   r   rJ   r  )r+   r  ZC_r,   r-   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)r-   r–   r—   r   rJ   )r   r-   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)r,   r–   r—   r   rJ   )r   r,   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   rJ   )r   r,   r-   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   rJ   )r   r,   r-   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   rJ   )r   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�\}}}}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)r-   r—   r   rJ   )r   r-   r—   r   r   r  r%   r%   r&   Útest_missing_ACó  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)r-   r–   r   rJ   )r   r-   r–   r   r   r  r%   r%   r&   Útest_missing_ADü  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)r,   r—   r   rJ   )r   r,   r—   r   r   r  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—   )rw   r   r   r—   rî   r%   r%   r&   Útest_missing_ABC_fails  s    z*Test_abcd_normalize.test_missing_ABC_failsc                 C   s   t tt| j| jd� d S )N)r,   r–   )rw   r   r   r,   r–   rî   r%   r%   r&   Útest_missing_BD_fails  s    z)Test_abcd_normalize.test_missing_BD_failsc                 C   s   t tt| j| jd� d S )N)r,   r-   )rw   r   r   r,   r-   rî   r%   r%   r&   Útest_missing_CD_fails  s    z)Test_abcd_normalize.test_missing_CD_failsN)r‚   rƒ   r„   r  r  r  r  r  r  r  r  r�   r  r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  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   sD   t dgddgƒ}g d¢}t||d�\}}}g d¢}t||dd� d S )NrJ   ©r   rJ   rQ   r  ©r€   )r   rK   rW   r]   rÄ   ©r
   r   r   )r+   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 )NrJ   ©r   rJ   rQ   r/  )gÍÌÌÌÌÌÀiÓÿÿÿg33333UÀrÄ   r0  )r+   r°   r€   r1  r2  Ú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 )NrJ   r.  r/  ù              ð?g      4@)	r
   r   r   Úpolyvalr›   rœ   Úlog10Úabsr   )r+   r°   r€   r1  r2  Újwr½   r3  r%   r%   r&   Útest_034  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 )NrJ   r.  r/  r8  g     €f@)r
   r   r   r9  r›   rœ   Zarctan2r   r   Úpir   )r+   r°   r€   r1  r2  r<  r½   r6  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 ©NrJ   rQ   ra   ©rß   )r
   r   Úlogspacer   r   )r+   r°   rß   Ú
expected_wr€   r1  r2  r%   r%   r&   Útest_05J  s
    zTest_bode.test_05c                 C   s4   t dgddgƒ}t|dd�\}}}t|d dƒ d S ©NrJ   r   r:   rA  g{®Gáz„?)r
   r   r   ©r+   r°   r€   r1  r2  r%   r%   r&   Útest_06T  s    zTest_bode.test_06c                 C   s&   t dgg d¢ƒ}t|dd�\}}}d S )NrJ   )rJ   r   r  r:   rA  )r
   r   rF  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)rP   rX   r]   r^   r_   rJ   rK   rY   r  r/  i>þÿÿé   rÄ   )r
   r   r   rB  r   ÚminrF  r%   r%   r&   Útest_08a  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 s”0    Y  dt  
t  dd|d   ¡¡ }t|	|ƒ d S )	N©rŽ   r‘   r‘   rŽ   r¡   rŽ   ©rŽ   r¡   r¡   r  rA  é   rT   )r   rD   r)   Ú	companionrÌ   r   r­   r   r
   r   r:  Úsqrtr   )r+   r•   r,   r-   r–   r—   r¯   r°   r€   r1  r2  Zexpected_magnituder%   r%   r&   Útest_from_state_spaceg  s    
0 zTest_bode.test_from_state_spaceN)r‚   rƒ   r„   r4  r7  r=  r?  rD  rG  rH  rK  rQ  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   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 )NrJ   r5  r/  )g®Gáz®ï?rÃ   gõÛ×�sF„?)çòÒMbX¹¿r=   rS  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   sl   t dgddgƒ}g d¢}t||d�\}}|d }t |j|¡t |j|¡ }t|j|jƒ t|j|jƒ d S )NrJ   r.  r/  r8  )	r
   r   r   r9  r›   rœ   r   r   r   ©r+   r°   r€   rU  rô   r1   r%   r%   r&   Útest_outputŒ  s    zTest_freqresp.test_outputc                 C   s@   t dgddgƒ}d}t dd|¡}t||d�\}}t||ƒ d S r@  )r
   r   rB  r   r   )r+   r°   rß   rC  r€   rU  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 rE  )r
   r   r   )r+   r°   r€   rU  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 s’0    Y  |d }
ddd|
  d|
d   |
d	   }t
|	j|jƒ t
|	j|jƒ d S )
NrL  r¡   rŽ   rM  r  rA  r8  r:   rC   )r   rD   r)   rO  rÌ   r   r­   r   r
   r   r   r   r   )r+   r•   r,   r-   r–   r—   r¯   r°   r€   rU  rô   r1   r%   r%   r&   rQ  ¨  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 )NrL   r6   rJ   r.  r/  r8  rT  rW  r%   r%   r&   Útest_from_zpk½  s    zTest_freqresp.test_from_zpkN)	r‚   rƒ   r„   rV  rX  rY  rZ  rQ  r[  r%   r%   r%   r&   rR  |  s   
rR  )r   r   ),rx   Únumpyr   Znumpy.testingr   r   r   r   r   Zpytestr   rw   Zscipy.signalr   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-  rR  r%   r%   r%   r&   Ú<module>   s.   @
 Z ~GI  d