U
    »mœdÝ¸  ã                   @   s¬  d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d dl"m#Z# d,dd	„Z$G d
d„ dƒZ%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd„ dƒZ)G dd„ de)ƒZ*G dd„ de)ƒZ+G dd„ dƒZ,G dd„ de,ƒZ-G dd„ de,ƒZ.G dd„ dƒZ/G d d!„ d!ƒZ0G d"d#„ d#ƒZ1G d$d%„ d%ƒZ2G d&d'„ d'ƒZ3G d(d)„ d)ƒZ4G d*d+„ d+ƒZ5dS )-é    N)Úassert_almost_equalÚassert_equalÚassert_allcloseÚassert_Úsuppress_warnings)Úraises)Úss2tfÚtf2ssÚlsim2Úimpulse2Ústep2ÚltiÚdltiÚbodeÚfreqrespÚlsimÚimpulseÚstepÚabcd_normalizeÚplace_polesÚTransferFunctionÚ
StateSpaceÚZerosPolesGain)ÚBadCoefficients)Úmatrixç:Œ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)   úW/home/sam/Atlas/atlas_env/lib/python3.8/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   sV   t |||f|Ž}tj |t ||j¡ ¡\}}t||jƒ t||jƒ t||jƒ |S )z“
        Perform the most common tests on the poles computed by place_poles
        and return the Bunch object for further specific tests
        )	r   r   ÚlinalgZeigÚdotZgain_matrixr+   Zrequested_polesZcomputed_poles)ÚselfÚAÚBÚPÚkwargsÚfsfÚexpectedÚ_r)   r)   r*   Ú_check(   s    zTestPlacePoles._checkc                 C   s´   t  ddddddddd	d
dddd
ddg¡ dd¡}t  ddddddddg¡ dd¡}t  ddddg¡}| j|||dd� | j|||dd� t jdd�� |  ||d¡ W 5 Q R X d S )Nç®Gázö?ç ‰°áé•Ê¿ç\�Âõ(Ü@çNbX9´Àçíž<,Ôšâ¿ç)\�Âõ(Àr   çš™™™™™å?çßO�—nñ?çd;ßO�@çV-²�ÀçßO�—n’@çú~j¼t“¨?ç°rh‘í|õ?ç¢E¶óýÔ Àé   çžï§ÆK·@ç“V-ò?ç^ºI+	Àé   çš™™™™™É¿ç      à¿ç}Ð³Yõ9ÀçÐDØðT!ÀÚKNV0©ÚmethodZYTÚignore)Úinvalid)rJ   rJ   é   rT   )r   ÚarrayÚreshaper7   Úerrstate)r/   r0   r1   r2   r)   r)   r*   Ú	test_real4   s(           þ þ"zTestPlacePoles.test_realc              &   C   s¦  t  ddddgddddgddddgddddgg¡}t  ddgddgddgddgg¡}t  ddddg¡}t jd	d	d
�� |  |||¡ W 5 Q R X ddddg}t jd	d	d
�� | j|||dd� W 5 Q R X t  dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4g$¡ d5d5¡}t  d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSg¡ d5dT¡}dUdVdWdXdYdZg}|  |||¡ t  d[¡t  d\¡ }t  d]¡t  dgd d¡d d …dd …f  }||d d5…d d5…f< ||d d5…d dT…f< dd^d_d`dadbdcdddedfdgg}t jd	d	d
�� |  |||¡ W 5 Q R X dd^d_dhdidjdkdldmdng
}|  |d d…d d…f |d d…d d…f |¡ dodpdqdrdsdtdudvdwdxg
}|  |d d…d d…f |d d…d d…f |¡ t  ddddddddddddddddddddTdddddyg¡ dTdT¡}t  ddddddddd+dzg
¡ dTd+¡}t  d{d|d}d~dg¡}t jd	d	d
�� t|||ƒ W 5 Q R X t  d{dd€d~dg¡}t jd	d	d
�� |  |||¡ W 5 Q R X d S )�Nr   é   ç«ªªªªª@é   éýÿÿÿéÿÿÿÿù       À      ð¿ù       À      ð?rR   )ÚdividerS   y        �íµ ÷Æ°¾y        �íµ ÷Æ°>éöÿÿÿé
   iè  ©Úmaxiteriœ÷ÿÿ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ÂùÿÿrJ   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@)é   rg   rg   )rg   rb   éìÿÿÿéâÿÿÿé(   é2   é<   éF   y      4À      Ày      4À      @y      @      @y      @      ÀéØÿÿÿiÎÿÿÿéÄÿÿÿéºÿÿÿi°ÿÿÿi¦ÿÿÿiœÿÿÿy      $À      $@y      4À      4@y      >À      >@y      DÀ      D@y      IÀ      I@y      $À      $Ày      4À      4Ày      >À      >Ày      DÀ      DÀy      IÀ      IÀé	   rT   éþÿÿÿy      À      ð?y      À      ð¿y      ð¿      ð?y      ð¿      ð¿éüÿÿÿ)	r   rU   rW   r7   rV   ÚonesÚeyeZdiagr   )r/   r0   r1   r2   Zbig_AZbig_Br)   r)   r*   Útest_complexJ   sì    


ý
ý                        ýÿ û                  ýÿ û,.
    ÿ.$        ÿ ÿ&zTestPlacePoles.test_complexc                 C   s   t  ddddddddd	d
dddd
ddg¡ dd¡}t  ddddddddddddddddg¡ dd¡}t  ddddg¡}|  |||¡}t|jt jƒ t|jt jƒ t  d¡}|  |||¡}t|jt jƒ t|jt jƒ |d d …df  dd¡}t  d¡}|  |||¡}t|jdƒ t|jdƒ d S ) Nr8   r9   r:   r;   r<   r=   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   r[   rJ   rT   rf   re   rY   é   rK   rL   rM   rN   )r_   r^   r\   rr   )r   rU   rV   r7   r   r%   ÚnanÚnb_iter)r/   r0   r1   r2   r4   r)   r)   r*   Útest_tricky_Bš   sH           þ þ   ÿ ÿ

zTestPlacePoles.test_tricky_Bc                 C   s$  t  ddddddddddddddddg¡ dd¡}t  ddddddddg¡ dd¡}ttt||ddd	� ttt||t  d¡ dd¡ƒ ttt|d d …d d …t jf |dƒ ttt||d d …d d …t jf dƒ ttt||d
ƒ ttt||dƒ ttt||ddd� ttt||ddd� ttt||dƒ tttt  d¡t  d¡dƒ tj	dd��h}t 
d¡ t||dddd�}tt|ƒdkƒ tt|d jtƒƒ tdt|d jƒkƒ t|jdƒ W 5 Q R X ttt||dƒ ttt|d d …d d…f |dƒ ttt||d d…d d …f dƒ ttt||dd d	� d S )!Nr   rY   rZ   rF   r[   rJ   )çÍÌÌÌÌÌ Àçš™™™™™ÀçffffffÀç333333ÀZfoorP   )r{   r|   r}   r~   r\   )r{   r|   r}   é*   ©r%   iÖÿÿÿrc   )rr   rr   rr   rr   )rF   rF   )rF   rJ   )r[   rJ   rT   rF   T)ÚrecordÚalways)r]   rr   r\   rs   g¼‰Ø—²Òœ<)r%   rd   r]   z4Convergence was not reached after maxiter iterations)r_   r^   ù       À      @rr   rT   )rr   r\   rs   éûÿÿÿ)r_   r^   rƒ   y       À      ÀrO   )r   rU   rV   Úassert_raisesr#   r   Znewaxisrt   ÚwarningsÚcatch_warningsÚsimplefilterr   ÚlenÚ
issubclassÚcategoryÚUserWarningr$   Úmessager   ry   )r/   r0   r1   Úwr4   r)   r)   r*   Útest_errors¼   sV    2"ÿ
ÿÿÿÿÿ ÿ
ÿ  
 ÿzTestPlacePoles.test_errorsN)Ú__name__Ú
__module__Ú__qualname__r7   rX   rv   rz   r�   r)   r)   r)   r*   r,   &   s
   P"r,   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú	TestSS2TFc                 C   s<   t t ||f¡t ||f¡t ||f¡t ||f¡dƒ d S )Nr   )r   r   Úzeros©r/   ÚpÚqÚrr)   r)   r*   Úcheck_matrix_shapes  s     ýzTestSS2TF.check_matrix_shapesc                 C   s"   dD ]\}}}|   |||¡ qd S )N))rT   rT   rT   )r[   rT   rT   )r[   r[   r[   )r™   r•   r)   r)   r*   Útest_shapes  s    zTestSS2TF.test_shapesc           	      C   s¾   t  dddg¡}t  dddg¡}t||ƒ\}}}}t|ddgddggd	d
� t|dgdggd	d
� t|ddggd	d
� t|dggdd
� t||||ƒ\}}t|d |d	d
� t||d	d
� d S )Nç      ð?ç      @ç      @ç       @rr   r\   r[   r   ç‚vIhÂ%<=r€   rJ   ç›+¡†›„=)r   rU   r	   r   r   )	r/   ÚbÚar0   r1   ÚCÚDZbbZaar)   r)   r*   Ú
test_basic  s    zTestSS2TF.test_basicc                 C   sF  d}t |Ž \}}}}t|dggdd� t|dggdd� t|dggdd� t|dggdd� t||||ƒ\}}t|ddggdd� t|ddgdd� dgdggdf}t |Ž \}}}}t|dggdd� t|dggdd� t|dgdggdd� t|dgdggdd� t||||ƒ\}}t|ddgddggdd� t|ddgdd� d S )N)rJ   r[   r   rŸ   r€   rJ   r[   rf   )r	   r   r   ©r/   Útfr0   r1   r£   r¤   ÚnumÚdenr)   r)   r*   Útest_zero_order_round_trip  s$    z$TestSS2TF.test_zero_order_round_tripc                 C   s  ddgddggddgf}t |Ž \}}}}t|dggdd� t|dggdd� t|dgdggdd� t|dgdggdd� t||||ƒ\}}t|ddgddggdd� t|ddgdd� dddgdddggdddgf}t |Ž \}}}}t|ddgddggdd� t|dgdggdd� t|ddgddggdd� t|dgdggdd� t||||ƒ\}}t|dddgdddggdd� t|dddgdd� dddgdddggdddd	gf}t |Ž \}}}}t|dd
dgdddgdddggdd� t|dgdgdggdd� t|dddgdddggdd� t|dgdggdd� t||||ƒ\}}t|ddddgddddggdd� t|dddd	gdd� tjdddggtd�ddgf}t |Ž \}}}}t|dggdd� t|dggdd� t|dgdggdd� t|dgdggdd� t||||ƒ\}}t|ddgddggdd� t|ddgdd� tjdd
gdddggtd�dddgf}t |Ž \}}}}t|ddgddggdd� t|dgdggdd� t|dd
gddggdd� t|dgdggdd� t||||ƒ\}}t|ddd
gdddggdd� t|dddgdd� d S )Nr[   rJ   rr   rŸ   r€   r   r]   rT   rF   r\   rs   )Zdtypere   iúÿÿÿg€h‰eÖ9€9i÷ÿÿÿrf   r„   )r	   r   r   r   rU   Úobjectr¦   r)   r)   r*   Útest_simo_round_trip4  sZ     &"&zTestSS2TF.test_simo_round_tripc                 C   s†   dddgdddgdddgg}dgdgdgg}dddgg}dgg}t ||||ƒ\}}t|dddd	ggd
dd� t|ddddgd
d� d S )Nr   r[   r\   rs   rr   rf   ç        r›   r�   rŸ   r    ©r%   r&   rž   ç      @rœ   r€   )r   r   )r/   r0   r1   r£   r¤   r¨   r©   r)   r)   r*   Útest_all_int_arraysm  s    zTestSS2TF.test_all_int_arraysc              	   C   s4  t  ddddgddddgddddgdddd	gg¡}t  d
gdgdgdgg¡}t  ddddgddddgddddgg¡}t  dgdgdgg¡}t||||ƒ\}}t|||d |d ƒ\}}t|||d |d ƒ\}	}
t|||d |d ƒ\}}t||dd� t|
|dd� t||dd� t|t  ||	|f¡ddd� d S )Nç      ð¿r­   r›   rž   g      Àrœ   g       Àg       @r¯   ç333333Ó?g      @r   r[   rJ   rŸ   r€   r    r®   )r   rU   r   r   Zvstack)r/   r0   r1   r£   r¤   Zb_allr¢   Zb0Za0Úb1Za1Úb2Za2r)   r)   r*   Útest_multioutputv  s4    


ýý

þþzTestSS2TF.test_multioutputN)
r�   r‘   r’   r™   rš   r¥   rª   r¬   r°   rµ   r)   r)   r)   r*   r“   ÿ   s   9	r“   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestLsimc              	   G   s(   t ƒ �}| t¡ t|Ž }W 5 Q R X |S ©N)r   Úfilterr   r   )r/   ÚargsÚsupÚsystemr)   r)   r*   Ú
lti_nowarnž  s    
zTestLsim.lti_nowarnc                 C   sb   |   dddd¡}t dd¡}t |¡}t|||dgd�\}}}t | ¡}t||ƒ t||ƒ d S ©Nr±   r›   r­   r   rf   ©ÚX0©r¼   r   ÚlinspaceÚ
zeros_liker   Úexpr   ©r/   r»   ÚtÚuÚtoutÚyÚxÚ
expected_xr)   r)   r*   Útest_first_order¤  s    

zTestLsim.test_first_orderc                 C   sV   |   dddd¡}t dd¡}|}t|||ƒ\}}}d|d  }t||ƒ t||ƒ d S )Nr­   r›   r   rf   ç      à?rJ   )r¼   r   rÁ   r   r   rÄ   r)   r)   r*   Útest_integrator¯  s    
zTestLsim.test_integratorc                 C   s¦   t ddgddggƒ}t dgdggƒ}t ddggƒ}|  |||d¡}t dd¡}t |¡}t|||ƒ\}}}	t t d|d  |g¡¡}
|d }t|	|
ƒ t||ƒ d S )Nr­   r›   rž   r   rf   rÌ   rJ   )	r   r¼   r   rÁ   Ú	ones_liker   Z	transposerU   r   )r/   r0   r1   r£   r»   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   Ú
expected_yr)   r)   r*   Útest_double_integrator¹  s    

zTestLsim.test_double_integratorc                 C   s�   t ddgddggƒ}t dgdggƒ}t ddggƒ}|  |||d¡}t dd¡}t |¡}t|||ddgd�\}}}	|t | ¡ }
t||
ƒ d S r½   )r   r¼   r   rÁ   rÂ   r   rÃ   r   )r/   r0   r1   r£   r»   rÅ   rÆ   rÇ   rÈ   rÉ   rÏ   r)   r)   r*   Útest_jordan_blockÇ  s    
zTestLsim.test_jordan_blockc                 C   sæ   t  ddgddgg¡}t  ddgddgg¡}t  ddg¡}t  d¡}|  ||||¡}t  ddd¡}t  |¡}t|||ddgd	�\}}	}
t  | ¡}t  | ¡}t  d| ¡}t|	|ƒ t|
d d …df |ƒ t|
d d …d
f |ƒ d S )Nr±   r­   ç       Àr›   ©r[   rJ   r   r�   ée   r¾   r[   )	r   rU   r”   r¼   rÁ   rÂ   r   rÃ   r   )r/   r0   r1   r£   r¤   r»   rÅ   rÆ   rÇ   rÈ   rÉ   rÏ   Úexpected_x0Úexpected_x1r)   r)   r*   Ú	test_miso×  s    


zTestLsim.test_misoc                 C   sX   |   dddd¡}t dd¡}t |¡}t|||dgd�\}}}t | ¡}t||ƒ d S )Nr±   r›   r­   r[   rJ   r¾   rÀ   )r/   r»   rÅ   rÆ   rÇ   rÈ   rÉ   rÏ   r)   r)   r*   Útest_nonzero_initial_timeé  s    
z"TestLsim.test_nonzero_initial_timeN)
r�   r‘   r’   r¼   rË   rÍ   rÐ   rÑ   r×   rØ   r)   r)   r)   r*   r¶   �  s   
r¶   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
Test_lsim2c                 C   sd   t  ddd¡}t  |¡}dgddgf}t|||dgd�\}}}t  | ¡}t|d d …df |ƒ d S )Nr   rb   éé  r›   r¾   ©r   rÁ   rÂ   r
   rÃ   r   ©r/   rÅ   rÆ   r»   rÇ   rÈ   rÉ   rÊ   r)   r)   r*   Útest_01ô  s    
zTest_lsim2.test_01c                 C   sp   t  ddddg¡}t  ddddg¡}dgddgf}t|||dgd�\}}}t  d|¡}t|d d …df |ƒ d S )Nr­   r›   rœ   r¾   r   )r   rU   r
   Úmaximumr   rÜ   r)   r)   r*   Útest_02þ  s    zTest_lsim2.test_02c                 C   s€   t  ddddddg¡}t  ddddddg¡}dgddgf}t|||dd�\}}}t  ddddddg¡}t|d d …df |ƒ d S )	Nr­   r›   gš™™™™™ñ?rž   ç{®Gáz„?)Zhmaxçš™™™™™¹?r   )r   rU   r
   r   rÜ   r)   r)   r*   Útest_03  s    zTest_lsim2.test_03c                 C   sp   t  ddd¡}t  |¡}dgdddgf}t|||ddgd�\}}}d| t  | ¡ }t|d d …df |ƒ d S )Nr   rb   rÚ   r›   rž   r­   r¾   rÛ   rÜ   r)   r)   r*   Útest_04  s    
zTest_lsim2.test_04c              	   C   sî   t  ddgddgg¡}t  ddgddgg¡}t  ddg¡}t  d¡}t  ddd¡}tƒ �0}| t¡ t||||f|ddgd	�\}}}	W 5 Q R X t  | ¡}
t  | ¡}t  d| ¡}t	||
ƒ t	|	d d …df |ƒ t	|	d d …d
f |ƒ d S )Nr±   r­   rÒ   r›   rÓ   r   g      $@rÔ   )ÚTr¿   r[   )
r   rU   r”   rÁ   r   r¸   r   r
   rÃ   r   )r/   r0   r1   r£   r¤   rÅ   rº   rÇ   rÈ   rÉ   rÏ   rÕ   rÖ   r)   r)   r*   Útest_05  s    

*
zTest_lsim2.test_05c                 C   sT   dgdddgf}t |ddgd�\}}}d| t | ¡ }t|d d …df |ƒ d S )Nr›   rž   r­   r¾   r   )r
   r   rÃ   r   )r/   r»   rÇ   rÈ   rÉ   rÊ   r)   r)   r*   Útest_062  s    zTest_lsim2.test_06N)	r�   r‘   r’   rÝ   rß   râ   rã   rå   ræ   r)   r)   r)   r*   rÙ   ò  s   
		rÙ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú_TestImpulseFuncsc                 C   s6   dgddgf}|   |¡\}}t | ¡}t||ƒ d S ©Nr›   ©Úfuncr   rÃ   r   ©r/   r»   rÇ   rÈ   rÏ   r)   r)   r*   rÝ   @  s    z_TestImpulseFuncs.test_01c                 C   sd   dgddgf}d}t  dd|¡}| j||d�\}}t|j|fƒ t||ƒ t  | ¡}t||ƒ d S )Nr›   é   r   rž   ©rä   ©r   rÁ   rê   r   r   r   rÃ   ©r/   r»   ÚnrÅ   rÇ   rÈ   rÏ   r)   r)   r*   rß   H  s    
z_TestImpulseFuncs.test_02c                 C   s>   dgddgf}| j |dd�\}}dt | ¡ }t||ƒ d S ©Nr›   rœ   r¾   r¯   ré   rë   r)   r)   r*   râ   V  s    z_TestImpulseFuncs.test_03c                 C   s@   dgddgf}| j |dgd�\}}dt | ¡ }t||ƒ d S rñ   ré   rë   r)   r)   r*   rã   `  s    z_TestImpulseFuncs.test_04c                 C   s4   dgddgf}|   |¡\}}t |¡}t||ƒ d S ©Nr›   r­   )rê   r   rÎ   r   rë   r)   r)   r*   rå   j  s    
z_TestImpulseFuncs.test_05c                 C   s<   dgdddgf}|   |¡\}}|t | ¡ }t||ƒ d S )Nr›   rž   ré   rë   r)   r)   r*   ræ   q  s    z_TestImpulseFuncs.test_06c                 C   sF   dgdddgf}| j |dgddgd�\}}| j |dgdgd�\}}d S )Nr›   rž   rT   rf   re   ©r¿   rä   ©rê   ©r/   r»   rÇ   rÈ   r)   r)   r*   Útest_array_likez  s    z!_TestImpulseFuncs.test_array_likec                 C   s(   dgdddgf}| j |ddd�\}}d S )Nr›   rž   rT   rf   ró   rô   rõ   r)   r)   r*   Útest_array_like2�  s    z"_TestImpulseFuncs.test_array_like2N)r�   r‘   r’   rÝ   rß   râ   rã   rå   ræ   rö   r÷   r)   r)   r)   r*   rç   =  s   

	rç   c                   @   s   e Zd Zdd„ ZdS )ÚTestImpulse2c                 C   s
   t | _d S r·   )r   rê   ©r/   r)   r)   r*   Úsetup_method‡  s    zTestImpulse2.setup_methodN©r�   r‘   r’   rú   r)   r)   r)   r*   rø   †  s   rø   c                   @   s   e Zd Zdd„ ZdS )ÚTestImpulsec                 C   s
   t | _d S r·   )r   rê   rù   r)   r)   r*   rú   Œ  s    zTestImpulse.setup_methodNrû   r)   r)   r)   r*   rü   ‹  s   rü   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú_TestStepFuncsc                 C   s:   dgddgf}|   |¡\}}dt | ¡ }t||ƒ d S rè   ré   rë   r)   r)   r*   rÝ   ‘  s    z_TestStepFuncs.test_01c                 C   sh   dgddgf}d}t  dd|¡}| j||d�\}}t|j|fƒ t||ƒ dt  | ¡ }t||ƒ d S )Nr›   rì   r   rž   rí   r[   rî   rï   r)   r)   r*   rß   ™  s    
