
    _MhP9                         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          Z G d d	          Z G 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                       e Zd Zej        j        d             Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )TestC2Dc                 *   t          j        dt           j                  }t          j        ddt           j                  }t          j        ddgddgddgg          }t          j        dgdgd	gg          }d
t          j        d          z  }t          j        dd          }d}t          ||||f|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dts                e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s   VARZ(((WVS
333Xc{S#Jd<==XuseeW-..$rvayy076#455 "b"b!1<NNNBB!(B///!(B///!"b)))!"b)))L"-----    c                 2   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }d	t          j        d          z  }t          j        dd
          }|}t          j        dgdgdgg          }d}	t	          ||||f|	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/   r0   r1   r2   r3   r4   s                  r5   test_fohzTestC2D.test_foh$   s6   VAYYWVS!!Xc{S#Jd<==XuseeW-.. %rvayy076#4558/0/0013 4 4  "b"b!1<NNNBB!(B///!(B///!(B///!(B///L"-----r7   c                 2   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }dt          j        d          z  }t          j        dd	          }|}t          j        d
gdgdgg          }d}	t	          ||||f|	d          \  }
}}}}t          ||
           t          ||           t          ||           t          ||           t          |	|           d S )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r    r:   r;   s                  r5   test_impulsezTestC2D.test_impulse;   s1   VAYYWVS!!Xc{S#Jd<==XusecU+,, %rvayy076#4558fXuvh788 "b"b!1<(13 3 3BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 N   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }d}d	}d
t          j        d          z  }t          j        dd          }t          j        ddgddgddgg          }	t          j        dgdgdgg          }
t	          ||||f|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/   rK   r-   r.   r<   r=   r0   r1   r2   r3   r4   s                   r5   test_gbtzTestC2D.test_gbtQ   sU   VAYYWVS!!Xc{S#Jd<==XuseeW-..?763''8c3Z!3Z!3Z) * * 8eW!U$X' ( ( !"b"b!1<(-U< < <BB 	"(B///!(B///!(B///!(B/////r7   c                 8   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }d}d	t          j        d          z  }t          j        dd          }t          j        ddgddgddgg          }|}	t	          ||||f|d
          \  }
}}}}t          ||
           t          ||           t          ||           t          |	|           t          ||           d S )Nr   r   r   r   r   r   r   r         ?eulerr    r:   r(   r)   r*   r+   r,   r/   r-   r.   r<   r=   r0   r1   r2   r3   r4   s                  r5   
test_eulerzTestC2D.test_eulerk   s=   VAYYWVS!!Xc{S#Jd<==XuseeW-..?764((8dC[!3Z!4[* + +  "b"b!1<(/1 1 1BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 H   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }d}d	t          j        d          z  }t          j        dd          }t          j        d
d	gd	d	gd	dgg          }t          j        dgdgdgg          }	t	          ||||f|d          \  }
}}}}t          ||
           t          ||           t          ||           t          |	|           d S )Nr   r   r   r   r   r   r   r   g       @rO   g      ?gzG?backward_diffr    rL   rQ   s                  r5   test_backward_diffzTestC2D.test_backward_diff   sN   VAYYWVS!!Xc{S#Jd<==XuseeW-..?763''8c3Z!3Z!3Z) * * 8eW!U#W& ' ' !"b"b!1<(79 9 9BB 	"(B///!(B///!(B///!(B/////r7   c                 
   t          j        d          }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }d}d	t          j        d          z  }t          j        dd
          }t          j        ddgddgdd
