
    bi?T                        d dl Z d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZ  G d d      Z G d d      Z G d	 d
      Z G d d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)    N)raises)assert_array_almost_equalassert_almost_equalxp_assert_closexp_assert_equal)dlsimdstepdimpulsetf2zpkltidlti
StateSpaceTransferFunctionZerosPolesGain	dfreqrespdbodeBadCoefficientsc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestDLTIc                 $   t        j                  ddgddgg      }t        j                  g dg dg      }t        j                  ddgg      }t        j                  g dg      }d}t        j                  t        j                  d	d
d      d d t         j                  f   t        j
                  dd      t        j
                  dd      f      }t        j                  d	dd      }t        j                  g dg      j                  }t        j                  d	d	gddgddgddgddgg      }	t        |||||f||      \  }
}}t        ||       t        |	|       t        ||
       t        dd       |d	dgd d f   }t        j                  ddg      }t        |||||f||      \  }
}}t        ||       t        |	|       t        |
      t        |      k(  sJ t        j                  ddg      }t        j                  g d      }t        j                  g d g      j                  }t        ||df|d d d	f   |      \  }
}t        ||       t        ||
       t        j                  |d d d	f         }|j                  d!      }t        ||df||      \  }
}t        ||       t        ||
       t        j                  dd"g      }t        j                  d#t        j                  d$      z  d%t        j                  d$      z  g      }d}t        j                  g d&g      j                  }t        |||df|d d d	f   |      \  }
}t        ||       t        ||
       t        d'gd'd'g      }t        t        t        ||       y )(N?皙?皙ɿg?r   皙        皙?r   333333?r   r   r         ?r   g      @   )num)r"      g{Gz?gMb`       @)gMbPgc#GgD2?gъo?g#Y?ga2U0*S?gMb@?gTƿ?gkHcCG?g'h'?g56Ng9!@gbmӿ)r$            r         ?r   )r   r)   皙?)r   r   g
@gqqg^B{	7@)r"                       ?r&   y             )r   r)   r%   g      @g      @r$   )npasarrayhstacklinspacenewaxisfullarrayTr   r   lenreshapesqrtr   assert_raisesAttributeError)selfabcddtut_in
yout_truth
xout_truthtoutyoutxoutu_sparset_sparser#   denuflatzdpdksystems                         Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/signal/tests/test_dltisys.py
test_dlsimzTestDLTI.test_dlsim   s[   JJc
T3K01JJ(*:;<JJc
|$JJ()* IIr{{1cq1!RZZ-@wwvt,wwvv.0 1 {{1cq) XX  , - . /0a	 	
 ZZ!Q"(&!1")7!3"*I!6"+Z!8	!: ;
 !!Q1b!11d;dD!*d3!*d3!$- 	i aVQY<::sCj) !Q1b!18XFdD!*d3!*d34yCI%%% jj#t%jj)XX  2 3 4 56A	 	 Cc?AadGT:
d!$
3!$- 

1QT7#d#Cc?E48
d!$
3!$- XXsDk"XXsRWWQZ'
):;<XX9:;==
BAs+Qq!tWd;
d!$
3!$- aS1a&!neVQ7    c                    t        j                  ddgddgg      }t        j                  g dg dg      }t        j                  ddgg      }t        j                  g dg      }d}t        j                  g d	      t        j                  g d
      t        j                  g d      f}t        |||||fd      \  }}t        |      dk(  sJ t	        dt        |            D ]9  }	||	   j
                  d   dk(  sJ t        ||	   j                         ||	          ; dgddgdf}
t        j                  g d      }t        |
d      \  }}t        |      dk(  sJ t        |d   j                         |       t        |
d   |
d         dz   }t        |d      \  }}t        |      dk(  sJ t        |d   j                         |       t        dgddg      }t        t        t        |       y )Nr   r   r   r   r   r   r    r!   )
r   {Gz?g9v?gMO?gNz1?g0g >㷿gW	N3Ŀg+(ͿgGӿ)
r   g333333gV-g,Ԛga̦ۢgQo&g*~gIطgp,%Բg[W)
r   {Gzg9vgMOgNz1cg0?g >?gW	N3?g+(?gG?
   nr'   r   r)   )r   r)   r   r$   r!   )r-   r.   r	   r5   rangeshaper   flattenr   r   r8   r9   )r:   r;   r<   r=   r>   r?   yout_step_truthrD   rE   itfinyout_tfstepzpkinrN   s                 rO   
test_dstepzTestDLTI.test_dstepg   s   JJc
T3K01JJ(*:;<JJc
|$JJ()* :: 'D E :: '7 8 :: 'B C	D Aq!Q+r2
d4yA~~q#d)$ 	MA7==#r)))%d1goo&79KL	M
 Sz3'jj141%
d4yA~~!$q'//"3[AtAwQ(615A&
d4yA~~!$q'//"3[A aS1a&!neV4rQ   c                    t        j                  ddgddgg      }t        j                  g dg dg      }t        j                  ddgg      }t        j                  g dg      }d}t        j                  g d	      t        j                  g d
      t        j                  g d      f}t        |||||fd      \  }}t        |      dk(  sJ t	        dt        |            D ]9  }	||	   j
                  d   dk(  sJ t        ||	   j                         ||	          ; dgddgdf}