z_TestStepFuncs.test_02c                 C   sB   dgddgf}| j |dd�\}}ddt | ¡  }t||ƒ d S ©Nr›   rœ   r¾   r[   rž   ré   rë   r)   r)   r*   râ   §  s    z_TestStepFuncs.test_03c                 C   sD   dgddgf}| j |dgd�\}}ddt | ¡  }t||ƒ d S rþ   ré   rë   r)   r)   r*   rã   ±  s    z_TestStepFuncs.test_04c                 C   s.   dgddgf}|   |¡\}}|}t||ƒ d S rò   ©rê   r   rë   r)   r)   r*   rå   »  s    z_TestStepFuncs.test_05c                 C   sD   dgdddgf}|   |¡\}}dd| t | ¡  }t||ƒ d S )Nr›   rž   r[   ré   rë   r)   r)   r*   ræ   Ã  s    z_TestStepFuncs.test_06c                 C   s*   dgdddgf}| j |ddgd�\}}d S )Nr›   rž   rf   re   rí   rô   rõ   r)   r)   r*   rö   Ì  s    z_TestStepFuncs.test_array_likeN)
r�   r‘   r’   rÝ   rß   râ   rã   rå   ræ   rö   r)   r)   r)   r*   rý   �  s   

	rý   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	TestStep2c                 C   s
   t | _d S r·   )r   rê   rù   r)   r)   r*   rú   Ô  s    zTestStep2.setup_methodc                 C   s4   dgddgf}| j |ddd�\}}|}t||ƒ d S )Nr›   r­   g»½×Ùß|Û=r   )r&   r%   rÿ   rë   r)   r)   r*   rå   ×  s    zTestStep2.test_05N)r�   r‘   r’   rú   rå   r)   r)   r)   r*   r   Ó  s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestStepc                 C   s
   t | _d S r·   )r   rê   rù   r)   r)   r*   rú   å  s    zTestStep.setup_methodc                 C   s   t g dgdfƒ d S )Nr]   y      ð?        )r   rù   r)   r)   r*   Útest_complex_inputè  s    zTestStep.test_complex_inputN)r�   r‘   r’   rú   r  r)   r)   r)   r*   r  ä  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚTestLtic                 C   sú   t dgdgƒ}tt|tƒƒ tt|t ƒƒ tt|tƒ ƒ t|jd kƒ t t g ¡t dg¡dƒ}tt|tƒƒ tt|t ƒƒ tt|tƒ ƒ t|jd kƒ t g dgdƒ}t dgdgddƒ}tt|t	ƒƒ tt|t ƒƒ tt|tƒ ƒ t|jd kƒ d S )Nr[   r]   rT   )