gg          }t          j        dgd
gdgg          }	t	          ||||f|d          \  }
}}}}t          ||
           t          ||           t          ||           t          |	|           t          ||           dt          j        d          z  }t          j        dd          }t          j        ddgddgddgg          }t          j        dgdgdgg          }	d
}t	          ||||f|d          \  }
}}}}t          ||
           t          ||           t          ||           t          |	|           t          ||           d S )Nr   r   r   r   r   r   r   r   g?rB   gUUUUUU?g?g>X%bilinearr    gffffff?rG   rD   rE   rC   rF   rH   r:   rQ   s                  r5   test_bilinearzTestC2D.test_bilinear   sM   VAYYWVS!!Xc{S#Jd<==XuseeW-..*769--8c9-'3'35 6 6 8/0'[013 4 4 !"b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///L"--- ?763''8c3Z#sc3Z@AA8eWsefX677  "b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 L   t          j        g d          }t          j        g d          }t          j        g dg          }t          j        g d          }d}t          ||f|d          \  }}}t          ||           t          ||           t	          ||           d S )N)r   r   r   )r   r   r   )rB   gNZۿgϱ)_?)r   g]Ogoh?r   r   r    )r"   r&   r'   r   r   )	r(   numcdencnumddendr/   numdenr4   s	            r5   test_transferfunctionzTestC2D.test_transferfunction   s    x)))**x)))**xKKKLMMxDDDEED$<eDDDS"!$,,,!$,,,L"-----r7   c                    t          j        ddg          }t          j        dt          j        d          z  dt          j        d          z  g          }d}ddg}d	d
g}d}d}t          |||f|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kr4   s               r5   test_zerospolesgainzTestC2D.test_zerospolesgain   s    (C;''(C"'!**,dRWQZZ.?@AA#%6799;!7GS"9<).0 0 0ua 	"'5111!'5111C###L"-----r7   c                 Z   d}d}d}d}t          ||||          \  }}t          ||||          \  }}}	d}
d}dd|z
  |
z  |z  z   d||
z  |z  z
  z  }|
|z  d||
z  |z  z
  z  }|d||
z  |z  z
  z  }|||z  |z  z   }t          ||||          \  }}t          ||f|
d|          \  }}}t          ||           t          ||           t          ||||          \  }}}t          |||	f|
d|          \  }}}}t          ||           t          ||           t          ||           dS )	z7Test method='gbt' with alpha=0.25 for tf and zpk cases.g      r   r   r   r   rI   rJ   N)r   r	   r'   r   )r(   ABCDcnumcdenczcpckhrK   AdBdCdDddnumddenc2dnumc2ddenr4   dzdpdkc2dzc2dpc2dks                              r5   test_gbt_with_sio_tf_and_zpkz$TestC2D.test_gbt_with_sio_tf_and_zpk   s     1aA&&
d Aq!Q''
B 1u9/A%%!eai!m*;<Ua%!)a-'(!eai!m#$R 2r2r**
d !$qeLLLf%%%f%%% BB++
B  #BB<5NNNdD"D!!!D!!!D!!!!!r7   c                    d }t          j        dgg          }t          j        dgg          }t          j        dgg          }t          j        dgg          }d}t          j        ddd          }|d         |d         z
  } ||          }	t          ||||f||	|	          \  }}
}t	          ||||f|d
          }d|	dd         |	dd         z   z  }|dd         }t          ||                    dd          ||          \  }}}d|
dd         |
dd         z   z  }t          |                                |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                 0    t          j        d| z            S )Ng      @)r"   sin)ts    r5   uz'TestC2D.test_discrete_approx.<locals>.u  s    6#'??"r7   g{Gzr   rG   r   g      $@e   r   )TUX0rW   r    r   N)r   r   x0g-C6?rtol)	r"   r&   linspacer
   r'   r   reshaper   ravel)r(   r   abcdr   r   r4   u1youtxoutdsysu2t2td2yd2xd2ymids                      r5   test_discrete_approxzTestC2D.test_discrete_approx  su   	# 	# 	# HugYHseWHseWHseWK4%%qTAaD[QqTT aAq\Q"<<<4 Aq!Q<J777 BssGbf$%ssVdbjjQ&7&72"EEES#
 d3B3i$qrr(*+		T555555r7   c                     ddgddggddgf}t          |d          \  }}}|dk    sJ t          |ddgd           t          |ddgddggd           d S )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r'   r   )r(   tfr^   r_   r4   s        r5   test_simo_tfzTestC2D.test_simo_tf=  s    1v1vA'2t}}S"Tzzzza.T::::q"g;'78tDDDDDDr7   c                    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    sJ t          |t          j        ||f          d           t          ||d           t          ||d           d S )Nr   r      r   gvIh%<=r   )r'   r   r"   vstack)r(   tsr   r^   r_   r4   tf1num1den1dt1tf2num2den2dt2s                 r5   test_multioutputzTestC2D.test_multioutputF  s    2wA!Q(2r{{S"!uQxAc2,,dC!uQxAc2,,dC SyyyySyyyy 	RYd|445AAAA 	T....T......r7   N)__name__