t        j                  g d      }t        |
d      \  }}t        |      dk(  sJ t        |d   j                         |       t        |
d   |
d         dz   }t        |d      \  }}t        |      dk(  sJ t        |d   j                         |       t        dgddg      }t        t        t        |       y )Nr   r   r   r   r   r   r    r!   )
r   rS   g~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%)
r   g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`)
r   rT   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?rU   rV   r'   r   r)   )r   r)   g      r$   rX   )r-   r.   r
   r5   rY   rZ   r   r[   r   r   r8   r9   )r:   r;   r<   r=   r>   r?   yout_imp_truthrD   rE   r]   r^   yout_tfimpulser`   rN   s                 rO   test_dimpulsezTestDLTI.test_dimpulse   s   JJc
T3K01JJ(*:;<JJc
|$JJ()* ** &C D ** &D E ** &A BC q!Q2."5
d4yA~~q#d)$ 	LA7==#r)))%d1goo&79JK	L
 Sz3'$45da(
d4yA~~!$q'//"3^DtAwQ(61eq)
d4yA~~!$q'//"3^D aS1a&!nh7rQ   c                    t        j                  dgg      }t        j                  dgg      }t        j                  dgg      }t        j                  dgg      }d}t        j                  |      j                  dd      }t	        ||||df|      \  }}}	t        |t        j                  t        |                   t        |t        j                  |df             t        |	t        j                  |df             y )Nr   r"   r$   r-   r3   zerosr6   r   r   arangefloat)
r:   r;   r<   r=   r>   rW   r@   rD   rE   rF   s
             rO   test_dlsim_trivialzTestDLTI.test_dlsim_trivial   s    HHseWHHseWHHseWHHseWHHQKA& !Q1a!4dDbiia12bhh1v./bhh1v./rQ   c                    t        j                  dgg      }t        j                  dgg      }t        j                  dgg      }t        j                  dgg      }d}t        j                  |      j                  dd      }t	        ||||df|d      \  }}}	t        |t        j                  t        |                   dt        j                  t        |            z  j                  dd      }
t        ||
       t        |	|
       y )Nr!   r   r)   r"   rg   r$   x0rh   )r:   r;   r<   r=   r>   rW   r@   rD   rE   rF   expecteds              rO   test_dlsim_simple1dzTestDLTI.test_dlsim_simple1d   s    HHseWHHseWHHseWHHseWHHQKA& !Q1a!:dDbiia12299U1X..77A>h'h'rQ   c                 d   d}d}t        j                  |dgd|gg      }t        j                  dgdgg      }t        j                  ddgddgg      }t        j                  dgdgg      }d}t        j                  |      j                  dd      }t	        ||||df|d      \  }	}
}t        |	t        j                  t        |                   t        j                  ||g      t        j                  t        |            j                  dd      z  }t        |
|       t        ||       y )	Nr!   g      ?r   r)   r"   rg   r$   rn   rh   )r:   lambda1lambda2r;   r<   r=   r>   rW   r@   rD   rE   rF   rp   s                rO   test_dlsim_simple2dzTestDLTI.test_dlsim_simple2d   s#   HHwnGn& 'HHsee HHsCjCj" #HHsee HHQKA& !Q1a!:dDbiia12HHgw/0 "		%( 3 ; ;B BCh'h'rQ   c                    d}d}t        j                  |dgd|gg      }t        j                  ddgddgg      }t        j                  ddgg      }t        j                  ddgg      }d}t        ||||df|      \  }}	dd|z
  z  d|t        j                  |      z  z
  z  }
dd|z
  z  d|t        j                  |      z  z
  z  }t	        |	d   d d df   |
       t	        |	d   d d df   |       t        j                  ddg      }t        ||||df||	      \  }}t        j                  ||g      t        j                  d
