
    (phP9                         S SK rS SKJrJrJr  S SKrS SKJr	  S SKJ
r
JrJrJrJr  S SKJrJrJrJrJr   " S S5      r " S S	5      r " S
 S5      rg)    N)assert_array_almost_equalassert_almost_equalxp_assert_close)cont2discrete)dlsimss2tfss2zpklsimlti)tf2ssimpulsedimpulsestepdstepc                       \ rS rSr\R
                  R                  S 5       rS rS r	S r
S rS rS rS	 rS
 rS rS rS rS rSrg)TestC2D   c                    [         R                  " S[         R                  S9n[         R                  " SS[         R                  S9n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S	//5      nS
[         R                  " S5      -  n[         R                  " SS5      nSn[        XX44USS9u  ppn[        XX5        [        Xi5        [        X:5        [        XK5        [        X|5        g )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                X/var/www/html/venv/lib/python3.13/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohTestC2D.test_zoh   s    VVARZZ(WWVS

3XXc{S#Jd<=XXuseeW-.$rvvay0776#45 ""!1<N!(/!(/!")!")L-    c                    [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nS	[         R                  " S5      -  n[         R                  " SS
5      nUn[         R                  " S/S/S//5      nSn	[	        XX44U	SS9u  ppn[        XZ5        [        Xk5        [        X|5        [        X5        [        X5        g )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_truthr0   r1   r2   r3   r4   r5   s                  r6   test_fohTestC2D.test_foh$   s    VVAYWWVS!XXc{S#Jd<=XXuseeW-. %rvvay0776#4588/0/0013 4  ""!1<N!(/!(/!(/!(/L-r9   c                    [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nS[         R                  " S5      -  n[         R                  " SS	5      nUn[         R                  " S
/S/S//5      nSn	[	        XX44U	SS9u  ppn[        XZ5        [        Xk5        [        X|5        [        X5        [        X5        g )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r!   r<   r=   s                  r6   test_impulseTestC2D.test_impulse;   s    VVAYWWVS!XXc{S#Jd<=XXusecU+, %rvvay0776#4588fXuvh78 ""!1<(13 	"(/!(/!(/!(/L-r9   c                 .   [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nSnS	nS
[         R                  " S5      -  n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n	[         R                  " S/S/S//5      n
[	        XX44USUS9u  ppn[        X{5        [        X5        [        X5        [        X5        g )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-   r0   rO   r.   r/   r>   r?   r1   r2   r3   r4   r5   s                   r6   test_gbtTestC2D.test_gbtQ   s   VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7763'88c3Z!3Z!3Z) * 88eW!U$X' ( !""!1<(-U< 	"(/!(/!(/!(/r9   c                 
   [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nSnS	[         R                  " S5      -  n[         R                  " SS5      n[         R                  " SS/SS/SS//5      nUn	[	        XX44US
S9u  ppn[        Xj5        [        X{5        [        X5        [        X5        [        X^5        g )Nr   r   r   r   r   r   r   r         ?eulerr!   r<   r)   r*   r+   r,   r-   r0   r.   r/   r>   r?   r1   r2   r3   r4   r5   s                  r6   
test_eulerTestC2D.test_eulerk   s    VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7764(88dC[!3Z!4[* +  ""!1<(/1 	"(/!(/!(/!(/L-r9   c                 (   [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nSnS	[         R                  " S5      -  n[         R                  " SS5      n[         R                  " S
S	/S	S	/S	S//5      n[         R                  " S/S/S//5      n	[	        XX44USS9u  ppn[        Xj5        [        X{5        [        X5        [        X5        g )Nr   r   r   r   r   r   r   r   g       @rT   g      ?gzG?backward_diffr!   rP   rV   s                  r6   test_backward_diffTestC2D.test_backward_diff   s   VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7763'88c3Z!3Z!3Z) * 88eW!U#W& ' !""!1<(79 	"(/!(/!(/!(/r9   c                    [         R                  " S5      n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      nSnS	[         R                  " S5      -  n[         R                  " SS
5      n[         R                  " SS/SS/SS
//5      n[         R                  " S/S
/S//5      n	[	        XX44USS9u  ppn[        Xj5        [        X{5        [        X5        [        X5        [        X^5        S[         R                  " S5      -  n[         R                  " SS5      n[         R                  " SS/SS/SS//5      n[         R                  " S/S/S//5      n	S
n[	        XX44USS9u  ppn[        Xj5        [        X{5        [        X5        [        X5        [        X^5        g )Nr   r   r   r   r   r   r   r   g?rF   gUUUUUU?g?g>X%bilinearr!   gffffff?rK   rH   rI   rG   rJ   rL   r<   rV   s                  r6   test_bilinearTestC2D.test_bilinear   s   VVAYWWVS!XXc{S#Jd<=XXuseeW-.*7769-88c9-'3'35 6 88/0'[013 4 !""!1<(24 	"(/!(/!(/!(/L- ?7763'88c3Z#sc3Z@A88eWsefX67  ""!1<(24 	"(/!(/!(/!(/L-r9   c                 *   [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ/5      n[         R                  " / SQ5      nSn[        X4USS9u  pgn[        X65        [        XG5        [	        XX5        g )N)r   r   r   )r   r   r   )rF   gNZۿgϱ)_?)r   g]Ogoh?r   r    r!   )r#   r'   r(   r   r   )	r)   numcdencnumddendr0   numdenr5   s	            r6   test_transferfunctionTestC2D.test_transferfunction   sr    xx)*xx)*xxKLMxxDED<eD"!$,!$,L-r9   c                 T   [         R                  " SS/5      n[         R                  " S[         R                  " S5      -  S[         R                  " S5      -  /5      nSnSS/nS	S
/nSnSn[        XU4USS9u  pp[	        XH5        [	        XY5        [        Xj5        [        X{5        g )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_dr0   zerospoleskr5   s               r6   test_zerospolesgainTestC2D.test_zerospolesgain   s    ((C;'((C"''!*,dRWWQZ.?@A#%6799;!7S"9<).0a 	"'1!'1C#L-r9   c                    SnSnSnSn[        XX45      u  pV[        XX45      u  pxn	Sn
SnSSU-
  U
-  U-  -   SX-  U-  -
  -  nX-  SX-  U-  -
  -  nUSX-  U-  -
  -  nXKU-  U-  -   n[        XX5      u  nn[        XV4U
SUS9u  nnn[        UU5        [        UU5        [        XX5      u  nnn[        XxU	4U
SUS9u  nnnn[        UU5        [        UU5        [        UU5        g)	z7Test method='gbt' with alpha=0.25 for tf and zpk cases.g      r   r   r   r   rM   rN   N)r   r	   r(   r   )r)   ABCDcnumcdenczcpckhrO   AdBdCdDddnumddenc2dnumc2ddenr5   dzdpdkc2dzc2dpc2dks                              r6   test_gbt_with_sio_tf_and_zpk$TestC2D.test_gbt_with_sio_tf_and_zpk   s;     1&
 A!'
 1u9/A%%!ei!m*;<Ua%)a-'(!ei!m#$R 22*
d !$qeLf%f% BB+
B  #BB<5NdD"D!D!D!r9   c                    S n[         R                  " S//5      n[         R                  " S//5      n[         R                  " S//5      n[         R                  " S//5      nSn[         R                  " SSS5      nUS   US   -
  nU" U5      n	[        X#XE4XyUS	9u  pzn[	        X#XE4US
S9nSU	SS U	SS -   -  nUSS n[        XR                  SS5      XS9u  nnnSU
SS U
SS -   -  n[        UR                  5       USS9  g)z
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                 4    [         R                  " SU -  5      $ )Ng      @)r#   sin)ts    r6   u'TestC2D.test_discrete_approx.<locals>.u  s    66#'?"r9   g{Gzr   rK   r   g      $@e   r   )TUX0r^   r!   r   N)r   r   x0g-C6?rtol)	r#   r'   linspacer
   r(   r   reshaper   ravel)r)   r   abcdr   r   r5   u1youtxoutdsysu2t2td2yd2xd2ymids                      r6   test_discrete_approxTestC2D.test_discrete_approx  s"   	# HHugYHHseWHHseWHHseWKK4%qTAaD[qT aA\Q< A!<J7 BsGbf$%sVdjjQ&72ES#
 d3Bi$qr(*+		T5r9   c                     SS/SS//SS/4n[        US5      u  p#nUS:X  d   e[        USS/SS9  [        USS/SS//SS9  g )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r(   r   )r)   tfrf   rg   r5   s        r6   test_simo_tfTestC2D.test_simo_tf=  sc    1v1vA'2t}"Tzza.T:q"g;'78tDr9   c                 ,   SnSS/SS//SS/4n[        X!5      u  p4nUS   S   US   4n[        Xa5      u  pxn	US   S   US   4n
[        X5      u  pnXY:X  d   eX]:X  d   e[        U[        R                  " X{45      SS9  [        XHSS9  [        XLSS9  g )Nr   r      r   gvIh%<=r   )r(   r   r#   vstack)r)   tsr   rf   rg   r5   tf1num1den1dt1tf2num2den2dt2s                 r6   test_multioutputTestC2D.test_multioutputF  s    2wA!Q(2{"!uQxAc,C!uQxAc,C yyyy 	RYY|45A 	..r9    N)__name__
__module____qualname____firstlineno__pytestmarkthread_unsafer7   r@   rC   rQ   rW   r[   r_   rh   ru   r   r   r   r   __static_attributes__r   r9   r6   r   r      s^    [[. .&...,04.002*.X..(("T&6PE/r9   r   c                        \ rS rSrS rS rSrg)
TestC2dLtii^  c                 8   [         R                  " SS/SS//5      n[         R                  " S/S//5      n[         R                  " SS//5      nSn[         R                  " SS/S	S
//5      n[         R                  " S/S//5      n[        XX45      nUR                  S5      n[	        UR
                  U5        [	        UR                  U5        [	        UR                  U5        [	        UR                  [         R                  " UR                  5      5        g )Ng333333ӿ皙?rK   gffffffr   r   gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?g?)
r#   r'   r   to_discreter   rx   ry   rz   r{   
zeros_like)	r)   rx   ry   rz   r{   A_resB_ressys_sscsys_ssds	            r6   test_c2d_ssTestC2dLti.test_c2d_ss_  s    HHtSkC;/0HHqcA3Z HHq!fX,.?@,.?@B C,-0A/BCDaA/%%d+		5)		5)		1%		2==#;<r9   c                     [        SS/SS/5      nUR                  S5      n[        R                  " SS/5      n[        R                  " SS/5      n[	        UR
                  USS	9  [	        UR                  USS	9  g )
Nr   rG   r   g?g{Gzt?gi߿gY쭛]g{Gz?)atol)r   r   r#   r'   r   rg   rf   )r)   sysnum_resden_ress       r6   test_c2d_tfTestC2dLti.test_c2d_tfr  sp    3*sCj)ooe$ ((C!345((C!345 	t4t4r9   r   N)r   r   r   r   r   r   r   r   r9   r6   r   r   ^  s    =&5r9   r   c                   :   \ rS rSr\" SS// SQ5      SS4\" SS// SQ5      SS4\" S	/ S
Q5      SS4/r\R                  R                  S\5      S 5       r	\R                  R                  S\5      S 5       r
\R                  R                  S\5      S 5       rSrg)TestC2dInvariantsi  r   )r   rT   r   r   
   r   )r   rT      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                     [         R                  " U5      U-  n[        XS9u  pV[        [	        XSS9[        U5      S9u  pW[        X&R                  5       -  US   R                  5       5        g )Nr   r   r!   nr   )r#   aranger   r   r(   lenr   r   r)   r   sample_timesamples_numbertime_	yout_cont	yout_discs           r6   test_impulse_invariant(TestC2dInvariants.test_impulse_invariant  s^    yy(;6s+CY G"%d)-oo&7719K9K9MNr9   c                     [         R                  " U5      U-  n[        XS9u  pV[        [	        XSS9[        U5      S9u  pW[        UR                  5       US   R                  5       5        g )Nr   r    r!   r   r   )r#   r   r   r   r(   r   r   r   r   s           r6   test_step_invariant%TestC2dInvariants.test_step_invariant  sX    yy(;6C(S%@CIN	)9Q<+=+=+?@r9   c                     [         R                  " U5      U-  n[        XUS9u  pVn[        [	        XSS9US9u  pWn[        UR                  5       UR                  5       5        g )N)r   r   r;   r!   )r   )r#   r   r
   r   r(   r   r   r   s           r6   test_linear_invariant'TestC2dInvariants.test_linear_invariant  sT    yy(;6sd3aCU CtLa	)9??+<=r9   r   N)r   r   r   r   r   casesr   r   parametrizer   r   r   r   r   r9   r6   r   r     s     
1v{	#T2.	1v~	&R0	sL	!3+E [[=uEO FO [[=uEA FA [[=uE> F>r9   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   r9   r6   <module>r     sH       - 8 8 > >M/ M/^
5 5D!> !>r9   