
    -ii<                     F   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dS )    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dS )TestC2Dc                 4   |                     d|j                  }|                    dd|j                  }|                    ddgddgddgg          }|                    dgdgd	gg          }d
|                     d          z  }|                    dd          }d}t	          ||||f|d          \  }	}
}}}t          ||	           t          ||
           t          ||           t          ||           t          j        ||d          sJ d S )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                 k/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/signal/tests/test_cont2discrete.pytest_zohzTestC2D.test_zoh   s,   VVARZV((WWVS
W33ZZ$sCj3+>??ZZ#w/00$rvvayy0776#455 "b"b!1<NNNBB!(B///!(B///!"b)))!"b)))|Be<<<<<<<<    c                 R   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d	|                     d          z  }|                    dd
          }|}|                    dgdgdgg          }	d}
t          ||||f|
d          \  }}}}}t	          ||           t	          ||           t	          ||           t	          |	|           t          j        ||
d          sJ 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*   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(   sQ   VVAYYWWVS!!ZZ$sCj3+>??ZZ#w/00 %rvvayy0776#455:: 1201124 5 5  "b"b!1<NNNBB!(B///!(B///!(B///!(B///|Be<<<<<<<<r<   c                 R   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d|                     d          z  }|                    dd	          }|}|                    d
gdgdgg          }	d}
t          ||||f|
d          \  }}}}}t	          ||           t	          ||           t	          ||           t	          |	|           t          j        ||
d          sJ d S )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?   sL   VVAYYWWVS!!ZZ$sCj3+>??ZZ#u-.. %rvvayy0776#455::x#9:: "b"b!1<(13 3 3BB 	"(B///!(B///!(B///!(B///|Be<<<<<<<<r<   c                 ^   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d}d	}d
|                     d          z  }|                    dd          }	|                    ddgddgddgg          }
|                    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/   r0   r1   r4   rP   r2   r3   rA   rB   r5   r6   r7   r8   r9   s                    r:   test_gbtzTestC2D.test_gbtU   se   VVAYYWWVS!!ZZ$sCj3+>??ZZ#w/00?7763''::Sz #Sz #Sz+ , , ::w #u &x) * * !"b"b!1<(-U< < <BB 	"(B///!(B///!(B///!(B/////r<   c                 X   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d}d	|                     d          z  }|                    dd          }|                    ddgddgddgg          }	|}
t          ||||f|d
          \  }}}}}t	          ||           t	          ||           t	          |	|           t	          |
|           t          j        ||d          sJ d S )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   sX   VVAYYWWVS!!ZZ$sCj3+>??ZZ#w/00?7764((::c{ #Sz #T{, - -  "b"b!1<(/1 1 1BB 	"(B///!(B///!(B///!(B///|Be<<<<<<<<r<   c                 X   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d}d	|                     d          z  }|                    dd          }|                    d
d	gd	d	gd	dgg          }	|                    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       @rT   g      ?gzG?backward_diffr    rQ   rV   s                   r:   test_backward_diffzTestC2D.test_backward_diff   s^   VVAYYWWVS!!ZZ$sCj3+>??ZZ#w/00?7763''::Sz #Sz #Sz+ , , ::w #u %w( ) ) !"b"b!1<(79 9 9BB 	"(B///!(B///!(B///!(B/////r<   c                 B   |                     d          }|                    dd          }|                    ddgddgddgg          }|                    dgdgdgg          }d}d	|                     d          z  }|                    dd
          }|                    ddgddgdd
