
    5[g9                         d dl Zd dlmZ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assert_allcloseassert_equal)cont2discrete)dlsimss2tfss2zpklsimlti)tf2ssimpulsedimpulsestepdstepc                   Z    e 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 Zd Zy)TestC2Dc                    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
      }d}t	        ||||f|d      \  }}	}
}}t        ||       t        ||	       t        ||
       t        ||       t        ||       y )N   r            ?      ?      ?      ?        Qտ)a?g6<S?zohmethodnpeyefullarrayc2dr   r   )selfacbcccdcad_truthbd_truthdt_requestedadbdcddddts                `/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s    VVAYWWVS!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.   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/   rJ   r-   r.   r;   r<   r0   r1   r2   r3   r4   s                   r5   test_gbtzTestC2D.test_gbtP   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_eulerj   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       @rN   g      ?gzG?backward_diffr    rK   rP   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?rA   gUUUUUU?g?g>X%bilinearr    gffffff?rF   rC   rD   rB   rE   rG   r"   rP   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   )rA   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   rH   rI   N)r	   r
   r'   r   )r(   ABCDcnumcdenczcpckhrJ   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   rF   r   g      $@e   r   )TUX0rV   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      \  }}}t        |d       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   )r(   tfr]   r^   r4   s        r5   test_simo_tfzTestC2D.test_simo_tf<  sc    1v1vA'2t}S"Ra.T:q"g;'78tDr7   c                 b   d}ddgddggddgf}t        ||      \  }}}|d   d   |d   f}t        ||      \  }}}	|d   d   |d   f}
t        |
|      \  }}}t        ||	       t        ||       t        |t        j                  ||f      d       t        ||d       t        ||d       y )Nr   r      r   gvIh%<=r   )r'   r   r   r#   vstack)r(   tsr   r]   r^   r4   tf1num1den1dt1tf2num2den2dt2s                 r5   test_multioutputzTestC2D.test_multioutputE  s    2wA!Q(2r{S"!uQxAc2,dC!uQxAc2,dC 	RR 	RYYd|45A 	T.T.r7   N)__name__
__module____qualname__r6   r=   r?   rL   rQ   rT   rW   r_   rk   r   r   r   r    r7   r5   r   r      sG    .&...,04.002*.X..(("T&6PE/r7   r   c                       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}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                  |       y )Ng333333ӿ皙?rF   gffffffr   r   gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?g?)	r#   r&   r   to_discreter   rm   rn   ro   rp   )	r(   rm   rn   ro   rp   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%		1%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   rB   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_tfq  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   rN   r   r   
   r   )r   rN      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   casespytestmark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#   numpy.testingr   r   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  - 8 8 > >L/ L/\
5 5D!> !>r7   