
    bi<                     "   d dl Z 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 ej*                  j,                  Z ee
       G d d             Z edd	
       G d d             Z ee
       G d d             Zy)    N)assert_array_almost_equalxp_assert_closemake_xp_test_case)cont2discrete)dlsimss2tfss2zpklsimlti)tf2ssimpulsedimpulsestepdstepc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ed
      d        Zd Z ed
      d        Z ed
      d        Zy)TestC2Dc                    |j                  d|j                        }|j                  dd|j                        }|j                  ddgddgddgg      }|j                  dgdgd	gg      }d
|j                  d      z  }|j                  dd      }d}t	        ||||f|d      \  }	}
}}}t        ||	       t        ||
       t        ||       t        ||       t        j                  ||d      sJ y )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                 `/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s    VVARZZV(WWVS

W3ZZ$sCj3+>?ZZ#w/0$rvvay0776#45 "b"b!1<NBB!(B/!(B/!"b)!"b)||Be<<<    c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d	|j                  d      z  }|j                  dd
      }|}|j                  dgdgdgg      }	d}
t        ||||f|
d      \  }}}}}t	        ||       t	        ||       t	        ||       t	        |	|       t        j                  ||
d      sJ y )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/   r0   r1   r2   r3   cd_truthdd_truthr4   r5   r6   r7   r8   r9   s                   r:   test_fohzTestC2D.test_foh(   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0 %rvvay0776#45:: 1201124 5  "b"b!1<NBB!(B/!(B/!(B/!(B/||Be<<<r<   c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d|j                  d      z  }|j                  dd	      }|}|j                  d
gdgdgg      }	d}
t        ||||f|
d      \  }}}}}t	        ||       t	        ||       t	        ||       t	        |	|       t        j                  ||
d      sJ y )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r    r"   r#   r?   r@   s                   r:   test_impulsezTestC2D.test_impulse?   s
   VVAYWWVS!ZZ$sCj3+>?ZZ#u-. %rvvay0776#45::x#9: "b"b!1<(13BB 	"(B/!(B/!(B/!(B/||Be<<<r<   c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d}d	}d
|j                  d      z  }|j                  dd      }	|j                  ddgddgddgg      }
|j                  dgdgdgg      }t        ||||f|d|      \  }}}}}t	        ||       t	        |	|       t	        |
|       t	        ||       y )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/   r0   r1   r4   rP   r2   r3   rA   rB   r5   r6   r7   r8   r9   s                    r:   test_gbtzTestC2D.test_gbtU   s#   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7763'::Sz #Sz #Sz+ , ::w #u &x) * !"b"b!1<(-U<BB 	"(B/!(B/!(B/!(B/r<   c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d}d	|j                  d      z  }|j                  dd      }|j                  ddgddgddgg      }	|}
t        ||||f|d
      \  }}}}}t	        ||       t	        ||       t	        |	|       t	        |
|       t        j                  ||d      sJ y )Nr   r   r   r   r   r   r   r         ?eulerr    r"   r#   r?   r,   r-   r.   r/   r0   r1   r4   r2   r3   rA   rB   r5   r6   r7   r8   r9   s                   r:   
test_eulerzTestC2D.test_eulero   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7764(::c{ #Sz #T{, -  "b"b!1<(/1BB 	"(B/!(B/!(B/!(B/||Be<<<r<   c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d}d	|j                  d      z  }|j                  dd      }|j                  d
d	gd	d	gd	dgg      }	|j                  dgdgdgg      }
t        ||||f|d      \  }}}}}t	        ||       t	        ||       t	        |	|       t	        |
|       y )Nr   r   r   r   r   r   r   r   g       @rT   g      ?gzG?backward_diffr    rQ   rV   s                   r:   test_backward_diffzTestC2D.test_backward_diff   s   VVAYWWVS!ZZ$sCj3+>?ZZ#w/0?7763'::Sz #Sz #Sz+ , ::w #u %w( ) !"b"b!1<(79BB 	"(B/!(B/!(B/!(B/r<   c                    |j                  d      }|j                  dd      }|j                  ddgddgddgg      }|j                  dgdgdgg      }d}d	|j                  d      z  }|j                  dd
      }|j                  ddgddgdd
gg      }	|j                  dgd
gdgg      }
t        ||||f|d      \  }}}}}t	        ||       t	        ||       t	        |	|       t	        |
|       t        j                  ||d      sJ d|j                  d      z  }|j                  dd      }|j                  ddgddgddgg      }	|j                  dgdgdgg      }
d
}t        ||||f|d      \  }}}}}t	        ||       t	        ||       t	        |	|       t	        |
|       t        j                  ||      sJ y )Nr   r   r   r   r   r   r   r   g?rG   gUUUUUU?g?g>X%bilinearr    r"   r#   gffffff?rL   rI   rJ   rH   rK   rM   r?   rV   s                   r:   test_bilinearz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 !"b"b!1<(24BB 	"(B/!(B/!(B/!(B/||Be<<< ?7763'::SzC:SzBC::wx89  "b"b!1<(24BB 	"(B/!(B/!(B/!(B/||L"---r<   c                 *   |j                  g d      }|j                  g d      }|j                  g dg      }|j                  g d      }d}t        ||f|d      \  }}}	t        ||       t        ||       t        j                  ||	      sJ y )N)r   r   r   )r   r   r   )rG   gNZۿgϱ)_?)r   g]Ogoh?r   r   r    )r(   r)   r   r*   r+   )
r,   r-   numcdencnumddendr4   numdenr9   s
             r:   test_transferfunctionzTestC2D.test_transferfunction   s    zz+,zz+,zzMNOzzFGD$<eDS"!$,!$,||L"---r<   c                    |j                  ddg      }|j                  d|j                  d      z  d|j                  d      z  g      }d}|j                  ddg      }|j                  d	d
g      }d}d}t        |||f|d      \  }	}
}}t	        ||	       t	        ||
       t        j                  ||      sJ t        j                  ||      sJ y )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_dr4   zerospoleskr9   s                r:   test_zerospolesgainzTestC2D.test_zerospolesgain   s    ((C;'((C"''!*,dRWWQZ.?@A**.0ABC**DDF G!7GS"9<).0ua 	"'51!'51||C###||L"---r<   T)np_onlyc                     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        ||       y)	z7Test method='gbt' with alpha=0.25 for tf and zpk cases.g      r   r   r   r   rN   rO   N)r   r	   r)   r   )r,   r-   ABCDcnumcdenczcpckhrP   AdBdCdDddnumddenc2dnumc2ddenr9   dzdpdkc2dzc2dpc2dks                               r:   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f%f% BB+
B  #BB<5NdD"D!D!D!r<   c                 
   fd}j                  dgg      }j                  dgg      }j                  dgg      }j                  dgg      }d}j                  ddd      }|d   |d   z
  }	 ||      }
t        ||||f||
|	      \  }}}t        ||||f|	d
      }d|
dd |
dd z   z  }|dd }t	        ||j                  dd      ||      \  }}}d|dd |dd z   z  }t        |j                         |d       y)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                 ,    j                  d| z        S )Ng      @)sin)tr-   s    r:   uz'TestC2D.test_discrete_approx.<locals>.u"  s    66#'?"r<   g{Gzr   rL   r   g      $@e   r   )TUX0r\   r    r   N)r   r   x0g-C6?rtol)r(   linspacer
   r)   r   reshaper   ravel)r,   r-   r   abcdr   r   r9   u1youtxoutdsysu2t2td2yd2xd2ymids    `                  r:   test_discrete_approxzTestC2D.test_discrete_approx  s3   	# JJy!JJwJJwJJwKK4%qTAaD[qT aAq\Q"<4 Aq!Q<J7 BsGbf$%sVdbjjQ&72"ES#
 d3Bi$qr(*+		T5r<   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       y )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r)   r   )r,   tfrc   rd   r9   s        r:   test_simo_tfzTestC2D.test_simo_tfB  sg     1v1vA'2t}S"Tzza.T:q"g;'78tDr<   c                 N   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       y )Nr   r      r   gvIh%<=r   )r)   r   npvstack)r,   tsr   rc   rd   r9   tf1num1den1dt1tf2num2den2dt2s                 r:   test_multioutputzTestC2D.test_multioutputL  s    2wA!Q(2r{S"!uQxAc2,dC!uQxAc2,dC SyySyy 	RYYd|45A 	T.T.r<   N)__name__
__module____qualname__r;   rC   rE   rR   rW   rZ   r]   re   rr   skip_xp_backendsr   r   r   r    r<   r:   r   r      s    =&=.=,04=002*.X..( d#(" $("T&6P d#E $E d#/ $/r<   r   Tzlti currently not supported)rs   reasonc                       e Zd Zd Zd Zy)
TestC2dLtic                 :   t        j                  ddgddgg      }t        j                  dgdgg      }t        j                  ddgg      }d}d}t        j                  dd	gd
dgg      }t        j                  dgdgg      }t        ||||      }	|	j                  |      }
t	        |
j
                  |       t	        |
