
    e!hP9                         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y)    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y)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        ||       y )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                m/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s    VVARZZ(WWVS

3XXc{S#Jd<=XXuseeW-.$rvvay0776#45 "b"b!1<NBB!(B/!(B/!"b)!"b)L"-    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	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        |	|       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-   r.   cd_truthdd_truthr/   r0   r1   r2   r3   r4   s                  r5   test_fohz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  "b"b!1<NBB!(B/!(B/!(B/!(B/L"-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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        |	|       y )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r    r:   r;   s                  r5   test_impulsezTestC2D.test_impulse;   s    VVAYWWVS!XXc{S#Jd<=XXusecU+, %rvvay0776#4588fXuvh78 "b"b!1<(13BB 	"(B/!(B/!(B/!(B/L"-r7   c                 4   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        |
|       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*   r+   r,   r/   rK   r-   r.   r<   r=   r0   r1   r2   r3   r4   s                   r5   test_gbtzTestC2D.test_gbtQ   s#   VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7763'88c3Z!3Z!3Z) * 88eW!U$X' ( !"b"b!1<(-U<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	        ||||f|d
      \  }
}}}}t        ||
       t        ||       t        ||       t        |	|       t        ||       y )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   VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7764(88dC[!3Z!4[* +  "b"b!1<(/1BB 	"(B/!(B/!(B/!(B/L"-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        |	|       y )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   s   VVAYWWVS!XXc{S#Jd<=XXuseeW-.?7763'88c3Z!3Z!3Z) * 88eW!U#W& ' !"b"b!1<(7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        ||       y )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   s   VVAYWWVS!XXc{S#Jd<=XXuseeW-.*7769-88c9-'3'35 6 88/0'[013 4 !"b"b!1<(24BB 	"(B/!(B/!(B/!(B/L"- ?7763'88c3Z#sc3Z@A88eWsefX67  "b"b!1<(24BB 	"(B/!(B/!(B/!(B/L"-r7   c                 2   t        j                  g d      }t        j                  g d      }t        j                  g dg      }t        j                  g d      }d}t        ||f|d      \  }}}t        ||       t        ||       t	        ||       y )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|    xx)*xx)*xxKLMxxDED$<e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        ||       y )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"''!*,dRWWQZ.?@A#%6799;!7GS"9<).0ua 	"'51!'51C#L"-r7   c                     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   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f%f% BB+
B  #BB<5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        ||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                 2    t        j                  d| z        S )Ng      @)r"   sin)ts    r5   uz'TestC2D.test_discrete_approx.<locals>.u  s    66#'?"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  s2   	# HHugYHHseWHHseWHHseW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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       y )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r'   r   )r(   tfr^   r_   r4   s        r5   test_simo_tfzTestC2D.test_simo_tf=  se    1v1vA'2t}S"Tzza.T:q"g;'78tDr7   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   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 SyySyy 	RYYd|45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^    [[. .&...,04.002*.X..(("T&6PE/r7   r   c                       e Zd Zd Zd Zy)
TestC2dLtic                 0   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        ||||      }|j                  d      }t	        |j
                  |       t	        |j                  |       t	        |j                  |       t	        |j                  t        j                  |j                               y )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    HHtSkC;/0HHqcA3Z HHq!fX,.?@,.?@B C,-0A/BCDaAq/%%d+		5)		5)		1%		2==#;<r7   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   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  sp    3*sCj)ooe$ ((C!345((C!345 	t4t4r7   N)r   r   r   r   r   r   r7   r5   r   r   ^  s    =&5r7   r   c                   2   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                  j                  d
e      d        Zej                  j                  d
e      d        Z	ej                  j                  d
e      d        Z
y)TestC2dInvariantsr   )r   rO   r   r   
   r   )r   rO      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                     t        j                  |      |z  }t        ||      \  }}t        t	        ||d      t        |            \  }}t        ||j                         z  |d   j                                y )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  sh    yy(;6sd+9CY G"%d)-9ioo&7719K9K9MNr7   c                     t        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   s           r5   test_step_invariantz%TestC2dInvariants.test_step_invariant  s`    yy(;6C4(9Sk%@CIN9	)9Q<+=+=+?@r7   c                     t        j                  |      |z  }t        |||      \  }}}t        t	        ||d      |      \  }}}t        |j                         |j                                y )N)r   r   r9   r    )r   )r"   r   r
   r   r'   r   r   r   s           r5   test_linear_invariantz'TestC2dInvariants.test_linear_invariant  s\    yy(;6sdd39aCU Ct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	sL	!3+E [[=uEO FO [[=uEA FA [[=uE> F>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      sH       - 8 8 > >M/ M/^
5 5D!> !>r7   