o
    Ö­jP9  ã                   @   s–   d dl Zd dlmZmZmZ d dlZd dlmZ	 d dlm
Z
mZmZmZmZ d dlmZmZmZmZmZ G dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZdS )é    N)Úassert_array_almost_equalÚassert_almost_equalÚxp_assert_close)Úcont2discrete)ÚdlsimÚss2tfÚss2zpkÚlsimÚlti)Útf2ssÚimpulseÚdimpulseÚstepÚdstepc                   @   s|   e Zd Zejj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 )ÚTestC2Dc                 C   sÈ   t jdt jd�}t jddt jd�}t  ddgddgddgg¡}t  dgdgd	gg¡}d
t  d¡ }t  dd¡}d}t||||f|dd�\}}	}
}}t||ƒ t||	ƒ t||
ƒ t||ƒ t||ƒ d S )Né   )Údtype©r   é   ç      à?ç      è?ç      ð?ç      Ð?ç        ç…ëQ¸Õ¿ç›Ž)aú?g6<SÂÔ?Úzoh©Úmethod)ÚnpÚeyeÚfloat64ÚfullÚarrayÚc2dr   r   )ÚselfÚacÚbcÚccÚdcÚad_truthÚbd_truthÚdt_requestedÚadÚbdÚcdÚddÚdt© r2   úb/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/signal/tests/test_cont2discrete.pyÚtest_zoh   s    



zTestC2D.test_zohc                 C   sÖ   t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}d	t  d¡ }t  dd
¡}|}t  dgdgdgg¡}d}	t||||f|	dd�\}
}}}}t||
ƒ t||ƒ t||ƒ t||ƒ t|	|ƒ d S )Nr   r   r   r   r   r   r   r   r   gm†²çïÚ?g>.Òâ"¨Ð?gÙ4ðpL	Ó?g.ÈªÑqÂ¿Úfohr   ©r   r    r"   r#   r$   r   r   ©r%   r&   r'   r(   r)   r*   r+   Úcd_truthÚdd_truthr,   r-   r.   r/   r0   r1   r2   r2   r3   Útest_foh$   s$   
þ 



zTestC2D.test_fohc                 C   sÖ   t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}dt  d¡ }t  dd	¡}|}t  d
gdgdgg¡}d}	t||||f|	dd�\}
}}}}t||
ƒ t||ƒ t||ƒ t||ƒ t|	|ƒ d S )Nr   r   r   r   r   r   r   r   g›Ž)aÚ?g      Ü?g      Ô?r   r   r6   r7   r2   r2   r3   Útest_impulse;   s"   
ÿ



zTestC2D.test_impulsec                 C   sê   t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}d}d	}d
t  d¡ }t  dd¡}t  ddgddgddgg¡}	t  dgdgdgg¡}
t||||f|d|d�\}}}}}t||ƒ t||ƒ t|	|ƒ t|
|ƒ d S )Nr   r   r   r   r   r   r   r   çUUUUUUÕ?gš™™™™™ù?ç333333Ó?çÍÌÌÌÌÌì?ç333333ó?çffffffÆ?çš™™™™™É?ç=
×£p=Ê¿Úgbt©r   Úalpha©r   r    r"   r#   r$   r   )r%   r&   r'   r(   r)   r,   rE   r*   r+   r8   r9   r-   r.   r/   r0   r1   r2   r2   r3   Útest_gbtQ   s.   

þþÿ


zTestC2D.test_gbtc                 C   sÜ   t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}d}d	t  d¡ }t  dd¡}t  ddgddgddgg¡}|}	t||||f|d
d�\}
}}}}t||
ƒ t||ƒ t||ƒ t|	|ƒ t||ƒ d S )Nr   r   r   r   r   r   r   r   ç      ø?Úeulerr   r6   ©r%   r&   r'   r(   r)   r,   r*   r+   r8   r9   r-   r.   r/   r0   r1   r2   r2   r3   Ú
test_eulerk   s(   

þÿ



zTestC2D.test_eulerc                 C   sä   t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}d}d	t  d¡ }t  dd¡}t  d
d	gd	d	gd	dgg¡}t  dgdgdgg¡}	t||||f|dd�\}
}}}}t||
ƒ t||ƒ t||ƒ t|	|ƒ d S )Nr   r   r   r   r   r   r   r   g       @rH   g      ì?gáz®GáÒ?Úbackward_diffr   rF   rJ   r2   r2   r3   Útest_backward_diffƒ   s,   

þþÿ


