
˽Xc           @` s   d  d l  m Z m Z m Z d  d l Z d  d l m Z 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 e f d     YZ d e f d	     YZ d e f d
     YZ e d k r e   n  d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   TestCaset   run_module_suitet   assert_array_almost_equalt   assert_almost_equalt   assert_allclose(   t   cont2discrete(   t   dlsimt   ss2tft   ss2zpkt   lsim2t   ltit   TestC2Dc           B` sk   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z RS(   c         C` s  t  j d  } d t  j 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  } d
 t  j d  } d } t | | | | f | d d \ } }	 }
 } } t | |  t | |	  t | |
  t | |  t | |  d  S(   Ni   g      ?i   g      ?g      ?g      ?g        gQտg)a?g6<S?t   methodt   zoh(   i   i   (   i   i   (   t   npt   eyet   onest   arrayt   c2dR   R   (   t   selft   act   bct   cct   dct   ad_trutht   bd_trutht   dt_requestedt   adt   bdt   cdt   ddt   dt(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_zoh   s    *!0c         C` sX  t  j d  } d t  j 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  } d t  j 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 d d | \ } } } } } t | |  t | |  t |	 |  t |
 |  d  S(   Ni   g      ?i   g      ?g      ?g      ?g        gQտg      @g?g333333?g?g333333?gffffff?g?g=
ףp=ʿR   t   gbtt   alpha(   i   i   gUUUUUU?(   i   i   (   R   R   R   R   R   R   (   R   R   R   R   R   R   R%   R   R   t   cd_trutht   dd_truthR   R   R    R!   R"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_gbt$   s(    *!	c         C` s>  t  j d  } d t  j 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  } d t  j d  } t  j d d g d d g d d g g  } | }	 t | | | | f | d
 d \ }
 } } } } t | |
  t | |  t | |  t |	 |  t | |  d  S(   Ni   g      ?i   g      ?g      ?g      ?g        gQտg      ?R   t   euler(   i   i   (   i   i   (   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   R&   R'   R   R   R    R!   R"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt
   test_euler>   s$    *!	c         C` sL  t  j d  } d t  j 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  } d t  j 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 d \ }
 } } } } t | |
  t | |  t | |  t |	 |  d  S(   Ni   g      ?i   g      ?g      ?g      ?g        gQտg       @g      ?g      ?gzG?R   t   backward_diff(   i   i   (   i   i   (   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   R&   R'   R   R   R    R!   R"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_backward_diffV   s&    *!	c         C` sA  t  j d  } d t  j 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  } d t  j 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 d \ }
 } } } } t | |
  t | |  t | |  t |	 |  t | |  d t  j d  } d t  j 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 d \ }
 } } } } t | |
  t | |  t | |  t |	 |  t | |  d  S(#   Ni   g      ?i   g      ?g      ?g      ?g        gQտg      @g      @g      @g?g>X%R   t   bilineargffffff?g?g?g333333?g333333?gffffff?g=
ףp=ʿ(   i   i   g?gUUUUUU?(   i   i   gUUUUUU?gUUUUUU?gUUUUUU?gUUUUUU?gUUUUUU?gUUUUUU?(   i   i   gUUUUUU?(   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   R&   R'   R   R   R    R!   R"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_bilinearo   s@    *!	*!c   	      C` s   t  j d d d g  } t  j d d d g  } t  j d d d g g  } t  j d d d	 g  } d } t | | f | d
 d \ } } } t | |  t | |  t | |  d  S(   Ng      ?g      ?g      ?g      ?g      @gNZۿgϱ)_?g]Ogoh?R   R   gUUUUUU?(   R   R   R   R   R   (	   R   t   numct   denct   numdt   dendR   t   numt   denR"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_transferfunction   s    $c         C` s   t  j d d g  } t  j d t  j d  d t  j d  g  } d } d d g } d d g } d } d } t | | | f | d d \ } }	 }
 } t | |  t | |	  t | |
  t | |  d  S(   Ng      ?g      y              ?i   y              g      ?gwRN?g.-.?g\9O?y        (?R   R   y\9O?(?y\9O?(ֿ(   R   R   t   sqrtR   R   R   (   R   t   zeros_ct   poles_ct   k_ct   zeros_dt   polls_dt   k_dR   t   zerost   polest   kR"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_zerospolesgain   s    /	c         C` s  d } d } d } d } t  | | | |  \ } } t | | | |  \ } } }	 d }
 d } d d | |
 | d | |
 | } |
 | d | |
 | } | d | |
 | } | | | | } t  | | | |  \ } } t | | f |
 d d d | \ } } } t | |  t | |  t | | | |  \ } } } t | | |	 f |
 d d d | \ } } } } t | |  t | |  t | |  d	 S(
   s7   Test method='gbt' with alpha=0.25 for tf and zpk cases.g      g      ?g      ?g      ?i   R   R$   R%   N(   R
   R   R   R   (   R   t   At   Bt   Ct   Dt   cnumt   cdent   czt   cpt   ckt   hR%   t   Adt   Bdt   Cdt   Ddt   dnumt   ddent   c2dnumt   c2ddenR"   t   dzt   dpt   dkt   c2dzt   c2dpt   c2dk(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_gbt_with_sio_tf_and_zpk   s*    &*0c         C` s|  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 } | |  }	 t | | | | f d	 | d
 |	 d | d d d d \ } }
 } t | | | | f | d d } d |	 d  |	 d } | d  } t | d | j d d  d | d | \ } } } d |
 d  |
 d } t | j   | d d d S(   s  
        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         S` s   t  j d |   S(   Ng      @(   R   t   sin(   t   t(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   u   s    g{Gzg      ?g?i    g      $@ie   i   t   Tt   Ut   X0t   rtolg&.>t   atolgdy=R   R-   g      ?iR\   R[   t   x0g-C6?N(	   R   R   t   linspaceR   R   R	   t   reshapeR   t   ravel(   R   R\   t   at   bt   ct   dRb   R[   R"   t   u1t   youtt   xoutt   dsyst   u2t   t2t   td2t   yd2t   xd2t   ymid(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_discrete_approx   s"    	'!
3c         C` s   d d g d d g g d d g f } t  | d  \ } } } |  j | d  t | d d g d d t | d d g d d g g d d d  S(	   Ni   i    g{Gz?gUxeR`   gMbP?igT(|(   R   t   assertEqualR   (   R   t   tfR3   R4   R"   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_simo_tf  s
    $c         C` s  d } d d g d d g g d d g f } t  | |  \ } } } | d d | d f } t  | |  \ } } }	 | d d | d f }
 t  |
 |  \ } } } |  j | |	  |  j | |  t | t j | | f  d d t | | d d t | | d d d  S(   Ng{Gz?i   ii   i    R`   gvIh%<=(   R   Ru   R   R   t   vstack(   R   t   tsRv   R3   R4   R"   t   tf1t   num1t   den1t   dt1t   tf2t   num2t   den2t   dt2(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_multioutput  s    $"(   t   __name__t
   __module__R#   R(   R*   R,   R.   R5   R@   RY   Rt   Rw   R   (    (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyR      s   					,			*	)		t
   TestC2dLtic           B` s   e  Z d    Z d   Z RS(   c   	      C` s   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 |  d  S(   Ng333333ӿg?g?gffffffi    i   gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?g?(	   R   R   R   t   to_discreteR   RA   RB   RC   RD   (	   R   RA   RB   RC   RD   t   A_rest   B_rest   sys_ssct   sys_ssd(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_c2d_ss3  s    !c         C` s   t  d d g d d g  } | j d  } t j d d g  } t j d d g  } t | j | d d	 t | j | d d	 d  S(
   Ng      ?g333333?g      ?g?g{Gzt?gi߿gY쭛]Ra   g{Gz?(   R   R   R   R   R   R4   R3   (   R   t   syst   num_rest   den_res(    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   test_c2d_tfF  s    (   R   R   R   R   (    (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyR   2  s   	c           B` s   e  Z d    Z d   Z RS(   c   	      C` s   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 |  d  S(   Ng333333ӿg?g?gffffffi    i   gГ<?gs?g?g{Kp?g1vM ?g_ǷJ(?g?(	   R   R   R   R   R   RA   RB   RC   RD   (	   R   RA   RB   RC   RD   R   R   R   R   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyR   T  s    !c         C` s   t  d d g d d g  } | j d  } t j d d g  } t j d d g  } t | j | d d	 t | j | d d	 d  S(
   Ng      ?g333333?g      ?g?g{Gzt?gi߿gY쭛]Ra   g{Gz?(   R   R   R   R   R   R4   R3   (   R   R   R   R   (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyR   g  s    (   R   R   R   R   (    (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyR   S  s   	t   __main__(   t
   __future__R    R   R   t   numpyR   t   numpy.testingR   R   R   R   R   t   warningst   scipy.signalR   R   R	   R
   R   R   R   R   R   R   (    (    (    sD   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_cont2discrete.pyt   <module>   s   (( #!!