r   r   Ú
isinstancer   r   Údtr   rU   r   r   ©r/   Úsr)   r)   r*   Útest_lti_instantiationð  s     zTestLti.test_lti_instantiationN)r�   r‘   r’   r  r)   r)   r)   r*   r  ï  s   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestStateSpacec                 C   sl   t ddddƒ t dgdgdgdgƒ t t ddgddgg¡t dgdgg¡t ddgg¡t dgg¡ƒ d S )Nr[   rJ   rT   rF   r   )r   r   rU   rù   r)   r)   r*   Útest_initialization  s    & ÿz"TestStateSpace.test_initializationc                 C   sh   t ddddƒ}tt| ¡ t ƒƒ tt| ¡ tƒƒ tt| ¡ tƒƒ tt |ƒ|k	ƒ t| ¡ |k	ƒ d S )Nr[   rJ   rT   rF   )r   r   r  Úto_ssÚto_tfr   Úto_zpkr   r  r)   r)   r*   Útest_conversion  s    zTestStateSpace.test_conversionc                 C   s<   t ddddƒ}t|jdgƒ t|jdgƒ t|jd kƒ d S ©Nr[   r   )r   r   Úpolesr”   r   r  r  r)   r)   r*   Útest_properties  s    zTestStateSpace.test_propertiesc              
   C   s|  G dd„ dƒ}t t ddgddgg¡t dgdgg¡t ddgg¡t dgg¡ƒ}t t d	d