__module____qualname__pytestmarkthread_unsafer6   r>   r@   rM   rR   rU   rX   r`   rl   r   r   r   r    r7   r5   r   r      s        [. . .&. . ... . .,0 0 04. . .00 0 02*. *. *.X. . .. . .((" (" ("T&6 &6 &6PE E E/ / / / /r7   r   c                       e Zd Zd Zd ZdS )
TestC2dLtic                 $   t          j        ddgddgg          }t          j        dgdgg          }t          j        ddgg          }d}t          j        ddgd	d
gg          }t          j        dgdgg          }t          ||||          }|                    d          }t	          |j        |           t	          |j        |           t	          |j        |           t	          |j        t          j	        |j                             d S )Ng333333ӿ皙?rG   gffffffr   r   gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?g?)
r"   r&   r   to_discreter   rn   ro   rp   rq   
zeros_like)	r(   rn   ro   rp   rq   A_resB_ressys_sscsys_ssds	            r5   test_c2d_sszTestC2dLti.test_c2d_ss_  s   HtSkC;/00HqcA3Z  Hq!fX,.?@,.?@B C C,-0A/BCDDaAq//%%d++	5)))	5)))	1%%%	2=#;#;<<<<<r7   c                    t          ddgddg          }|                    d          }t          j        ddg          }t          j        ddg          }t	          |j        |d	           t	          |j        |d	           d S )
Nr   rC   r   g?g{Gzt?gi߿gY쭛]g{Gz?)atol)r   r   r"   r&   r   r_   r^   )r(   sysnum_resden_ress       r5   test_c2d_tfzTestC2dLti.test_c2d_tfr  s    3*sCj))ooe$$ (C!3455(C!3455 	t4444t444444r7   N)r   r   r   r   r   r   r7   r5   r   r   ^  s2        = = =&5 5 5 5 5r7   r   c                   R   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             Zej                            d
e          d             Z	ej                            d
e          d             Z
dS )TestC2dInvariantsr   )r   rO   r   r   
   r   )r   rO      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                 8   t          j        |          |z  }t          ||          \  }}t          t	          ||d          t          |                    \  }}t          ||                                z  |d                                                    d S )Nr   r   r    nr   )r"   aranger   r   r'   lenr   r   r(   r   sample_timesamples_numbertime_	yout_cont	yout_discs           r5   test_impulse_invariantz(TestC2dInvariants.test_impulse_invariant  s    y((;6sd+++9CY G G G"%d))- - -9ioo&7&7719K9K9M9MNNNNNr7   c                 2   t          j        |          |z  }t          ||          \  }}t          t	          ||d          t          |                    \  }}t          |                                |d                                                    d S )Nr   r   r    r   r   )r"   r   r   r   r'   r   r   r   r   s           r5   test_step_invariantz%TestC2dInvariants.test_step_invariant  s    y((;6C4(((9Sk%@@@CIINNN9	))9Q<+=+=+?+?@@@@@r7   c                    t          j        |          |z  }t          |||          \  }}}t          t	          ||d          |          \  }}}t          |                                |                                           d S )N)r   r   r9   r    )r   )r"   r   r
   r   r'   r   r   r   s           r5   test_linear_invariantz'TestC2dInvariants.test_linear_invariant  s    y((;6sdd3339aCU C C CtLLL9a	))9??+<+<=====r7   N)r   r   r   r   casesr   r   parametrizer   r   r   r   r7   r5   r   r     s	        
1v{{{	#	#T2.	1v~~~	&	&R0	sLLL	!	!3+E [=uEEO O FEO [=uEEA A FEA [=uEE> > FE> > >r7   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   r   r7   r5   <module>r      s@                 - - - - - - 8 8 8 8 8 8 8 8 8 8 8 8 8 8 > > > > > > > > > > > > > >M/ M/ M/ M/ M/ M/ M/ M/^
5 5 5 5 5 5 5 5D!> !> !> !> !> !> !> !> !> !>r7   