|dz         j                  d
d      z  }d|dd d f<   |d |df   t        j                  |d|dz   d d f   |      z   }|d |df   t        j                  |d|dz   d d f   |      z   }t	        |d   d d df   |       t	        |d   d d df   |       dgddgdf}t        |d      \  }\  }t	        |g d       t        |j                  g dg       t        |d      \  }\  }t	        |g d       t        |j                  g dg       y )Nr!   g      ?r   r)   rU   r$   rV   r   )rW   ro   rg   r+   r   r'   )r   r   r*   )r   r)   g      ?)r   r$   r!   )
r-   r3   r	   rj   r   r
   r6   dotr   r4   )r:   rs   rt   r;   r<   r=   r>   rW   tsysstp0stp1ro   tiyiimpy0y1rN   tys                        rO   test_more_step_and_impulsez#TestDLTI.test_more_step_and_impulse   s~   HHwnGn& 'HHsCjCj" #HHsCj\"HHsCj\" 1aA!,B q7{#g1.E(EFq7{#g1.E(EF1adT*1adT* XXsCj!1aAq/Q26B xx'*+IIb!a%088Q?@AqD	!QZ"&&Qq1uWaZ"55!QZ"&&Qq1uWaZ"551adR(1adR( %#tc*!$4A=)m_-6Q'4A=)k]+rQ   N)
__name__
__module____qualname__rP   ra   re   rl   rq   ru   r    rQ   rO   r   r      s)    S8j+5Z*8X
0((*,,rQ   r   c                       e Zd Zd Zy)TestDltic           	         d}t        dgdg|      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  |k(  sJ t        t        j                  g       t        j                  dg      d|      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  |k(  sJ t        dgdgdd|      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  |k(  sJ t        t        t         d       t        t        t         ddddd       y )Nr   r$   rg   r?   r'   )r   
isinstancer   r   r?   r-   r3   r   r   r8   
ValueError)r:   r?   ss      rO   test_dlti_instantiationz TestDlti.test_dlti_instantiation  s:    !rdr"!-...!T"""a%%%ttrzz "rxx~qR8!^,,,!T"""a%%%ttrzz !rdAqR(!Z(((!T"""a%%%ttrzz 	j$*j$1aA6rQ   N)r   r   r   r   r   rQ   rO   r   r     s    7rQ   r   c                       e Zd Zd Zd Zd Zy)TestStateSpaceDiscc                 F   d}t        dddd|       t        dgdgdgdg|       t        t        j                  ddgddgg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg      |       t        ddddd       y )	Nr   r$   r   r&   r'   r(   r   T)r   r-   r3   r:   r?   s     rO   test_initializationz&TestStateSpaceDisc.test_initialization=  s    1aA"%A3aS1#"-288aVaV,-rxx!qc
/C88aVH%rxx!2	?1aA$'rQ   c                 *   t        ddddd      }t        |j                         t               sJ t        |j                         t              sJ t        |j                         t              sJ t        |      |usJ |j                         |usJ y )Nr$   r&   r'   r(   r   r   )r   r   to_ssto_tfr   to_zpkr   r:   r   s     rO   test_conversionz"TestStateSpaceDisc.test_conversionF  s    q!Qd+!'')Z000!'')%5666!((*n555 !}A%%%wwy!!!rQ   c                     t        ddddd      }t        |j                  dg       t        |j                  dg       y )Nr$   r   r   r)   r   )r   r   polesri   r   s     rO   test_propertiesz"TestStateSpaceDisc.test_propertiesQ  s6    
 q!Qd+"&"&rQ   Nr   r   r   r   r   r   r   rQ   rO   r   r   <  s    (	"'rQ   r   c                       e Zd Zd Zd Zd Zy)TestTransferFunctionc                     d}t        dd|       t        dgdg|       t        t        j                  dg      t        j                  dg      |       t        ddd       y Nr   r$   r   r&   T)r   r-   r3   r   s     rO   r   z(TestTransferFunction.test_initialization\  sO    A"%!qcb)1#!"=A$'rQ   c                 .   t        ddgddgd      }t        |j                         t              sJ t        |j	                         t               sJ t        |j                         t              sJ t        |      |usJ |j	                         |usJ y )Nr$   r   rg   r   r   )r   r   r   r   r   r   r   r   s     rO   r   z$TestTransferFunction.test_conversiond  s    aVaW6!'')Z000!'')%5666!((*n555  "!+++wwy!!!rQ   c                     t        ddgddgd      }t        |j                  dg       t        |j                  dg       y )Nr$   r   rg   r   r   r)   r   )r   r   r   ri   r   s     rO   r   z$TestTransferFunction.test_propertieso  s:    
 aVaW6"&"&rQ   Nr   r   rQ   rO   r   r   [  s    (	"'rQ   r   c                       e Zd Zd Zd Zy)TestZerosPolesGainc                     d}t        ddd|       t        dgdgd|       t        t        j                  dg      t        j                  dg      d|       t        dddd       y r   )r   r-   r3   r   s     rO   r   z&TestZerosPolesGain.test_initializationz  sW    q!Q2&sQCr*rxx}bhhsmQ2>q!Q4(rQ   c                 (   t        dddd      }t        |j                         t              sJ t        |j	                         t
              sJ t        |j                         t               sJ t        |      |usJ |j                         |usJ y )Nr$   r&   r'   r   r   )r   r   r   r   r   r   r   r   s     rO   r   z"TestZerosPolesGain.test_conversion  s~    1at,!'')Z000!'')%5666!((*n555 a )))xxz"""rQ   N)r   r   r   r   r   r   rQ   rO   r   r   y  s    )	#rQ   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	Test_dfreqrespc                     t        dddgd      }g d}t        ||      \  }}g d}t        |j                  |d	       g d
}t        |j                  |d	       y )Nr$   r   r   r   )r   r$   rU   w)gU0*?g;On?gfj+r(   decimal)gClÿg&WgZd;O?)r   r   r   realimag)r:   rN   r   Hexpected_reexpected_ims         rO   test_manualzTest_dfreqresp.test_manual  sY     "!aY371%1 0AFFK; 1AFFK;rQ   c                    t        dddgd      }g d}t        ||      \  }}t        j                  |dz        }t        j                  |j
                  |      t        j                  |j                  |      z  }|j                  }t        |j                  |       |j                  }t        |j                  |       y )Nr$   r   r   r   r   r$   rU   d   r   r,   )