gdd
gg¡t dgdgg¡t ddgg¡t dgg¡ƒ}| d¡}| d¡}| d¡}t ddd¡}t |¡}d|d< ttttj	tj
tjfD ]Æ}	tt|	dƒ| ||d�d |	dƒt|||d�d  ƒ tt||	dƒ ||d�d t|||d�d |	dƒ ƒ tt||	dƒ ||d�d t|||d�d |	dƒ ƒ ttƒ� |	dƒ|  W 5 Q R X 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 5 Q R X ttƒ� ||  W 5 Q R X ttƒ� ||  W 5 Q R X ttƒ� ||ƒ   W 5 Q R X ttƒ� |ƒ |  W 5 Q R X ttƒ� ||ƒ   W 5 Q R X ttƒ� |ƒ |  W 5 Q R X tt|d ||d�d d| t|||d�d  ƒ ttƒ� |t ddg¡  W 5 Q R X ttƒ� t ddg¡|  W 5 Q R X ttƒ� ||  W 5 Q R X ttƒ�  |t ddgddgg¡  W 5 Q R X ttƒ� ||  W 5 Q R X ttƒ� ||ƒ   W 5 Q R X ttƒ� |ƒ |  W 5 Q R X tt|| ||d�d t|||d�d t|||d�d  ƒ tt|d ||d�d d| t|||d�d  ƒ ttd| ||d�d d| t| ||d�d  ƒ tt|| ||d�d t|||d�d t|||d�d  ƒ ttƒ� ||ƒ   W 5 Q R X ttƒ� |ƒ |  W 5 Q R X || }
t|
jdkƒ || }
t|
jdkƒ d| }
t|
jdkƒ | }
t|
jdkƒ d S )Nc                   @   s   e Zd ZdS )z.TestStateSpace.test_operators.<locals>.BadTypeN)r�   r‘   r’   r)   r)   r)   r*   ÚBadType+  s   r  rL   gffffffæ?r²   gš™™™™™é¿r[   r   rK   gš™™™™™¹¿gš™™™™™Ù?rá   gš™™™™™É?éd   rJ   )ÚUrä   gñhãˆµøä>)r&   rT   rF   rr   )r   r   rU   Zto_discreterÁ   rÂ   ÚintÚfloatÚcomplexZfloat32Z
complex128r   r   r…   Ú	TypeErrorr#   r   r  )r/   r  Ús1Ús2Z
s_discreteZs2_discreteZs3_discreterÅ   rÆ   Útypr  r)   r)   r*   Útest_operators(  s¶    ýý



ÿÿÿ
ÿþ






ÿ



$


"ÿÿÿ"ÿ

zTestStateSpace.test_operatorsN)r�   r‘   r’   r
  r  r  r  r)   r)   r)   r*   r	    s   
