
    tKg6T                        d dl Zd dlmZmZmZmZmZmZm	Z	 d dl
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)assert_equalassert_array_almost_equalassert_array_equalassert_allcloseassert_assert_almost_equalsuppress_warnings)raises)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                 6   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        |
      |j                  d	          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   r   lenshape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                         c/home/alanp/www/video.onchill/myenv/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SY

1. 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        t	        |      d       t        dt	        |            D ]>  }	t        ||	   j                  d   d       t        ||	   j                         ||	          @ dgddgdf}
t        j                  g d      }t        |
d      \  }}t        t	        |      d       t        |d   j                         |       t        |
d   |
d         dz   }t        |d      \  }}t        t	        |      d       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$   )r0   r1   r   r   r8   ranger9   r   flattenr   r   r<   r=   )r>   r?   r@   rA   rB   rC   yout_step_truthrH   rI   itfinyout_tfstepzpkinrR   s                 rS   
test_dstepzTestDLTI.test_dstepf   s   JJc
T3K01JJ(*:;<JJc
|$JJ()* :: 'D E :: '7 8 :: 'B C	D Aq!Q+r2
dSY"q#d)$Aaq)2.%d1goo&79KL %
 Sz3'jj141%
dSY"!$q'//"3[AtAwQ(615A&
dSY"!$q'//"3[A aS1a&!neV4rU   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        t	        |      d       t        dt	        |            D ]>  }	t        ||	   j                  d   d       t        ||	   j                         ||	          @ dgddgdf}
t        j                  g d      }t        |
d      \  }}t        t	        |      d       t        |d   j                         |       t        |
d   |
d         dz   }t        |d      \  }}t        t	        |      d       t        |d   j                         |       t        dgddg      }t        t        t        |       y )Nr   r   r   r   r   r"   r#   r$   )
r    rW   g~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%)
r   g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`)
r    rX   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?rY   rZ   r*   r   r,   )r    r,   g      r'   r\   )r0   r1   r   r   r8   r]   r9   r   r^   r   r   r<   r=   )r>   r?   r@   rA   rB   rC   yout_imp_truthrH   rI   r`   ra   yout_tfimpulserc   rR   s                 rS   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SY"q#d)$Aaq)2.%d1goo&79JK %
 Sz3'$45da(