zTestC2D.test_backward_diffc                 C   s�  t  d¡}t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}d}d	t  d¡ }t  dd
¡}t  ddgddgdd
gg¡}t  dgd
gdgg¡}	t||||f|dd�\}
}}}}t||
ƒ t||ƒ t||ƒ t|	|ƒ t||ƒ dt  d¡ }t  dd¡}t  ddgddgddgg¡}t  dgdgdgg¡}	d
}t||||f|dd�\}
}}}}t||
ƒ t||ƒ t||ƒ t|	|ƒ t||ƒ d S )Nr   r   r   r   r   r   r   r   g«ªªªªªú?r<   gUUUUUUõ?g±ªªªªªÒ?g>¿Xò‹%¿¿Úbilinearr   gffffffö?rA   r>   r?   r=   r@   rB   r6   rJ   r2   r2   r3   Útest_bilinearœ   sH   

þþÿ




ÿ



zTestC2D.test_bilinearc           	      C   sx   t  g d¢¡}t  g d¢¡}t  g d¢g¡}t  g d¢¡}d}t||f|dd�\}}}t||ƒ t||ƒ t||ƒ d S )N)r   r   r   )r   r   r   )r<   gN›îÕZÛ¿gÏ±†³)_Ì?)r   gŽüø]OŸõ¿g–oü²hã?r   r   r   )r   r#   r$   r   r   )	r%   ÚnumcÚdencÚnumdÚdendr,   ÚnumÚdenr1   r2   r2   r3   Útest_transferfunctionÈ   s   

zTestC2D.test_transferfunctionc                 C   s”   t  ddg¡}t  dt  d¡ dt  d¡ g¡}d}ddg}d	d
g}d}d}t|||f|dd�\}}	}
}t||ƒ t||	ƒ t||
ƒ t||ƒ d S )Nr   g      à¿y              ð?r   y       €      ð¿r   gwÀÄRN½ó?g.-“.ˆç?y\9¨Oî?Æ„ò°(Ö?y\9¨Oî?Æ„ò°(Ö¿r   r   )r   r#   Úsqrtr$   r   r   )r%   Úzeros_cÚpoles_cÚk_cÚzeros_dÚpolls_dÚk_dr,   ÚzerosÚpolesÚkr1   r2   r2   r3   Útest_zerospolesgain×   s    "ÿÿ


zTestC2D.test_zerospolesgainc                 C   s2  d}d}d}d}t ||||ƒ\}}t||||ƒ\}}}	d}
d}dd| |
 |  d||
 |   }|
| d||
 |   }|d||
 |   }||| |  }t ||||ƒ\}}t||f|
d|d�\}}}t||ƒ t||ƒ t||||ƒ\}}}t|||	f|
d|d�\}}}}t||ƒ t||ƒ t||ƒ dS )	z7Test method='gbt' with alpha=0.25 for tf and zpk cases.g      ð¿r   r   r   r   rC   rD   N)r   r   r$   r   )r%   ÚAÚBÚCÚDÚcnumÚcdenÚczÚcpÚckÚhrE   ÚAdÚBdÚCdÚDdÚdnumÚddenÚc2dnumÚc2ddenr1   ÚdzÚdpÚdkÚc2dzÚc2dpÚc2dkr2   r2   r3   Útest_gbt_with_sio_tf_and_zpkë   s*   $



z$TestC2D.test_gbt_with_sio_tf_and_zpkc                 C   s  dd„ }t  dgg¡}t  dgg¡}t  dgg¡}t  dgg¡}d}t  ddd¡}|d	 |d  }||ƒ}	t||||f||	|d
�\}}
}t||||f|dd�}d|	dd… |	d	d…   }|dd… }t|| dd	¡||d�\}}}d|
dd… |
d	d…   }t| ¡ |dd� dS )a  
        Test that the solution to the discrete approximation of a continuous
        system actually approximates the solution to the continuous system.
        This is an indirect test of the correctness of the implementation
        of cont2discrete.
        c                 S   s   t  d|  ¡S )Ng      @)r   Úsin)Útr2   r2   r3   Úu  s   z'TestC2D.test_discrete_approx.<locals>.ug{®Gáz„¿r   rA   r   g      $@ée   r   )ÚTÚUÚX0rN   r   r   Néÿÿÿÿ)r}   r|   Úx0g-Cëâ6?©Úrtol)	r   r#   Úlinspacer	   r$   r   Úreshaper   Úravel)r%   r}   ÚaÚbÚcÚdrƒ   r|   r1   Úu1ÚyoutÚxoutÚdsysÚu2Út2Útd2Úyd2Úxd2Úymidr2   r2   r3   Útest_discrete_approx  s    zTestC2D.test_discrete_approxc                 C   sd   ddgddggddgf}t |dƒ\}}}|dksJ ‚t|ddgdd� t|ddgddggdd� d S )	Nr   r   ç{®Gáz„?gUùxÊe±ï¿gü©ñÒMbP?r„   r‚   gÞT(û|®ï¿)r$   r   )r%   ÚtfrT   rU   r1   r2   r2   r3   Útest_simo_tf=  s
   zTestC2D.test_simo_tfc                 C   sÄ   d}ddgddggddgf}t ||ƒ\}}}|d d |d f}t ||ƒ\}}}	|d d |d f}