r	  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTransferFunctionc                 C   s6   t ddƒ t dgdgƒ t t dg¡t dg¡ƒ d S ©Nr[   rJ   )r   r   rU   rù   r)   r)   r*   r
  ©  s    
z(TestTransferFunction.test_initializationc                 C   sl   t ddgddgƒ}tt| ¡ tƒƒ tt| ¡ t ƒƒ tt| ¡ tƒƒ tt |ƒ|k	ƒ t| ¡ |k	ƒ d S ©Nr[   r   r]   )r   r   r  r  r   r  r  r   r  r)   r)   r*   r  ¯  s    z$TestTransferFunction.test_conversionc                 C   s2   t ddgddgƒ}t|jdgƒ t|jdgƒ d S r  )r   r   r  r”   r  r)   r)   r*   r  º  s    z$TestTransferFunction.test_propertiesN)r�   r‘   r’   r
  r  r  r)   r)   r)   r*   r  ¨  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestZerosPolesGainc                 C   s<   t dddƒ t dgdgdƒ t t dg¡t dg¡dƒ d S r  )r   r   rU   rù   r)   r)   r*   r
  Å  s    z&TestZerosPolesGain.test_initializationc                 C   sf   t dddƒ}tt| ¡ tƒƒ tt| ¡ tƒƒ tt| ¡ t ƒƒ tt |ƒ|k	ƒ t| ¡ |k	ƒ d S )Nr[   rJ   rT   )r   r   r  r  r   r  r   r  r  r)   r)   r*   r  Ë  s    z"TestZerosPolesGain.test_conversionN)r�   r‘   r’   r
  r  r)   r)   r)   r*   r   Ä  s   r   c                   @   s¼   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-S ).ÚTest_abcd_normalizec                 C   sR   t  ddgddgg¡| _t  dgdgg¡| _t  ddgg¡| _t  dgg¡| _d S )Nr›   rž   rœ   r¯   r±   r�   ç      @)r   rU   r0   r1   r£   r¤   rù   r)   r)   r*   rú   Ø  s    z Test_abcd_normalize.setup_methodc                 C   s   t ttƒ d S r·   )r…   r#   r   rù   r)   r)   r*   Útest_no_matrix_failsÞ  s    z(Test_abcd_normalize.test_no_matrix_failsc                 C   s    t ttddg| j| j| jƒ d S )Nr[   r]   )r…   r#   r   r1   r£   r¤   rù   r)   r)   r*   Útest_A_nosquare_failsá  s
      ÿz)Test_abcd_normalize.test_A_nosquare_failsc                 C   s    t tt| jddg| j| jƒ d S ©Nr]   rf   ©r…   r#   r   r0   r£   r¤   rù   r)   r)   r*   Útest_AB_mismatch_failså  s     ÿz*Test_abcd_normalize.test_AB_mismatch_failsc                 C   s$   t tt| j| jdgdgg| jƒ d S )Nr¯   r�   )r…   r#   r   r0   r1   r¤   rù   r)   r)   r*   Útest_AC_mismatch_failsé  s    
 ÿz*Test_abcd_normalize.test_AC_mismatch_failsc                 C   s    t tt| j| j| jddgƒ d S )Nr"  r   )r…   r#   r   r0   r1   r£   rù   r)   r)   r*   Útest_CD_mismatch_failsí  s     ÿz*Test_abcd_normalize.test_CD_mismatch_failsc                 C   s    t tt| jddg| j| jƒ d S r%  r&  rù   r)   r)   r*   Útest_BD_mismatch_failsñ  s     ÿz*Test_abcd_normalize.test_BD_mismatch_failsc                 C   sR   t | j| j| j| jƒ\}}}}t|| jƒ t|| jƒ t|| jƒ t|| jƒ d S r·   )r   r0   r1   r£   r¤   r   ©r/   r0   r1   r£   r¤   r)   r)   r*   Ú"test_normalized_matrices_unchangedõ  s
    z6Test_abcd_normalize.test_normalized_matrices_unchangedc                 C   s�   t | j| jddgdƒ\}}}}t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ d S r  )r   r0   r1   r   r   r+  r)   r)   r*   rš   ü  s    zTest_abcd_normalize.test_shapesc                 C   s~   t  d¡}t  d¡}t| j||d�\}}}}t|| jƒ t||ƒ t||ƒ t|jd |jd ƒ t|jd | jjd ƒ d S )N©rJ   r   )r   r   ©r0   r1   r¤   r   r[   ©r   r”   r   r0   r   r   )r/   ÚB_ZD_r0   r1   r£   r¤   r)   r)   r*   Ú test_zero_dimension_is_not_none1  s    