dSY"!$q'//"3^DtAwQ(61eq)
dSY"!$q'//"3^D aS1a&!nh7rU   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'   r0   r6   zerosr:   r   r   arangefloat)
r>   r?   r@   rA   rB   r[   rD   rH   rI   rJ   s
             rS   test_dlsim_trivialzTestDLTI.test_dlsim_trivial   s    HHseWHHseWHHseWHHseWHHQKA& !Q1a!4dD458!4541a&!1241a&!12rU   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%   rj   r'   x0rk   )r>   r?   r@   rA   rB   r[   rD   rH   rI   rJ   expecteds              rS   test_dlsim_simple1dzTestDLTI.test_dlsim_simple1d   s    HHseWHHseWHHseWHHseWHHQKA& !Q1a!:dD458!45299U1X..77A>4*4*rU   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%   rj   r'   rq   rk   )r>   lambda1lambda2r?   r@   rA   rB   r[   rD   rH   rI   rJ   rs   s                rS   test_dlsim_simple2dzTestDLTI.test_dlsim_simple2d   s#   HHwnGn& 'HHsee HHsCjCj" #HHsee HHQKA& !Q1a!:dD458!45HHgw/0 "		%( 3 ; ;B BC4*4*rU   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,   rY   r'   rZ   r   )r[   rr   rj   r.   r   r*   )r   r   r-   )r   r,   g      ?)r   r'   r$   )
r0   r6   r   rm   r   r   r:   dotr   r7   )r>   rv   rw   r?   r@   rA   rB   r[   tsysstp0stp1rr   tiyiimpy0y1rR   tys                        rS   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=)13306Q'4A=)133.rU   N)
__name__
__module____qualname__rT   rd   rh   ro   rt   rx   r    rU   rS   r   r      s)    S8j+5Z*8X
3++*,/rU   r   c                       e Zd Zd Zy)TestDltic           	      `   d}t        dgdg|      }t        t        |t                     t        t        |t                      t        t        |t                      t        |j                  |       t        t        j                  g       t        j                  dg      d|      }t        t        |t                     t        t        |t                      t        t        |t                      t        |j                  |       t        dgdgdd|      }t        t        |t                     t        t        |t                      t        t        |t                      t        |j                  |       t        t        t         d       t        t        t         ddddd       y )Nr!   r'   rj   rC   r*   )r   r   
isinstancer   r   r   rC   r0   r6   r   r   r<   
ValueError)r>   rC   ss      rS   test_dlti_instantiationz TestDlti.test_dlti_instantiation  s4    !rdr"
1./0
1d#$Jq#&&'QTT2 "rxx~qR8
1n-.
1d#$Jq#&&'QTT2 !rdAqR(
1j)*
1d#$Jq#&&'QTT2 	j$*j$1aA6rU   N)r   r   r   r   r   rU   rS   r   r     s    7rU   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   r0   r6   r>   rC   s     rS   test_initializationz&TestStateSpaceDisc.test_initialization<  s    1aA"%A3aS1#"-288aVaV,-rxx!qc
/C88aVH%rxx!2	?1aA$'rU   c                 p   t        ddddd      }t        t        |j                         t                      t        t        |j	                         t
                     t        t        |j                         t                     t        t        |      |u       t        |j                         |u       y )Nr'   r)   r*   r+   r!   r   )r   r   r   to_ssto_tfr   to_zpkr   r>   r   s     rS   test_conversionz"TestStateSpaceDisc.test_conversionE  sz    q!Qd+
1779j12
1779&678
188:~67 	
1Q&'	"#rU   c                     t        ddddd      }t        |j                  dg       t        |j                  dg       y )Nr'   r!   r   r   )r   r   polesrl   r   s     rS   test_propertiesz"TestStateSpaceDisc.test_propertiesP  s6    
 q!Qd+QWWqc"QWWqc"rU   Nr   r   r   r   r   r   r   rU   rS   r   r   ;  s    (	$#rU   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   r0   r6   r   s     rS   r   z(TestTransferFunction.test_initialization[  sO    A"%!qcb)1#!"=A$'rU   c                 t   t        ddgddgd      }t        t        |j                         t                     t        t        |j                         t                      t        t        |j                         t                     t        t        |      |u       t        |j                         |u       y Nr'   r   rj   r!   r   )r   r   r   r   r   r   r   r   r   s     rS   r   z$TestTransferFunction.test_conversionc  s    aVaW6
1779j12
1779&678
188:~67 	 #1,-	"#rU   c                     t        ddgddgd      }t        |j                  dg       t        |j                  dg       y r   )r   r   r   rl   r   s     rS   r   z$TestTransferFunction.test_propertiesn  s:    
 aVaW6QWWqc"QWWqc"rU   Nr   r   rU   rS   r   r   Z  s    (	$#rU   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   r0   r6   r   s     rS   r   z&TestZerosPolesGain.test_initializationy  sW    q!Q2&sQCr*rxx}bhhsmQ2>q!Q4(rU   c                 n   t        dddd      }t        t        |j                         t                     t        t        |j                         t                     t        t        |j                         t                      t        t        |      |u       t        |j                         |u       y )Nr'   r)   r*   r!   r   )r   r   r   r   r   r   r   r   r   s     rS   r   z"TestZerosPolesGain.test_conversion  sy    1at,
1779j12
1779&678
188:~67 	q!*+
!#$rU   N)r   r   r   r   r   r   rU   rS   r   r   x  s    )	%rU   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'   rY   w)gU0*?g;On?gfj+r+   decimal)gClÿg&WgZd;O?)r   r   r   realimag)r>   rR   r   Hexpected_reexpected_ims         rS   test_manualzTest_dfreqresp.test_manual  sY     "!aY371%1 0AFFK; 1AFFK;rU   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'   rY   d   r   r/   )
r   r   r0   exppolyvalr&   rM   r   r   r   )r>   rR   r   r   jwr   r   r   s           rS   	test_autozTest_dfreqresp.test_auto  s     "!aY371%1VVAF^JJvzz2&FJJ)CC ffAFFK0 ffAFFK0rU   c                     t        dddgd      }d}t        j                  dt        j                  dd      }t	        ||	      \  }}t        ||       y )
Nr'   r   r   r   rY   r   FendpointrZ   )r   r0   r3   pir   r   )r>   rR   r[   
expected_wr   r   s         rS   test_freq_rangezTest_dfreqresp.test_freq_range  sM     "!aY37[[BEE2>
1%1Az*rU   c                     t        dgddgd      }t               5 }|j                  t        d       |j                  t        d       t	        |d	      \  }}d d d        t        d
   d       y # 1 sw Y   xY wNr'   rj   r   r   zdivide by zero)messagezinvalid value encounteredr)   rZ   r   r    )r   r	   filterRuntimeWarningr   r   )r>   rR   supr   r   s        rS   test_pole_onezTest_dfreqresp.test_pole_one  sp     "1#2w37 CJJ~/?J@JJ~/JJKVq)DAq ! 	QqT2	 ! s   ?A33A<c                 L    t        dgddg      }t        t        t        |       y Nr'   )r   r<   r=   r   r>   rR   s     rS   
test_errorzTest_dfreqresp.test_error  s     aS1a&!ni8rU   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               5 }|j                  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   r0   r6   r7   rm   r	   r   r   r   r   )r>   	system_TFABCD	system_SSr   r   w1H1w2H2s                rS   test_from_state_spacez$Test_dfreqresp.test_from_state_space  s     !o.	HHk! " HHi[!##HHi[!Aq!$	"))Bq$$ CJJ'yA.FByA.FB !
 	B# ! s   6C''C0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           rS   test_from_zpkzTest_dfreqresp.test_from_zpk  sQ    "cU3'
q$i(	:+B9*BB#rU   N)
r   r   r   r   r   r   r   r   r   r   r   rU   rS   r   r     s%    <1"+	9
$*$rU   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   r0   r   r   r   r   r6   )	r>   rC   rR   r   r   magphaseexpected_magexpected_phases	            rS   r   zTest_bode.test_manual  s     !#4yR8#q"%% v+C =Cq9 BE>1= 	RXXa[2%r*rU   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   r0   r6   r   r   r   r   r&   rM   log10absr   rad2degangle)
r>   rR   r   r   r   r   r   r   r   r   s
             rS   r   zTest_bode.test_auto  s     "#4yS9HHc3255)*v+CVVAF^JJvzz2&FJJ)CC bhhs1v..C. BHHQK0E>2rU   c                     d}t        dddgd      }d}t        j                  dt        j                  |d	      |z  }t	        ||
      \  }}}t        ||       y )Nr   r"   r'   r   r   rY   r   Fr   rZ   )r   r0   r3   r   r   r   )r>   rC   rR   r[   r   r   r   r   s           rS   
test_rangezTest_bode.test_range  sY     !#4yS9[[BEE1u=B
f*3Az*rU   c                     t        dgddgd      }t               5 }|j                  t        d       |j                  t        d       t	        |d	      \  }}}d d d        t        d
   d       y # 1 sw Y   xY wr   )r   r	   r   r   r   r   )r>   rR   r   r   r   r   s         rS   r   zTest_bode.test_pole_one  sr     "1#2w37 CJJ~/?J@JJ~/JJK!&A.MAsE ! 	QqT2	 ! s   A A44A=c                 @    t        dgg dd      }t        |d       y )Nr'   )r'   r   r   r   r   r)   rZ   )r   r   r   s     rS   test_imaginaryzTest_bode.test_imaginary$  s     "1#{s;frU   c                 L    t        dgddg      }t        t        t        |       y r   )r   r<   r=   r   r   s     rS   r   zTest_bode.test_error*  s     aS1a&!neV4rU   N)	r   r   r   r   r   r   r   r   r   r   rU   rS   r   r     s     +&3"	+	5rU   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                     g d}g d}t        j                  ||      \  }}t        ||       t        ||       t        j                  ||      \  }}t        ||       t        ||       y )Nr)   r*   r+   r%         r   
_z_to_zinvr   
_zinv_to_zr>   r&   rM   num2den2s        rS   	test_fullz)TestTransferFunctionZConversion.test_full3  s`    %00c:
dS$S$%00c:
dS$S$rU   c                     ddg}g d}t        j                  ||      \  }}t        g d|       t        ||       t        j                  ||      \  }}t        g d|       t        ||       y )Nr)   r*   r   )r   r)   r*   )r)   r*   r   r   r   s        rS   test_numeratorz.TestTransferFunctionZConversion.test_numerator?  sd    !f%00c:
dY%S$%00c:
dY%S$rU   c                     g d}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        rS   test_denominatorz0TestTransferFunctionZConversion.test_denominatorK  sd    !f%00c:
dS$Y%%00c:
dS$Y%rU   N)r   r   r   __doc__r  r  r  r   rU   rS   r   r   0  s    G
 
 
&rU   r   )"numpyr0   numpy.testingr   r   r   r   r   r   r	   pytestr
   r<   scipy.signalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   rS   <module>r     s    . . . += = = =
J/ J/Z7 7># #># #<% %*X$ X$vE5 E5P%& %&rU   