o
    Ö­j°  ã                   @   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ç:Œ0âŽyE>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(   ú[/var/www/html/CropPilot/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®Gázö?g ‰°áé•Ê¿g\�Âõ(Ü@gNbX9´Àgíž<,Ôšâ¿g)\�Âõ(Àr   gš™™™™™å?gßO�—nñ?çd;ßO�@gV-²�ÀgßO�—n’@gú~j¼t“¨?r<   g°rh‘í|õ?g¢E¶óýÔ Àé   )r   çžï§ÆK·@ç“V-ò?r?   r   r   ç^ºI+	Àr   é   ©çš™™™™™É¿ç      à¿g}Ð³Yõ9ÀgÐDØðT!ÀÚ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 sÝw   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)$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ÂùÿÿrA   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@)é   r^   r^   )r^   rY   rY   )rX   éìÿÿÿéâÿÿÿé(   é2   é<   éF   y      4À      Ày      4À      @y      @      @y      @      À)
rX   r_   r`   éØÿÿÿiÎÿÿÿéÄÿÿÿéºÿÿÿi°ÿÿÿi¦ÿÿÿiœÿÿÿrT   )
y      $À      $@y      4À      4@y      >À      >@y      DÀ      D@y      IÀ      I@y      $À      $Ày      4À      4Ày      >À      >Ày      DÀ      DÀy      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sªJ ‚t|d jtƒs´J ‚dt|d jƒv s¿J ‚|jdksÆJ ‚W d   ƒ n1 sÐw   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#   iÖÿÿÿrZ   )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      Àg€h‰eÖ9€9i÷ÿÿÿrS   )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 sÝw   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 �s’w   Y  ttƒ� ||ƒ   W d   ƒ n	1 �s¬w   Y  ttƒ� |ƒ |  W d   ƒ n	1 �sÆw   Y  tt|d ||d�d d| t|||d�d  ƒ ttƒ� |t ddg¡  W d   ƒ n	1 �sýw   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 �s‰w   Y  ttƒ� |ƒ |  W d   ƒ n	1 �s£w   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»   gš™™™™™é¿rR   r   rC   gš™™™™™¹¿gš™™™™™Ù?çš™™™™™¹?gš™™™™™É?éd   rA   )rå   ræ   gñhãˆµøä>)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ÍÌÌÌÌÌÀiÓÿÿÿg33333UÀrÞ   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{®Gáz„?©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  )g®Gáz®ï?rÝ   gõÛ×�sF„?)çòÒMbX¹¿rD   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