z4Test_abcd_normalize.test_zero_dimension_is_not_none1c                 C   s|   t  d¡}t  d¡}t| j||d�\}}}}t|| jƒ t||ƒ t||ƒ t|jd |jd ƒ t|jd |jd ƒ d S )Nr-  )r   rJ   ©r0   r1   r£   r   r[   r/  )r/   r0  ZC_r0   r1   r£   r¤   r)   r)   r*   Ú test_zero_dimension_is_not_none2  s    



z4Test_abcd_normalize.test_zero_dimension_is_not_none2c                 C   sl   t | j| j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ d S )N)r1   r£   r¤   r   r[   )r   r1   r£   r¤   r   r   r+  r)   r)   r*   Útest_missing_A  s    z"Test_abcd_normalize.test_missing_Ac                 C   sl   t | j| j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ d S )N)r0   r£   r¤   r   r[   )r   r0   r£   r¤   r   r   r+  r)   r)   r*   Útest_missing_B  s    z"Test_abcd_normalize.test_missing_Bc                 C   sl   t | j| j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ d S )Nr.  r   r[   )r   r0   r1   r¤   r   r   r+  r)   r)   r*   Útest_missing_C$  s    z"Test_abcd_normalize.test_missing_Cc                 C   sl   t | j| j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ d S )Nr2  r   r[   )r   r0   r1   r£   r   r   r+  r)   r)   r*   Útest_missing_D*  s    z"Test_abcd_normalize.test_missing_Dc                 C   sž   t | j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ t|j| jjd | jjd fƒ d S )N)r£   r¤   r   r[   )r   r£   r¤   r   r   r+  r)   r)   r*   Útest_missing_AB0  s     z#Test_abcd_normalize.test_missing_ABc                 C   s´   t | j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ t|j| jjd | jjd fƒ d S )N)r1   r¤   r   r[   )r   r1   r¤   r   r   r+  r)   r)   r*   Útest_missing_AC8  s     z#Test_abcd_normalize.test_missing_ACc                 C   s´   t | j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ t|j| jjd | jjd fƒ d S )N)r1   r£   r   r[   )r   r1   r£   r   r   r+  r)   r)   r*   Útest_missing_ADA  s     z#Test_abcd_normalize.test_missing_ADc                 C   s´   t | j| jd�\}}}}t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|jd |jd ƒ t|j| jjd | jjd fƒ t|j| jjd | jjd fƒ d S )N)r0   r¤   r   r[   )r   r0   r¤   r   r   r+  r)   r)   r*   Útest_missing_BCJ  s     z#Test_abcd_normalize.test_missing_BCc                 C   s   t tt| jd� d S )N)r¤   )r…   r#   r   r¤   rù   r)   r)   r*   Útest_missing_ABC_failsS  s    z*Test_abcd_normalize.test_missing_ABC_failsc                 C   s   t tt| j| jd� d S )N)r0   r£   )r…   r#   r   r0   r£   rù   r)   r)   r*   Útest_missing_BD_failsV  s    z)Test_abcd_normalize.test_missing_BD_failsc                 C   s   t tt| j| jd� d S )N)r0   r1   )r…   r#   r   r0   r1   rù   r)   r)   r*   Útest_missing_CD_failsY  s    z)Test_abcd_normalize.test_missing_CD_failsN)r�   r‘   r’   rú   r#  r$  r'  r(  r)  r*  r,  rš   r1  r3  r4  r5  r6  r7  r8  r9  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   sL   t dgddgƒ}ddddg}t||d�\}}}dddd	g}t||dd
� d S )Nr[   rá   rb   r  ©rŽ   r   r\   rh   rn   ©Údecimal©r   r   r   )r/   r»   rŽ   ÚmagÚphaseÚexpected_magr)   r)   r*   rÝ   _  s
    zTest_bode.test_01c                 C   sH   t dgddgƒ}dddg}t||d�\}}}dddg}t||dd� d S )	Nr[   rá   rb   r@  gÍÌÌÌÌÌÀiÓÿÿÿg33333UÀrA  rC  )r/   r»   rŽ   rD  rE  Úexpected_phaser)   r)   r*   rß   m  s
    

