
    doi<                        S SK r 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  \R*                  R,                  r\" \
5       " S S5      5       r\" SS	S
9 " S S5      5       r\" \
5       " S S5      5       rg)    N)assert_array_almost_equalxp_assert_closemake_xp_test_case)cont2discrete)dlsimss2tfss2zpklsimlti)tf2ssimpulsedimpulsestepdstepc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\" SS9S 5       rS r\" SS9S 5       r\" SS9S 5       rSrg)TestC2D   c                    UR                  SUR                  S9nUR                  SSUR                  S9nUR                  SS/SS/SS//5      nUR                  S/S/S	//5      nS
UR                  S5      -  nUR                  SS5      nSn[	        X#XE4USS9u  ppn[        Xi5        [        Xz5        [        XK5        [        X\5        [        R                  " XSS9(       d   eg )N   )dtyper            ?      ?      ?      ?        Qտ)a?g6<S?zohmethod+=abs_tol)eyefloat64fullasarrayc2dr   mathisclose)selfxpacbcccdcad_truthbd_truthdt_requestedadbdcddddts                 a/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohTestC2D.test_zoh   s    VVARZZV(WWVS

W3ZZ$sCj3+>?ZZ#w/0$rvvay0776#45 ""!1<N!(/!(/!")!")||Be<<<    c                    UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nS	UR                  S5      -  nUR                  SS
5      nUnUR                  S/S/S//5      n	Sn
[        X#XE4U
SS9u  ppn[	        Xk5        [	        X|5        [	        X5        [	        X5        [
        R                  " XSS9(       d   e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/   r0   r1   r2   r3   r4   cd_truthdd_truthr5   r6   r7   r8   r9   r:   s                   r;   test_fohTestC2D.test_foh(   s    VVAYWWVS!ZZ$sCj3+>?ZZ#w/0 %rvvay0776#45:: 1201124 5  ""!1<N!(/!(/!(/!(/||Be<<<r>   c                    UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nSUR                  S5      -  nUR                  SS	5      nUnUR                  S
/S/S//5      n	Sn
[        X#XE4U
SS9u  ppn[	        Xk5        [	        X|5        [	        X5        [	        X5        [
        R                  " XSS9(       d   eg )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r!   r#   r$   rA   rB   s                   r;   test_impulseTestC2D.test_impulse?   s    VVAYWWVS!ZZ$sCj3+>?ZZ#u-. %rvvay0776#45::x#9: ""!1<(13 	"(/!(/!(/!(/||Be<<<r>   c                    UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nSnS	nS
UR                  S5      -  nUR                  SS5      n	UR                  SS/SS/SS//5      n
UR                  S/S/S//5      n[        X#XE4USUS9u  ppn[	        X5        [	        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/   r0   r1   r2   r5   rT   r3   r4   rC   rD   r6   r7   r8   r9   r:   s                    r;   test_gbtTestC2D.test_gbtU   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7763'::Sz #Sz #Sz+ , ::w #u &x) * !""!1<(-U< 	"(/!(/!(/!(/r>   c                    UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nSnS	UR                  S5      -  nUR                  SS5      nUR                  SS/SS/SS//5      n	Un
[        X#XE4US
S9u  ppn[	        X{5        [	        X5        [	        X5        [	        X5        [
        R                  " XSS9(       d   eg )Nr   r   r   r   r   r   r   r         ?eulerr!   r#   r$   rA   r-   r.   r/   r0   r1   r2   r5   r3   r4   rC   rD   r6   r7   r8   r9   r:   s                   r;   
test_eulerTestC2D.test_eulero   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7764(::c{ #Sz #T{, -  ""!1<(/1 	"(/!(/!(/!(/||Be<<<r>   c                    UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nSnS	UR                  S5      -  nUR                  SS5      nUR                  S
S	/S	S	/S	S//5      n	UR                  S/S/S//5      n
[        X#XE4USS9u  ppn[	        X{5        [	        X5        [	        X5        [	        X5        g )Nr   r   r   r   r   r   r   r   g       @rY   g      ?gzG?backward_diffr!   rU   r[   s                   r;   test_backward_diffTestC2D.test_backward_diff   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7763'::Sz #Sz #Sz+ , ::w #u %w( ) !""!1<(79 	"(/!(/!(/!(/r>   c                 v   UR                  S5      nUR                  SS5      nUR                  SS/SS/SS//5      nUR                  S/S/S//5      nSnS	UR                  S5      -  nUR                  SS
5      nUR                  SS/SS/SS
//5      n	UR                  S/S
/S//5      n
[        X#XE4USS9u  ppn[	        X{5        [	        X5        [	        X5        [	        X5        [
        R                  " XSS9(       d   eSUR                  S5      -  nUR                  SS5      nUR                  SS/SS/SS//5      n	UR                  S/S/S//5      n
S
n[        X#XE4USS9u  ppn[	        X{5        [	        X5        [	        X5        [	        X5        [
        R                  " Xo5      (       d   eg )Nr   r   r   r   r   r   r   r   g?rK   gUUUUUU?g?g>X%bilinearr!   r#   r$   gffffff?rP   rM   rN   rL   rO   rQ   rA   r[   s                   r;   test_bilinearTestC2D.test_bilinear   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0*7769-::Y/ )95 )957 8 :: 12 ){ 235 6 !""!1<(24 	"(/!(/!(/!(/||Be<<< ?7763'::SzC:SzBC::wx89  ""!1<(24 	"(/!(/!(/!(/||L----r>   c                 &   UR                  / SQ5      nUR                  / SQ5      nUR                  / SQ/5      nUR                  / SQ5      nSn[        X#4USS9u  pxn	[        XG5        [        XX5        [        R                  " Xi5      (       d   eg )N)r   r   r   )r   r   r   )rK   gNZۿgϱ)_?)r   g]Ogoh?r   r    r!   )r)   r*   r   r+   r,   )
r-   r.   numcdencnumddendr5   numdenr:   s
             r;   test_transferfunctionTestC2D.test_transferfunction   s    zz+,zz+,zzMNOzzFGD<eD"!$,!$,||L----r>   c                    UR                  SS/5      nUR                  SUR                  S5      -  SUR                  S5      -  /5      nSnUR                  SS/5      nUR                  S	S
/5      nSnSn[        X#U4USS9u  pp[	        XY5        [	        Xj5        [
        R                  " X{5      (       d   e[
        R                  " X5      (       d   eg )Nr   g      y              ?r   y             r   gwRN?g.-.?y\9O?(?y\9O?(ֿr    r!   )arraysqrtr)   r*   r   r+   r,   )r-   r.   zeros_cpoles_ck_czeros_dpolls_dk_dr5   zerospoleskr:   s                r;   test_zerospolesgainTestC2D.test_zerospolesgain   s    ((C;'((C"''!*,dRWWQZ.?@A**.0ABC**DDF G!7S"9<).0a 	"'1!'1||C####||L----r>   T)np_onlyc                    SnSnSnSn[        X#XE5      u  pg[        X#XE5      u  pn
SnSnSSU-
  U-  U-  -   SX-  U-  -
  -  nX-  SX-  U-  -
  -  nUSX-  U-  -
  -  nX\U-  U-  -   n[        XUU5      u  nn[        Xg4USUS9u  nnn[        UU5        [        UU5        [        XUU5      u  nnn[        XU
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   rR   rS   N)r   r	   r*   r   )r-   r.   ABCDcnumcdenczcpckhrT   AdBdCdDddnumddenc2dnumc2ddenr:   dzdpdkc2dzc2dpc2dks                               r;   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 22r*
d !$qeLf%f% BB+
B  #BB<5NdD"D!D!D!r>   c                   ^ U4S jnTR                  S//5      nTR                  S//5      nTR                  S//5      nTR                  S//5      nSnTR                  SSS5      nUS   US   -
  n	U" U5      n
[        X4XV4XUS	9u  pn[        X4XV4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                 ,   > TR                  SU -  5      $ )Ng      @)sin)tr.   s    r;   u'TestC2D.test_discrete_approx.<locals>.u"  s    66#'?"r>   g{Gzr   rP   r   g      $@e   r   )TUX0rc   r!   r   N)r   r   x0g-C6?rtol)r)   linspacer
   r*   r   reshaper   ravel)r-   r.   r   abcdr   r   r:   u1youtxoutdsysu2t2td2yd2xd2ymids    `                  r;   test_discrete_approxTestC2D.test_discrete_approx  s#   	# JJy!JJwJJwJJwKK4%qTAaD[qT aA\Q< A!<J7 BsGbf$%sVdjjQ&72ES#
 d3Bi$qr(*+		T5r>   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-   tfrk   rl   r:   s        r;   test_simo_tfTestC2D.test_simo_tfB  se     1v1vA'2t}"Tzza.T:q"g;'78tDr>   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   npvstack)r-   tsr   rk   rl   r:   tf1num1den1dt1tf2num2den2dt2s                 r;   test_multioutputTestC2D.test_multioutputL  s    2wA!Q(2{"!uQxAc,C!uQxAc,C yyyy 	RYY|45A 	..r>    N)__name__
__module____qualname____firstlineno__r<   rE   rH   rV   r\   r`   rd   rm   r{   skip_xp_backendsr   r   r   r   __static_attributes__r   r>   r;   r   r      s    =&=.=,04=002*.X..( d#(" $("T&6P d#E $E d#/ $/r>   r   Tzlti currently not supported)r}   reasonc                        \ rS rSrS rS rSrg)
TestC2dLtiie  c                 6   [         R                  " SS/SS//5      n[         R                  " S/S//5      n[         R                  " SS//5      nSnSn[         R                  " SS	/S
S//5      n[         R                  " S/S//5      n[        X#XE5      n	U	R                  US9n
[	        U
R
                  U5        [	        U
R                  U5        [	        U
R                  U5        [	        U
R                  [         R                  " U
R                  5      5        [        XS9n[	        UR
                  U5        [	        UR                  U5        [	        UR                  U5        [	        UR                  [         R                  " UR                  5      5        g )Ng333333ӿ皙?rP   gffffffr   r   g?gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?)r:   )r   rp   r   to_discreter   r   r   r   r   
zeros_liker*   )r-   r.   r   r   r   r   r:   A_resB_ressys_sscsys_ssdsys_ssd2s               r;   test_c2d_ssTestC2dLti.test_c2d_ssg  sE   HHtSkC;/0HHqcA3Z HHq!fX,.?@,.?@B C,-0A/BCDaA/%%%,		5)		5)		1%		2==#;<w&

E*

E*

A&

BMM(**$=>r>   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   rL   r   g?g{Gzt?gi߿gY쭛]g{Gz?)atol)r   r   r   rp   r   rl   rk   )r-   r.   sysnum_resden_ress        r;   test_c2d_tfTestC2dLti.test_c2d_tf  sp    3*sCj)ooe$ ((C!345((C!345 	t4t4r>   r   N)r   r   r   r   r   r   r   r   r>   r;   r   r   e  s    ?65r>   r   c                   R   \ 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\" \\5      \	R                  R                  S\5      S 5       5       r\	R                  R                  S\5      S 5       r\	R                  R                  S\5      S 5       rSrg)TestC2dInvariantsi  r   )r   rY   r   r   
   r   )r   rY      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                    [        [        UR                  U5      5      nUR                  U5      U-  n[	        X%S9u  pg[        [        X#SS9[        U5      S9u  ph[        X7R                  5       -  US   R                  5       5        g )Nr   r   r!   nr   )
tuplemapr)   aranger   r   r*   lenr   r   	r-   r.   r   sample_timesamples_numbertime_	yout_cont	yout_discs	            r;   test_impulse_invariant(TestC2dInvariants.test_impulse_invariant  su     C

C()yy(;6s+CY G"%d)-oo&7719K9K9MNr>   c                    [        [        UR                  U5      5      nUR                  U5      U-  n[	        X%S9u  pg[        [        X#SS9[        U5      S9u  ph[        UR                  5       US   R                  5       5        g )Nr   r    r!   r   r   )
r   r   r)   r   r   r   r*   r   r   r   r   s	            r;   test_step_invariant%TestC2dInvariants.test_step_invariant  sm    C

C()yy(;6C(S%@CIN	)9Q<+=+=+?@r>   c                     [        [        UR                  U5      5      nUR                  U5      U-  n[	        X%US9u  pgn[        [        X#SS9US9u  phn[        UR                  5       UR                  5       5        g )N)r   r   r@   r!   )r   )	r   r   r)   r   r
   r   r*   r   r   r   s	            r;   test_linear_invariant'TestC2dInvariants.test_linear_invariant  si    C

C()yy(;6sd3aCU CtLa	)9??+<=r>   r   N)r   r   r   r   r   casesr   r   r   pytestmarkparametrizer   r  r  r   r   r>   r;   r   r     s    
 
1v{	#T2.	1v~	&R0	sL	!3+E w)[[=uEO F *O [[=uEA FA [[=uE> F>r>   r   )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   r   r   r>   r;   <module>r     s      
  - 8 8 > >
 ;;//  3O/ O/ O/b
 $'DE'5 '5 F'5T 3%> %> %>r>   