r   r   r-   exppolyvalr#   rI   r   r   r   )r:   rN   r   r   jwr   r   r   s           rO   	test_autozTest_dfreqresp.test_auto  s     "!aY371%1VVAF^JJvzz2&FJJ)CC ffAFFK0 ffAFFK0rQ   c                     t        dddgd      }d}t        j                  dt        j                  dd      }t	        ||	      \  }}t        ||       y )
Nr$   r   r   r   rU   r   FendpointrV   )r   r-   r0   pir   r   )r:   rN   rW   
expected_wr   r   s         rO   test_freq_rangezTest_dfreqresp.test_freq_range  sM     "!aY37[[BEE2>
1%1Az*rQ   c                    t        dgddgd      }t        j                         5  t        j                  ddt               t        j                  ddt               t        |d	      \  }}d d d        d
   dk(  sJ y # 1 sw Y   xY wNr$   rg   r   r   ignorezdivide by zerozinvalid value encounteredr&   rV   r   r   )r   warningscatch_warningsfilterwarningsRuntimeWarningr   )r:   rN   r   r   s       rO   test_pole_onezTest_dfreqresp.test_pole_one  s     "1#2w37$$& 	*##H.>O##5~GVq)DAq		*
 trzz	* 	*s   AB  B	c                 L    t        dgddg      }t        t        t        |       y Nr$   )r   r8   r9   r   r:   rN   s     rO   
test_errorzTest_dfreqresp.test_error  s     aS1a&!ni8rQ   c                    t        dgg d      }t        j                  g dg dg dg      }t        j                  g dg      j                  }t        j                  g dg      }d}t        ||||      }dt        j                  d	dd
      z  }t        j                         5  t        j                  dt               t        ||      \  }}	t        ||      \  }
}d d d        t        	       y # 1 sw Y   xY w)Nr&   )r$   r+   r   r   )r!   r   r   )r$   r   r   )r   r$   r   )r   r   r&   r   g      $@r!   r   r   )r   r-   r3   r4   rj   r   r   simplefilterr   r   r   )r:   	system_TFABCD	system_SSr   w1H1w2H2s               rO   test_from_state_spacez$Test_dfreqresp.test_from_state_space  s     !o.	HHk! " HHi[!##HHi[!Aq!$	"))Bq$$$$& 	/!!(O<yA.FByA.FB	/
 	B#	/ 	/s   &;C66C?c                     t        g dgd      }t        dddg      }g d}t        ||      \  }}t        ||      \  }}t        ||       y )Nr*   r   r$   r   r   r   )r   r   r   )r:   