zTest_bode.test_02c                 C   sr   t dgddgƒ}ddddg}t||d�\}}}|d }t |j|¡t |j|¡ }dt t|ƒ¡ }t||ƒ d S )Nr[   rá   rb   r  r@  ù              ð?g      4@)	r   r   r   Úpolyvalr¨   r©   Úlog10Úabsr   )r/   r»   rŽ   rD  rE  ÚjwrÈ   rF  r)   r)   r*   râ   y  s    zTest_bode.test_03c                 C   sz   t dgddgƒ}ddddg}t||d�\}}}|d }t |j|¡t |j|¡ }t |j|j¡d tj	 }t
||ƒ d S )Nr[   rá   rb   r  r@  rH  g     €f@)r   r   r   rI  r¨   r©   Zarctan2r!   r    Úpir   )r/   r»   rŽ   rD  rE  rL  rÈ   rG  r)   r)   r*   rã   „  s    zTest_bode.test_04c                 C   sB   t dgddgƒ}d}t dd|¡}t||d�\}}}t||ƒ d S ©Nr[   rb   rr   ©rð   )r   r   Úlogspacer   r   )r/   r»   rð   Ú
expected_wrŽ   rD  rE  r)   r)   r*   rå   �  s
    zTest_bode.test_05c                 C   s4   t dgddgƒ}t|dd�\}}}t|d dƒ d S ©Nr[   r   rJ   rO  rà   )r   r   r   ©r/   r»   rŽ   rD  rE  r)   r)   r*   ræ   ™  s    zTest_bode.test_06c                 C   s(   t dgdddgƒ}t|dd�\}}}d S )Nr[   r   r  rJ   rO  )r   r   rS  r)   r)   r*   Útest_07   s    zTest_bode.test_07c                 C   sH   t g dddddgdƒ}|jt ddd	¡d