gg          }	|                    dgd
gdgg          }
t          ||||f|d          \  }}}}}t	          ||           t	          ||           t	          |	|           t	          |
|           t          j        ||d          sJ d|                     d          z  }|                    dd          }|                    ddgddgddgg          }	|                    dgdgdgg          }
d
}t          ||||f|d          \  }}}}}t	          ||           t	          ||           t	          |	|           t	          |
|           t          j        ||          sJ d S )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   sz   VVAYYWWVS!!ZZ$sCj3+>??ZZ#w/00*7769--::Y/ )95 )957 8 8 :: 12 ){ 235 6 6 !"b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///|Be<<<<<< ?7763''::SzC:SzBCC::wx899  "b"b!1<(24 4 4BB 	"(B///!(B///!(B///!(B///|L"-------r<   c                 b   |                     g d          }|                     g d          }|                     g dg          }|                     g d          }d}t          ||f|d          \  }}}	t          ||           t          ||           t          j        ||	          sJ d S )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MMNOOzzFFFGGD$<eDDDS"!$,,,!$,,,|L"-------r<   c                    |                     ddg          }|                     d|                    d          z  d|                    d          z  g          }d}|                    ddg          }|                    d	d
g          }d}d}t          |||f|d          \  }	}
}}t	          ||	           t	          ||
           t          j        ||          sJ t          j        ||          sJ d S )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"''!**,dRWWQZZ.?@AA**.0ABCC**DDF G G!7GS"9<).0 0 0ua 	"'5111!'5111|C#####|L"-------r<   T)np_onlyc                 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   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LLf%%%f%%% BB++
B  #BB<5NNNdD"D!!!D!!!D!!!!!r<   c                    fd}                     dgg          }                     dgg          }                     dgg          }                     dgg          }d}                    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                 4                         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  s   	# 	# 	# 	# 	# JJy!!JJwJJwJJwKK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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           d S )	Nr   r   {Gz?gUxegMbP?r   r   gT(|)r)   r   )r,   tfrc   rd   r9   s        r:   test_simo_tfzTestC2D.test_simo_tfB  s     1v1vA'2t}}S"Tzzzza.T::::q"g;'78tDDDDDDr<   c                    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           d S )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 SyyyySyyyy 	RYd|445AAA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.       = = =&= = =.= = =,0 0 04= = =00 0 02*. *. *.X. . .. . .( d###(" (" $#("T&6 &6 &6P d###E E $#E d###/ / $#/ / /r<   r   Tzlti currently not supported)rs   reasonc                       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}d}t          j        dd	gd
dgg          }t          j        dgdgg          }t          ||||          }	|	                    |          }
t	          |
j        |           t	          |
j        |           t	          |
j        |           t	          |
j        t          j	        |
j                             t          |	|          }t	          |j        |           t	          |j        |           t	          |j        |           t	          |j        t          j	        |j                             d S )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  s   HtSkC;/00HqcA3Z  Hq!fX,.?@,.?@B C C,-0A/BCDDaAq//%%%,,	5)))	5)))	1%%%	2=#;#;<<<w2&&&
E***
E***
A&&&
BM(*$=$=>>>>>r<   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   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  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4r<   N)r   r   r   r   r   r   r<   r:   r   r   e  s2        ? ? ?65 5 5 5 5r<   r   c                   v   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	        
                    d
e          d                         Zej	        
                    d
e          d             Zej	        
                    d
e          d             ZdS )TestC2dInvariantsr   )r   rT   r   r   
   r   )r   rT      r   r   r   )r   r   r   r   zsys,sample_time,samples_numberc                 ~   t          t          |j        |                    }|                    |          |z  }t	          ||          \  }}t          t          ||d          t          |                    \  }}t          ||	                                z  |d         	                                           d S )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 G G"%d))- - -9ioo&7&7719K9K9M9MNNNNNr<   c                 x   t          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   r   r   s	            r:   test_step_invariantz%TestC2dInvariants.test_step_invariant  s    C
C(())yy((;6C4(((9Sk%@@@CIINNN9	))9Q<+=+=+?+?@@@@@r<   c                 X   t          t          |j        |                    }|                    |          |z  }t	          |||          \  }}}t          t          ||d          |          \  }}}t          |                                |                                           d S )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  s    C
C(())yy((;6sdd3339aCU C C CtLL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	sLLL	!	!3+E w))[=uEEO O FE *)O [=uEEA A FEA [=uEE> > FE> > >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 8 8 8 8 8 8 8 8 8 8 8 8 > > > > > > > > > > > > > >
 ;/  3O/ O/ O/ O/ O/ O/ O/ O/b
 $'DEEE'5 '5 '5 '5 '5 '5 '5 FE'5T 3%> %> %> %> %> %> %> %> %> %>r<   