
    Ug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dS )    N)assert_array_almost_equalassert_almost_equalassert_allcloseassert_equal)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d
 Zd Zd Zd ZdS )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          ||           d S )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                d/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s   VAYYWVS!!Xc{S#Jd<==XuseeW-..$rvayy076#455 "b"b!1<NNNBB!(B///!(B///!"b)))!"b)))L"-----    c                 2   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          |	|           d S )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#   s6   VAYYWVS!!Xc{S#Jd<==XuseeW-.. %rvayy076#4558/0/0013 4 4  "b"b!1<NNNBB!(B///!(B///!(B///!(B///L"-----r7   c                 2   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          |	|           d S )Nr   r   r   r   r   r   r   r   g)a?g      ?g      ?r   r    r"   r:   s                  r5   test_impulsezTestC2D.test_impulse:   s1   VAYYWVS!!Xc{S#Jd<==XusecU+,, %rvayy076#4558fXuvh788 "b"b!1<(13 3 3BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 N   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          |
|           d S )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   sU   VAYYWVS!!Xc{S#Jd<==XuseeW-..?763''8c3Z!3Z!3Z) * * 8eW!U$X' ( ( !"b"b!1<(-U< < <BB 	"(B///!(B///!(B///!(B/////r7   c                 8   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          ||           d S )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=   VAYYWVS!!Xc{S#Jd<==XuseeW-..?764((8dC[!3Z!4[* + +  "b"b!1<(/1 1 1BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 H   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          |	|           d S )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   sN   VAYYWVS!!Xc{S#Jd<==XuseeW-..?763''8c3Z!3Z!3Z) * * 8eW!U#W& ' ' !"b"b!1<(79 9 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          ||           d S )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   sM   VAYYWVS!!Xc{S#Jd<==XuseeW-..*769--8c9-'3'35 6 6 8/0'[013 4 4 !"b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///L"--- ?763''8c3Z#sc3Z@AA8eWsefX677  "b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///L"-----r7   c                 L   t          j        g d          }t          j        g d          }t          j        g dg          }t          j        g d          }d}t          ||f|d          \  }}}t          ||           t          ||           t	          ||           d S )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    x)))**x)))**xKKKLMMxDDDEED$<eDD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          ||           d S )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"'!**,dRWQZZ.?@AA#%6799;!7GS"9<).0 0 0ua 	"'5111!'5111C###L"-----r7   c                 Z   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          ||           dS )	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LLf%%%f%%% BB++
B  #BB<5NN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          ||                    dd          ||          \  }}}d|
dd         |
dd         z   z  }t          |                                |d           dS )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                 0    t          j        d| z            S )Ng      @)r#   sin)ts    r5   uz'TestC2D.test_discrete_approx.<locals>.u  s    6#'??"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  su   	# 	# 	# HugYHseWHseWHseWK4%%qTAaD[QqTT aAq\Q"<<<4 Aq!Q<J777 BssGbf$%ssVdbjjQ&7&72"EEES#
 d3B3i$qrr(*+		T55555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           d S )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r'   r   r   )r(   tfr]   r^   r4   s        r5   test_simo_tfzTestC2D.test_simo_tf<  s    1v1vA'2t}}S"Ra.T::::q"g;'78tDDDDDDr7   c                    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           d S )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 	RYd|445AAA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      s        . . .&. . ... . .,0 0 04. . .00 0 02*. *. *.X. . .. . .((" (" ("T&6 &6 &6PE E E/ / / / /r7   r   c                       e Zd Zd Zd ZdS )
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          ||||          }|                    d          }t	          |j        |           t	          |j        |           t	          |j        |           t	          |j        |           d S )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   HtSkC;/00HqcA3Z  Hq!fX,.?@,.?@B C C,-0A/BCDDaAq//%%d++	5)))	5)))	1%%%	1%%%%%r7   c                    t          ddgddg          }|                    d          }t          j        ddg          }t          j        ddg          }t	          |j        |d	           t	          |j        |d	           d S )
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  s    3*sCj))ooe$$ (C!3455(C!3455 	t4444t444444r7   N)r   r   r   r   r   r   r7   r5   r   r   ]  s2        & & &&5 5 5 5 5r7   r   c                   R   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                            d
e          d             Zej                            d
e          d             Z	ej                            d
e          d             Z
dS )TestC2dInvariantsr   )r   rN   r   r   
   r   )r   rN      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                 8   t          j        |          |z  }t          ||          \  }}t          t	          ||d          t          |                    \  }}t          ||                                z  |d                                                    d S )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  s    y((;6sd+++9CY G G G"%d))- - -9ioo&7&7719K9K9M9MNNNNNr7   c                 2   t          j        |          |z  }t          ||          \  }}t          t	          ||d          t          |                    \  }}t          |                                |d                                                    d S )Nr   r   r    r   r   )r#   r   r   r   r'   r   r   r   r   s           r5   test_step_invariantz%TestC2dInvariants.test_step_invariant  s    y((;6C4(((9Sk%@@@CIINNN9	))9Q<+=+=+?+?@@@@@r7   c                    t          j        |          |z  }t          |||          \  }}}t          t	          ||d          |          \  }}}t          |                                |                                           d S )N)r   r   r9   r    )r   )r#   r   r   r   r'   r   r   r   s           r5   test_linear_invariantz'TestC2dInvariants.test_linear_invariant  s    y((;6sdd3339aCU C C CtLL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	sLLL	!	!3+E [=uEEO O FEO [=uEEA A FEA [=uEE> > FE> > >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      sJ      8 8 8 8 8 8 8 8 8 8 8 8  - - - - - - 8 8 8 8 8 8 8 8 8 8 8 8 8 8 > > > > > > > > > > > > > >L/ L/ L/ L/ L/ L/ L/ L/\
5 5 5 5 5 5 5 5D!> !> !> !> !> !> !> !> !> !>r7   