�\}}}tt|ƒddd� d S )Nra   ri   rn   ro   rp   r[   r\   rj   r  r@  i>þÿÿé   rA  )r   r   r   rP  r   ÚminrS  r)   r)   r*   Útest_08¦  s    zTest_bode.test_08c              	   C   s¾   t  ddddg¡}t |¡j}t  dgdgdgg¡}t  dddgg¡}t  dgg¡}tƒ �0}| t¡ t||||ƒ}t	|dd�\}}	}
W 5 Q R X dt  
t  dd|d   ¡¡ }t|	|ƒ d S )Nr›   rž   r­   r  rO  é   re   )r   rU   r-   Ú	companionrä   r   r¸   r   r   r   rJ  Úsqrtr   )r/   r¢   r0   r1   r£   r¤   rº   r»   rŽ   rD  rE  Zexpected_magnituder)   r)   r*   Útest_from_state_space¬  s    
 zTest_bode.test_from_state_spaceN)r�   r‘   r’   rÝ   rß   râ   rã   rå   ræ   rT  rW  r[  r)   r)   r)   r*   r?  ]  s   
r?  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTest_freqrespc                 C   sb   t dgddgƒ}dddg}t||d�\}}dddg}dd	dg}t|j|dd
� t|j|dd
� d S )Nr[   rá   rb   r@  g®Gáz®ï?rÌ   gõÛ×�sF„?gòÒMbX¹¿rL   rA  ©r   r   r   r    r!   )r/   r»   rŽ   ÚHZexpected_reZexpected_imr)   r)   r*   Útest_output_manualÃ  s    


z Test_freqresp.test_output_manualc                 C   sp   t dgddgƒ}ddddg}t||d�\}}|d }t |j|¡t |j|¡ }t|j|jƒ t|j|jƒ d S )Nr[   rá   rb   r  r@  rH  )	r   r   r   rI  r¨   r©   r   r    r!   ©r/   r»   rŽ   r^  r  r5   r)   r)   r*   Útest_outputÑ  s    zTest_freqresp.test_outputc                 C   s@   t dgddgƒ}d}t dd|¡}t||d�\}}t||ƒ d S rN  )r   r   rP  r   r   )r/   r»   rð   rQ  rŽ   r^  r)   r)   r*   Útest_freq_rangeÜ  s
    zTest_freqresp.test_freq_rangec                 C   s2   t dgddgƒ}t|dd�\}}t|d dƒ d S rR  )r   r   r   )r/   r»   rŽ   r^  r)   r)   r*   Útest_pole_zeroæ  s    zTest_freqresp.test_pole_zeroc              	   C   sÚ   t  ddddg¡}t |¡j}t  dgdgdgg¡}t  dddgg¡}t  dgg¡}tƒ �.}| t¡ t||||ƒ}t	|dd�\}}	W 5 Q R X |d }
ddd|
  d|
d   |
d   }t
|	j|jƒ t
|	j|jƒ d S )	Nr›   rž   r­   r  rO  rH  rJ   rT   )r   rU   r-   rY  rä   r   r¸   r   r   r   r   r    r!   )r/   r¢   r0   r1   r£   r¤   rº   r»   rŽ   r^  r  r5   r)   r)   r*   r[  í  s    
$z#Test_freqresp.test_from_state_spacec                 C   sh   t g dgd dgƒ}ddddg}t||d�\}}|d }d|d d  }t|j|jƒ t|j|jƒ d S )	Nr]   rF   r[   rá   rb   r  r@  rH  r]  r`  r)   r)   r*   Útest_from_zpk  s    zTest_freqresp.test_from_zpkN)	r�   r‘   r’   r_  ra  rb  rc  r[  rd  r)   r)   r)   r*   r\  Á  s   
r\  )r   r   )6r†   Únumpyr   Znumpy.testingr   r   r   r   r   Zpytestr   r…   Zscipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zscipy.signal._filter_designr   Zscipy.linalgr-   Zscipy.sparse._sputilsr   r+   r,   r“   r¶   rÙ   rç   rø   rü   rý   r   r  r  r	  r  r   r!  r?  r\  r)   r)   r)   r*   Ú<module>   s:   L
 Z UKIC  d