system_ZPKr   r   r   r   r   r   s           rO   test_from_zpkzTest_dfreqresp.test_from_zpk  sQ    "cU3'
q$i(	:+B9*BB#rQ   N)
r   r   r   r   r   r   r   r   r   r   r   rQ   rO   r   r     s%    <1"+
9
$*$rQ   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)	Test_bodec                     d}t        dddg|      }dddt        j                  g}t        ||      \  }}}g d}t	        ||d	
       g d}t	        ||d	
       t        t        j                  |      |z  |       y )Nr   r   r$   r   r   r!   r   )gD!gvq!g$~;#g0*(r(   r   )gzGgJAg_)Pg     f)r   r-   r   r   r   r   r3   )	r:   r?   rN   r   r   magphaseexpected_magexpected_phases	            rO   r   zTest_bode.test_manual  s     !#4yR8#q"%% v+C =Cq9 BE>1= 	b("-rQ   c                    t        dddgd      }t        j                  dddt        j                  g      }t	        ||      \  }}}t        j
                  |dz        }t        j                  |j                  |      t        j                  |j                  |      z  }d	t        j                  t        |            z  }t        ||       t        j                  t        j                  |            }	t        ||	       y )
Nr   r$   r   r   r   r!   r   r,   g      4@)r   r-   r3   r   r   r   r   r#   rI   log10absr   rad2degangle)
r:   rN   r   r   r   r   r   r   r   r   s
             rO   r   zTest_bode.test_auto  s     "#4yS9HHc3255)*v+CVVAF^JJvzz2&FJJ)CC bhhs1v..C. BHHQK0E>2rQ   c                     d}t        dddgd      }d}t        j                  dt        j                  |d	      |z  }t	        ||
      \  }}}t        ||       y )Nr   r   r$   r   r   rU   r   Fr   rV   )r   r-   r0   r   r   r   )r:   r?   rN   rW   r   r   r   r   s           rO   
test_rangezTest_bode.test_range  sY     !#4yS9[[BEE1u=B
f*3Az*rQ   c                    t        dgddgd      }t        j                         5  t        j                  ddt               t        j                  ddt               t        |d	      \  }}}d d d        d
   dk(  sJ y # 1 sw Y   xY wr   )r   r   r   r   r   r   )r:   rN   r   r   r   s        rO   r   zTest_bode.test_pole_one  s     "1#2w37$$& 	/##H.>O##5~G!&A.MAsE		/
 trzz	/ 	/s   ABB
c                 @    t        dgg dd      }t        |d       y )Nr$   )r$   r   r   r   r   r&   rV   )r   r   r   s     rO   test_imaginaryzTest_bode.test_imaginary'  s     "1#{s;frQ   c                 L    t        dgddg      }t        t        t        |       y r   )r   r8   r9   r   r   s     rO   r   zTest_bode.test_error-  s     aS1a&!neV4rQ   N)	r   r   r   r   r   r   r   r   r   r   rQ   rO   r   r     s     .&3"	+
5rQ   r   c                   "    e Zd ZdZd Zd Zd Zy)TestTransferFunctionZConversionz=Test private conversions between 'z' and 'z**-1' polynomials.c                 $   t        j                  g d      }t        j                  g d      }t        j                  ||      \  }}t	        ||       t	        ||       t        j
                  ||      \  }}t	        ||       t	        ||       y )Nr%   r'   r(   )      @      r-   r.   r   
_z_to_zinvr   
_zinv_to_zr:   r#   rI   num2den2s        rO   	test_fullz)TestTransferFunctionZConversion.test_full6  sr    jj%jj%%00c:
dT"T"%00c:
dT"T"rQ   c                 ,   t        j                  ddg      }t        j                  g d      }t        j                  ||      \  }}t	        g d|       t	        ||       t        j
                  ||      \  }}t	        g d|       t	        ||       y )Nr%   r'   )2   r   r   )r   r&   r'   )r%   r'   r   r   r   s        rO   test_numeratorz.TestTransferFunctionZConversion.test_numeratorB  sv    jj#q"jj$%00c:
dT*T"%00c:
dT*T"rQ   c                 ,   t        j                  g d      }t        j                  ddg      }t        j                  ||      \  }}t	        ||       t	        g d|       t        j
                  ||      \  }}t	        ||       t	        g d|       y )Nr   r   r   )r   r"   r   )r   r   r   r   r   s        rO   test_denominatorz0TestTransferFunctionZConversion.test_denominatorN  sv    jj$jj#q"%00c:
dT"T*%00c:
dT"T*rQ   N)r   r   r   __doc__r   r  r  r   rQ   rO   r   r   3  s    G
#
#
+rQ   r   ) r   numpyr-   pytestr   r8   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   r   rQ   rO   <module>r
     s      * = = = =
J, J,Z7 7>' '>' '<# #*Y$ Y$xF5 F5R%+ %+rQ   