t |
|ƒ\}}}||	ks@J ‚||ksFJ ‚t|t ||f¡dd� t||dd� t||dd� d S )Nr˜   r   éýÿÿÿé   r   g‚vIhÂ%<=r„   )r$   r   r   Úvstack)r%   Útsr™   rT   rU   r1   Útf1Únum1Úden1Údt1Útf2Únum2Úden2Údt2r2   r2   r3   Útest_multioutputF  s   zTestC2D.test_multioutputN)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚmarkÚthread_unsafer4   r:   r;   rG   rK   rM   rO   rV   ra   rz   r—   rš   r§   r2   r2   r2   r3   r      s    
,*(	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
TestC2dLtic           	      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gd	d
gg¡}t  dgdgg¡}t||||ƒ}| d¡}t|j|ƒ t|j|ƒ t|j|ƒ t|jt  	|j¡ƒ d S )Ng333333Ó¿çš™™™™™¹?rA   gffffffæ¿r   r   gÐ“»Ç<†ï?gö‡�ùs?gö‡�ùƒ?gã{Kpæî?g1vMñ ?g_†Ç·J(©?gš™™™™™©?)
r   r#   r
   Úto_discreter   rb   rc   rd   re   Ú
zeros_like)	r%   rb   rc   rd   re   ÚA_resÚB_resÚsys_sscÚsys_ssdr2   r2   r3   Útest_c2d_ss_  s   
ÿ
zTestC2dLti.test_c2d_ssc                 C   s\   t ddgddgƒ}| d¡}t ddg¡}t ddg¡}t|j|dd	� t|j|dd	� d S )
Nr   r=   r   gš™™™™™Ù?g{®Gázt?g�â„i®ß¿gYì­›É]ï¿g{®Gáz”?)Úatol)r
   r°   r   r#   r   rU   rT   )r%   ÚsysÚnum_resÚden_resr2   r2   r3   Útest_c2d_tfr  s   
zTestC2dLti.test_c2d_tfN)r¨   r©   rª   r¶   r»   r2   r2   r2   r3   r®   ^  s    r®   c                   @   s�   e Zd Zeddgg d¢ƒddfeddgg d¢ƒddfedg d	¢ƒddfgZej d
e¡dd„ ƒZej d
e¡dd„ ƒZ	ej d
e¡dd„ ƒZ
dS )ÚTestC2dInvariantsr   )r   rH   r   r   é
   r   )r   rH   é   r   r   r¯   )r   r   r   r   zsys,sample_time,samples_numberc                 C   sZ   t  |¡| }t||d�\}}tt||dd�t|ƒd�\}}t|| ¡  |d  ¡ ƒ d S )N©r   r   r   ©Únr   )r   Úaranger   r   r$   Úlenr   rˆ   ©r%   r¸   Úsample_timeÚsamples_numberÚtimeÚ_Ú	yout_contÚ	yout_discr2   r2   r3   Útest_impulse_invariant‹  s   
ÿz(TestC2dInvariants.test_impulse_invariantc                 C   sV   t  |¡| }t||d�\}}tt||dd�t|ƒd�\}}t| ¡ |d  ¡ ƒ d S )Nr¿   r   r   rÀ   r   )r   rÂ   r   r   r$   rÃ   r   rˆ   rÄ   r2   r2   r3   Útest_step_invariant”  s   z%TestC2dInvariants.test_step_invariantc                 C   sT   t  |¡| }t|||d�\}}}tt||dd�|d�\}}}t| ¡ | ¡ ƒ d S )N)r   r€   r5   r   )r}   )r   rÂ   r	   r   r$   r   rˆ   rÄ   r2   r2   r3   Útest_linear_invariantœ  s   z'TestC2dInvariants.test_linear_invariantN)r¨   r©   rª   r   Úcasesr«   r¬   ÚparametrizerË   rÌ   rÍ   r2   r2   r2   r3   r¼   €  s    ý

r¼   )Únumpyr   Úscipy._lib._array_apir   r   r   r«   Úscipy.signalr   r$   r   r   r   r	   r
   r   r   r   r   r   r   r®   r¼   r2   r2   r2   r3   Ú<module>   s      Q"