o
    `^hP9                     @   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   c/home/air/shanriGPT/back/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>."?g4pL	?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      ?gz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]Ogoh?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   gwRN?g.-.?y\9O?(?y\9O?(ֿ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{Gzr   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   {Gz?gUxegMbP?r   r   gT(|)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   gvIh%<=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   gffffffr   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{Gzt?gi߿gY쭛]g{Gz?)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"