j                  |       t	        |
j                  |       t	        |
j                  t        j                  |
j                               t        |	|      }t	        |j
                  |       t	        |j                  |       t	        |j                  |       t	        |j                  t        j                  |j                               y )Ng333333ӿ皙?rL   gffffffr   r   g?gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?)r9   )r   rg   r   to_discreter   ru   rv   rw   rx   
zeros_liker)   )r,   r-   ru   rv   rw   rx   r9   A_resB_ressys_sscsys_ssdsys_ssd2s               r:   test_c2d_sszTestC2dLti.test_c2d_ssg  sK   HHtSkC;/0HHqcA3Z HHq!fX,.?@,.?@B C,-0A/BCDaAq/%%%,		5)		5)		1%		2==#;<w2&

E*

E*

A&

BMM(**$=>r<   c                    t        ddgddg      }|j                  d      }t        j                  ddg      }t        j                  ddg      }t	        |j
                  |d	       t	        |j                  |d	       y )
Nr   rH   r   g?g{Gzt?gi߿gY쭛]g{Gz?)atol)r   r   r   rg   r   rd   rc   )r,   r-   sysnum_resden_ress        r:   test_c2d_tfzTestC2dLti.test_c2d_tf  sp    3*sCj)ooe$ ((C!345((C!345 	t4t4r<   N)r   r   r   r   r   r   r<   r:   r   r   e  s    ?65r<   r   c                   J   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ee      ej                  j                  d
e      d               Zej                  j                  d
e      d        Zej                  j                  d
e      d        Zy)TestC2dInvariantsr   )r   rT   r   r   
   r   )r   rT      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                 0   t        t        |j                  |            }|j                  |      |z  }t	        ||      \  }}t        t        ||d      t        |            \  }}t        ||j                         z  |d   j                                y )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_invariantz(TestC2dInvariants.test_impulse_invariant  s     C

C()yy(;6sd+9CY G"%d)-9ioo&7719K9K9MNr<   c                 *   t        t        |j                  |            }|j                  |      |z  }t	        ||      \  }}t        t        ||d      t        |            \  }}t        |j                         |d   j                                y )Nr   r   r    r   r   )
r   r   r(   r   r   r   r)   r   r   r   r   s	            r:   test_step_invariantz%TestC2dInvariants.test_step_invariant  su    C

C()yy(;6C4(9Sk%@CIN9	)9Q<+=+=+?@r<   c                    t        t        |j                  |            }|j                  |      |z  }t	        |||      \  }}}t        t        ||d      |      \  }}}t        |j                         |j                                y )N)r   r   r>   r    )r   )	r   r   r(   r   r
   r   r)   r   r   r   s	            r:   test_linear_invariantz'TestC2dInvariants.test_linear_invariant  sq    C

C()yy(;6sdd39aCU CtL9a	)9??+<=r<   N)r   r   r   r   casesr   r   r   pytestmarkparametrizer   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<   