
    MZd                     D   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl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+ d dl,m-Z-  ed      \  Z.Z/Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<Z=Z>Z? e"de1dz  de=z  e>z  e1z  z   e>dz  z   e1      Z@ e"e5de1      ZA e"e8e4z  e1z
  e8e1z  e4z   e1      ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKd ZLd ZMd  ZNd! ZOd" ZPd# ZQd$ ZRd% ZSd& ZTd' ZUd( ZVd) ZWd* ZXd+ ZYd, ZZy-).    )Add)Function)Mul)IRationaloo)Pow)S)symbols)exp)sqrt)eye)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix)
TransferFunctionSeriesParallelFeedbackTransferFunctionMatrix
MIMOSeriesMIMOParallelMIMOFeedbackbilinearbackward_diff)raisesz7a, x, b, s, g, d, p, k,    a0:3, b0:3, tau, zeta, wn, T      c                  z   t        t        dz   t        dz  t        z   dz   t              } | j                  t        dz   k(  sJ | j                  t        dz  t        z   dz   k(  sJ | j                  t        dz   t        dz  t        z   dz   t        fk(  sJ t        t        dz   t        dz
  t              }|j                  t        dz   k(  sJ |j                  t        dz
  k(  sJ |j                  t        dz   t        dz
  t        fk(  sJ t        t
        dz   t
        dz  dz
  t
              }|j                  t
        dz   k(  sJ |j                  t
        dz  dz
  k(  sJ |j                  t
        dz   t
        dz  dz
  t
        fk(  sJ t        t
        dz  dt
        dz  z  z   dz   t
        dz  dt
        z  z   dz   t
              }|j                  t
        dz  dt
        dz  z  z   dz   t
        dz  dt
        z  z   dz   t
        fk(  sJ t        t        dz   t        dz
  z  t        dz
  t        dz   z  t              }|j                  t        dz
  t        dz   z  k(  sJ |j                  t        dz   t        dz
  z  t        dz
  t        dz   z  t        fk(  sJ t        t
        dz   t
        dz   t
              }|j                  t
        dz   t
        dz   t
        fk(  sJ t        t        dz
  dt
        z
  t              }|j                  t        dz
  dt
        z
  t        fk(  sJ t        t        dz
  t        dz
  t              }|j                  t        dz
  t        dz
  t        fk(  sJ t        ddt              }|j                  dk(  sJ |j                  dk(  sJ |j                  ddt        fk(  sJ t        ddt              }	|	j                  dk(  sJ |	j                  dk(  sJ |	j                  ddt        fk(  sJ t        dt        dz  z  dt
        z  z   dt        z  z   d	t
        dz  z  d
t        z  z   t              }
t        dt        dz  z  dt
        z  z   dt        z  z   d	t
        dz  z  d
t        z  z   t
              }|
|k(  rJ t        t        t        z  t        t        dz  z  z   t        t        dz  z  z   t        t
        z  t        t        z  z
  t              }t        t        t        z  t        t        dz  z  z   t        t        dz  z  z   t        t
        z  t        t        z  z
  t              }||k(  sJ |  |cxk(  r
|    k(  sJ  J t        t        t        dz  z  t        t        dz  z  z   t        t        z  z   t        z   t        t
        z  t        t
        dz  z  z   t        t        z  z   t              }|j                  t        t        dz  z  t        t        dz  z  z   t        z   t        t        z  z   t        t
        z  t        t
        dz  z  z   t        t        z  z   t        fk(  sJ t        t
        dz  t        z   t        t        dz  z  t        t        z  z   t        z   t
              }t        t
        dz  t        z   t        t        dz  z  t        t        z  z   t        z   t
              }|j                  t        t
        dz  z   t        t        t        z  z   t        t        dz  z  z   t
        fk(  sJ ||k(  sJ t        t        t        z  t        z   t        t        dz  z  t        t        z  z   t        z   t              }|j                  t        t        t        z  z   k(  sJ |j                  t        t        t        z  z   t        t        dz  z  z   k(  sJ |j                  t        t        t        z  z   t        t        t        z  z   t        t        dz  z  z   t        fk(  sJ t        dt
        dz  t
        z
  dz   t
              }|j                  dt
        dz  t
        z
  dz   t
        fk(  sJ t        ddt              }|j                  ddt        fk(  sJ t        t        t        dz  z  t        t        dz  z  z   t        z
  t        t
        dz  z  t              }|j                  t        t        dz  z  t        z
  t        t        dz  z  z   t        t
        dz  z  t        fk(  sJ t        t        dz  t
        dz  z  t        t        dz  z  z   t        t        z  t
        z
  t
              }|j                  t        t        dz  z  t        dz  t
        dz  z  z   t        t        z  t
        z
  t
        fk(  sJ t!        d      \  }}}}t        ||t        z  z   |t        z  z   t        dz  d|z  t        z  z   |dz  z   t              }|j                  |t        z  |t        z  z   |z   k(  sJ |j                  |t        z  |t        z  z   |z   |dz  d|z  t        z  z   t        dz  z   t        fk(  sJ t#        t$        d        t#        t$        d        t#        t$        d        t#        t&        d        t#        t&        d        t#        t&        d        t#        t&        d        y )Nr    r!            	      g      ?      r   g333333?gffffff!g      ?gzomega_o, k_p, k_o, k_ic                  $    t        ddt              S )Nr#   r   r   s     F/usr/lib/python3/dist-packages/sympy/physics/control/tests/test_lti.py<lambda>z4test_TransferFunction_construction.<locals>.<lambda>r       /1a8 r.   c                  ,    t        t        dt              S Nr   r+   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>s   s    /1a8 r.   c                  $    t        ddt              S r3   r+   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>t   r1   r.   c                  B    t        t        g d      t        t              S N)r    r!   r%   )r   r   r,   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>v   s    .vi/@!QG r.   c                  R    t        t        dz  dt        z  z   dz
  t        dz   d      S )Nr!   r    r%   r+   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>x   s$    .q!taczA~q1uaH r.   c                  8    t        t        dz   dt        z
  d      S )Nr    r$   r#   )r   pr-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>y   s    .q1ua!eQ? r.   c                      t        ddd      S )Nr%   r#   r(   )r   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>z   s    .q!Q7 r.   )r   r,   numdenargsr9   a0a1a2b0b1abgdb2r   r   
ValueError	TypeError)tftf1tf2tf3tf4tf4_tf5tf5_tf6tf6_tf7tf8tf7_tf8_tf9tf10tf10_tf11tf12tf13tf14tf15omega_ok_pk_ok_itf18s                              r/   "test_TransferFunction_constructionre      s   	!a%AAq	1B66a!e66adQhl###77q1uadQhlA....
1q5!a%
+C77q1u77q1u88Aq1ua(((( 1q5!Q$(A
.C77q1u77q!tax   88Aq!tax++++
1a4!AqD&=1,adQqSj1na
@C881qAv)1a4!A#:>1==== AEAE?QUQUOQ
?C77q1uq1uo%%%88QQ!a%!a%!<<<<AE1q5!,D99QAq))))
1q5!a%
+C88Aq1ua((((AE1q5!,D99QAq))))
1a
#C77a<<77a<<881ay   CA&D88s??88q==99*Aq1111
1QT6AaC<!A#-qAv!|Q
?C
1QT6AaC<!A#-qAv!|Q
?Ccz>BqD2ad7NR1W4bdRTk1EDBqD2ad7NR1W4bdRTk1ED4<<U8t-dU8~-----
1QT6AadF?QqS014acAadFlQqS6H!
LC88!Q$1a4!+ac11Q31a4<!A#3EqIIIIAqD1Ha1fqslQ&6:DQTAXqAv!|a'7;E99QT1qs7Qq!tV#3Q7777D==BqD2Ir!Q$wA~':A>D88RT	"""88RT	Bq!tG+,,,99bdBAI1a4$7;;;; Aq!tax!|Q/D99AqD1HqL!,,,,Aq!$D99Aq	!!! Bq#vI1c6	1B61t9aHD99AsFR"QV)3RD	\1EEEEBE!c(NRD	\92a4!8QGD99AIAag5r!taxCCCC$%=>GS#sS3q5[3q501a4!G)A+3EQR
3RTUVD88s1us1u}s****99QQ,gqj1W9Q;.FA.MqQQQQ :89
:89
:89
9GH
9HI
9?@
978r.   c                  <  :;<=>? t        dt        t        dd      d      } t        dz  :t        t        dz  z  dt        z  z   t        dz   dz  z  ;d	<ddt        z  z   ddt        z  z   z  d
dt        z  z   ddt        dz  z  z   z  z  }d
t        dz  z  dt        dz  z  z   dz   t        dz   t        d
z   z  z  }t	        t        dz   t        dz  dz   t              }t        t         t        z        }||j                         z  }t	        j                  |t              }t	        t        dz   t        dz  dz   t        t        t        z        z  t              }t        ddt        z  t        dz  dz   z  d      }t	        j                  |       t	        dt        t              k(  sJ t        t        :fd       t        t        ;fd       t	        j                  ;t              t	        t        t        dz  z  dt        z  z   t        dz   dz  t              k(  sJ t	        j                  ;t              t	        t        t        dz  z  dt        z  z   t        dz   dz  t              k(  sJ t        t        <fd       t	        j                  <t              t	        d	dt              k(  sJ t	        j                  |t              t	        ddt        z  z   ddt        z  z   z  d
dt        z  z   ddt        dz  z  z   z  t              k(  sJ t	        j                  |t              t	        d
t        dz  z  dt        dz  z  z   dz   t        dz   t        d
z   z  t              k(  sJ ||k(  sJ t	        j                  |t              t	        dt        dz  z  dt        z  z   dz   t        dz  dz   t              k(  sJ t	        t        dz  t        dz  z   t        z   t        t        dz  z
  t              }	t	        t        dz  t        dz  z   dz    t        dz
  t              }
|	j                         t        |	      cxk(  r|
k(  sJ  J t	        t        dz   t        dz
  z  t        dz
  t        dz   z  t              }t	        t        dz   t        dz   t              }|j                         t        |      cxk(  r|k(  sJ  J t	        dt        z
  dz  t        dz  dz   dz  t              }t	        ddt              }t        t        t        z  z  t        t        t        z  z  z   t         t        t        z  z  z   t        t        z  t        t        z  z   z  }t"        t        t        z  z  t$        t        t        z  z  z   t&        t        z  t        z  t        t        z  z   z  }t         t        t        z  z  t        t        z  z  t         t        t        z  z  t        t        z  z  z   t        t        t        z  z  t        t        z  z  z   t        t        t        z  z  t        t        z  z  z   t        t        t        z  z  t        t        z  z  z   t        t        dt        z  z  z  z   }t"        t&        z  t        z  t        z  t        t        z  z  t"        t        t        z  z  t        t        z  z  z   t$        t&        z  t        z  t        t        z  z  t        z  z   t$        t        t        z  z  t        t        z  z  z   }t        t        z  t        z  t        t        z  z  t        t        z  t        z  z   t        t$        z  t        z  t        z  t        t        z  z  z   t$        t        dz  z  t        z  z   }t	        ||t              }t	        t         t        t        z  z  t"        t        t        z  z  z
  t        t        z  t$        t        z  t        z  z   t        t        t        z  z  t        z   z  t              }|j)                         t	        t        dz  dt        z  z
  dz   t        dz  dt        dz  z  z   dz   t              k(  sJ |j)                         t	        t        dz  dt        z  z   dz
  t        dz  dt        z  z   dz
  t              k(  sJ |j)                         |k(  sJ |j)                         t	        ||t              k(  sJ |j)                         t	        t         t        t        z  z  t"        t        t        z  z  z
  |t              k(  sJ t        t        z  t         z   }t&        t        dz  z  t$        t        z  z   t"        z   }t	        ||t              }t	        dt        z  dz   dt        dz  z  dt        z  z   dz   t              }t	        dt        z  dz   dt        dz  z  dt        z  z   dz   t              }|j+                  t         dt        dt"        dt$        dt&        di      |k(  sJ |j+                  t         dt        dt"        dt$        dt&        di      j-                         |k(  sJ |j-                         |k(  sJ t/        d      \  }}}}|t        z  |t        dz  z  |t        dz  z  z   |z
  } }t	        || t              }!t	        dt        z  dt        dz  z  dt        dz  z  z   dz
  t              }"t	        dt        z  dt        dz  z  dt        dz  z  z   dz
  t              }#|!j+                  |d|d|d|di      |#k(  sJ |!j+                  |d|d|d|di      j-                         |"k(  sJ |#j-                         |"k(  sJ t	        t         t        dz  z  t        t        dz  z  z   t"        t        z  z
  t$        z   t        t        z  t        z   t              }$t	        dt        dz  z  dt        dz  z  z   t        z
  dz   t        dt        z  z   t              }%t	        dt        dz  z  dt        dz  z  z   t        z
  dz   t        dt        z  z   t              }&|$j+                  t         dt        dt"        dt$        di      |&k(  sJ |$j+                  t         dt        dt"        dt$        di      j-                         |%k(  sJ |&j-                         |%k(  sJ t	        t        t        t        dz  z  z
  t         t        z  t        z   t              }'t	        dt        dz  z  t        z   t        t        z
  t              }(t	        dt        dz  z  t        z   t        t        z
  t              })|'j+                  t         dt        di      |)k(  sJ |'j+                  t         dt        di      j-                         |(k(  sJ |)j-                         |(k(  sJ |	j1                         dk(  sJ |j1                         t3        dd      k(  sJ |!j1                         dk(  sJ |(j1                         dk(  sJ |#j1                         dk(  sJ t	        dt        t              j1                         t4        k(  sJ t	        t6        dz  t8        z
  t8        t6              }*t	        t8        t6        dz  t8        z
  t6              }+t	        t6        dz  t6        dz  t6        z   t6        dz  z   t6              },t	        t6        dz  t6        z   t6        dz  z   t6        dz  t6              }-|j;                         t<        t<        t<         t<         gk(  sJ |j;                         g k(  sJ |j;                         ddgk(  sJ |)j;                         t        gk(  sJ |'j;                         t          t        z  gk(  sJ |%j;                         dt        z  gk(  sJ t?        |"j;                               t?        dddt<        z  z
  ddt<        z  z   g      k(  sJ t?        |j;                               t?        d d!t<        z  z
  d d!t<        z  z   g      k(  sJ |+j;                         t8        t3        dd      z  t8        t3        dd      z   t<        t8        t3        dd      z  z  t<         t8        t3        dd      z  z  gk(  sJ |,j;                         tA        t6        d
z  t6        z   dz   d      dtA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d	      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      g
k(  sJ t        tB        d"        t/        d#d$%      \  }.}/t/        d&d$'      }0t	        t        dz  t         z   t        t        z  z
  |.t        z  |/z
  t              },t	        t        dz  t         z   t        t        z  z
  |.t        z  dz
  t              }1t	        t        dz  t         z   t        t        z  z
  |.t        z  |0z
  t              }2|jE                         du sJ |jE                         d$u sJ |jE                         du sJ |"jE                         du sJ |jE                         d$u sJ |1jE                         d$u sJ |2jE                         d$u sJ |,jE                         du sJ |)jE                         J |'jE                         J |jG                         ddgk(  sJ |jG                         g k(  sJ |jG                         ddgk(  sJ |)jG                         dt3        dd      z  t         t3        dd      z  z  dz  dt3        dd      z   t         t3        dd      z  z  d(z  tI        d      dt3        dd      z  z  t<        z  t         t3        dd      z  z  d(z  z
  dt3        dd      z   t         t3        dd      z  z  d(z  tI        d      dt3        dd      z  z  t<        z  t         t3        dd      z  z  d(z  z   gk(  sJ |'jG                         t        t        z  t3        dd      z  t        t        z  t3        dd      z   dz  tI        d      t<        z  t        t        z  t3        dd      z  z  dz  z
  t        t        z  t3        dd      z   dz  tI        d      t<        z  t        t        z  t3        dd      z  z  dz  z   gk(  sJ t?        |%jG                               t?        d)d*tI        d+t        dz  z  dz
        z  z
  d*tI        d+t        dz  z  dz
        z  d)z   g      k(  sJ |*jG                         t8        t3        dd      z  t8        t3        dd      z   dz  tI        d      t<        z  t8        t3        dd      z  z  dz  z
  t8        t3        dd      z   dz  tI        d      t<        z  t8        t3        dd      z  z  dz  z   gk(  sJ |-jG                         tA        t6        d
z  t6        z   dz   d      dtA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d	      tA        t6        d
z  t6        z   dz   d      tA        t6        d
z  t6        z   dz   d      g
k(  sJ t        tB        d,        t	        t        dz   t        dz  t        dz  z
  d
z   t              }3t	        dt        z  dz   dt        z
  t              =|3 t	        t         dz
  t        dz  t        dz  z
  d
z   t              k(  sJ = t	        dt        z  dz
  dt        z
  t              k(  sJ t	        t        dz   t        dz
  t              >t	        t        dz  dz   dt        z
  t              ?t	        t        dz  dz   dz  dt        z
  dz  t              }"t	        t        dz   dz  t        dz
  dz  t              }>>z  jK                         >dz  cxk(  rtM        >d      cxk(  r|k(  sJ  J ??z  ?z  jK                         ?dz  cxk(  rtM        ?d      cxk(  r|"k(  sJ  J ?dz  tM        ?d      cxk(  rt	        ddt              k(  sJ  J tO        >      jK                         dz  >dz  cxk(  r3tM        >d      cxk(  r#t	        t        dz
  t        dz   t              k(  sJ  J ??z  jK                         dz  ?d-z  cxk(  r<tM        ?d-      cxk(  r,t	        dt        z
  dz  t        dz  dz   dz  t              k(  sJ  J t        t        >fd.       t        t        ?fd/       t        t        >?fd0       t	        t        dz
  t        dz  dt        z  z
  dz   t              }t	        t        t        z   t        dz  dz
  t              }4tQ        |      t	        t        dz
  t        dz
  dz  t              k(  sJ |jR                  j+                  t        d      |jT                  j+                  t        d      cxk(  rdk(  sJ  J |j+                  t        d      t	        t        dz
  t        dz  dt        z  z
  dz   t              k(  sJ |4j+                  t        d      t	        t        dz   dt              k(  sJ =jW                  t        t        i      t	        dt        z  dz   dt        z
  t              k(  sJ t        tX        =fd1       =j+                  t        t        d            =k(  sJ t	        t         t        t        z  z  t        t        t        z  z  z   t        t        z  t        z
  t              }5|5jW                  t        t8        i      t	        t         t8        t        z  z  t        t        t8        z  z  z   t        t        z  t8        z
  t8              k(  sJ |5j+                  t        t8              t	        t         t        t        z  z  t        t        t        z  z  z   t        t        z  t        z
  t              k(  sJ t	        t         t        dz  z  dt        dz  z  z   dz   t        d	z  dz
  t              }6t	        dt        z   dt        z   d	t        z   z  t              }7t	        ddt              }8t	        ddt              }9|6j                         t        t         t        dz  z  dt        dz  z  z   dz   t        t        d	z  dz
  dd      d      k(  sJ |7j                         t        t        dz   t        dt        z   d	t        z   z  dd      d      k(  sJ |8j                         t        t[        d      t        ddd      d      k(  sJ |9j                         t        ddd      k(  sJ y )2Nr   Fevaluater!   r$   r    r%   r'   r&   r#   r(   c                  .    t        j                         S Nr   from_rational_expression)expr_2s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&O&OPV&W r.   c                  .    t        j                         S rk   rl   )expr_3s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>       /HHP r.   c                  .    t        j                         S rk   rl   )expr_4s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>   rq   r.          @      ?g      @g      @      @zc1, d0:3g      @r)   i
   g      пgS?g3pUcgH8?gٿg%1C9?c                      t        t        dz  t        t        dz  z  t        z   t        dz  z   t              j                         S )Nr!   rx   )r   xr>   polesr-   r.   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>   s4    (8Ar!R%x!|aQRd?RTU(V(\(\(^ r.   zq, rT)negativet)positive   g      ?gv-k?g3ٿc                      t        t        t        dz  z  t        z   t        dz  z   t        dz  t              j                         S )Nrx   r!   )r   r>   r{   zerosr-   r.   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>  s4    (8ArEA19LaQRdTU(V(\(\(^ r.   c                  0     t         dz  t         z   dz
  z  S )Nr!   r    r,   rN   s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>%  s    sQTAX\2 r.   c                       t         z  S rk   r   rP   s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>&  s    sAv r.   c                       z  S rk   r-   rN   rP   s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>'  s    sCx r.   c                  D     j                  t        t        d      i      S Nr!   )xreplacer9   r   rM   s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>2  s    cllAs1v;7 r.   ).r   r	   r,   r9   r   r   tauto_exprrm   r   r   ZeroDivisionErrorrH   r   r@   r?   r>   rA   rB   rG   expandsubsevalfr   dc_gainr   r   r{   kr|   r   strr   NotImplementedError	is_stabler   r   doitpowr   r   r;   r<   r   rI   r
   )@expr_1expr_5expr_6rJ   delayexpr_7H1H2expr_8tf0rC   rK   rD   G1G2crF   efrE   G3G4p1p2SP1expect1expect1_c1d0d1d2p3p4SP2expect2expect2_SP3expect3expect3_SP4expect4expect4_tf__tfTF__TFqrr~   	stable_tf
stable_tf_rL   rR   rT   rU   rX   rY   r[   rn   rp   rs   rM   rN   rP   s@                                                             @@@@@@r/   test_TransferFunction_functionsr   }   s!   C2.?FqSF1fqslQUQJ&FF1Q3wQqS!Q1Wq1QT6z$:;F1fqAvo!QUQUO4F	!a%A1	-B3KE2::<F		2	261	=B	!a%!Q$(C#J!6	:BQqS!Q$(^e4F44V<@PQRTUWX@YYYY
WX
:PQ44VQ?CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrrrr44VQ?CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrrrr
:PQ44VQ?CSTUWXZ[C\\\\44VQ?!ac'A!G,q1Q3wQq!tV.DaHI I I44VQ?!AqD&1QT6/A-QQCD D D8O844VQ?1a4!A#)1a4!8Q78 8 8 1a4!Q$;?A1Ha
8C1a4!Q$;?+QUA6A<<>Xc]/a/////
AEAE?QUQUOQ
?CQAq)A<<>Xc]/a///// 
1q51*q!tax!mQ	7B	!R	#B	AqD2ad7	R1W	$q!tad{3A	AqD2ad7	RT!Vad]+A
1a41r!Q$wq!t|#bAgadl2R1WQT\ABq!tGAqDLPSUVWZ[\]Z]V^S^^A
2a	!Q$AqDA%2a1Q6AqDAEA
2a1r!tAv2a	!Q$.AqD:A	!Q	"B	"QT'Bq!tG+bdRT!VmbAgk-JA	NB99;*1a4!A#:>1a4!AqD&=1;LaPPPP::<+AqD1Q3JNAqD1Q3JNANNNN99;"99;*1a333399;*2ad7R1W+<aCCCC 
AB	AqD2a4"	B
2r1
%Cs1us{C1Hs1u,<s,BAFG!a1a4!A#)91=H88RB2q"aQ78HDDD88RB2q"aQ78>>@GKKK>>w&&&Z(NBBT2ad7R1W$r)B
2r1
%Cs1uc!Q$hQT&9C&?CG!Qq!tVa1f_q%8!<H88RB2q"a01X===88RB2q"a01779WDDD>>w&&&
2ad7R1W,r!t3b8"Q$(A
FCs1a4x#ad(2Q6<a#a%iKG!Q$1a4! 3a 7QqS!DH88RB2q"a01X===88RB2q"a01779WDDD>>w&&&
1r!Q$w;1q!
4Cs1a4x!|QUA6G!Q$
AE15H88RR$%11188RR$%++-888>>w&&& ;;=A;;=HQN***;;=A??""""""Aq!$,,."444 1a4!8Q
*C
1adQh
*C
1a4BQT!11
5C
1b519q!t+QT1
5C88:!QQB'''88:99;2q'!!!>>s"""99;B3q5'!!!==?uQwi'''w}}3(9;MPabcPc;cew  {L  MN  {N  fN  (O  $P  P  P  Pw}}3/?/A(A4JZ[\J\C\']#^^^^99;1x1~.Xa^1D0DaHUVXYNH[F[^_]_`adlmnpqdr`s]stttt99;71a4!8a<3Q1q1a8PRYZ[]^Z^abZbefZfhiRj1q1a '!Q$(Q,":GAqD1HqLRS<TV]^_ab^bef^fij^jlmVn1q1a '!Q$(Q,":< < < <  ^_ 6D)DAqd#A
1a4"9r!t+QqS1Wa
8C ART!11Q37A>I!!Q$)bd"2AaC!GQ?J<<>U"""<<>T!!!==?e###%'''$&&& D(((!T)))==?e###'''==?""" 88:!Q88:99;2q'!!!>>HQN 3aR8Aq>4J J1 LqS[\]_`SaObNbefdfjrstvwjxcyNyz|N|QHQN##A%rXa^&<<R?O@BChqRSnBUAUXYWY]efgij]kVlAlmoAorvwxryz{  G  HI  KL  M  {N  sN  OP  sP  ST  RT  X`  ab  de  Xf  Qg  sg  hj  sj  Bj k k k k99;AbDHQN3qtx1~6N5Nq5PSWXYSZ[\S\^_`b^bfnoprsft]uSuvwSw5w
B$(1a.	!!!#d1gai2!Q0H&H&JJL L L Lw}}30@FXYZ\]Y]F]`cFcAd0d(d0A5;<<uD(F $G G G G99;1x1~.Xa^1D0DQ0FaQRSTW_`acdWeSfIfghIh0h	
Xa^	Qa1x1~+>!>q!@@B B B B99;71a4!8a<3Q1q1a8PRYZ[]^Z^abZbefZfhiRj1q1a '!Q$(Q,":GAqD1HqLRS<TV]^_ab^bef^fij^jlmVn1q1a '!Q$(Q,":< < < <  ^_ 1q5!Q$A+/1
5C
2a4!8QUA
.C4#QBFAqD1a4K!OQ????4#AaC!GQUA6666 1q5!a%
+C
1a4!8QUA
.C1q1}q1uqj!<GAzAEA:q9GG>>sAv?S!??????GCK36CSa[CGCCCCC6Sa[=$4Q1$======#;r!S"WaCa@PQRUVQVXY\]X]_`@aaaaaaG>>R37lc#rll>NPQTUPUXYz\]_`\`cd\dgh[hjk>llllll
:23
:~&
:'( 
!a%A!a	3B
1q5!Q$(A
.C":)!a%!a%!Q????66;;q!Aq 16Q66666771a=,QUAqD1Q3JNAFFFF88Aq>-a!eQ::::<<A#3BqD1Ha!eQ#GGGG
97888As1v#%%%
2ad7R1W,bdQh
:C<<A#3Bq!tGbAg4Er!taxQR#SSSS88Aq>-bAg1a4.?A1MMMM 2ad7Qq!tV+a/A1
=C
AEQUQUOQ
7CAq!$DAq!$D;;=CAqD1QT6!1A!5QTAXUZ8[fkllll;;=CQa!ea!e_b5)Q\abbbb<<>S1s1b5'AERRRR<<>SB7777r.   c                  d    t        t        dz   t        dz
  t              t        t        dz   t        dz   t              t        t        dz   t        dz  t        z   dz   t              t        t        dt        z
  t              z   t              k(  sJ z   t              k(  sJ  z   z   t               k(  sJ z   z   t              k(  sJ t	        dd       t        t        fd	       t        t         fd
       t        t        fd       t        t        fd       t        t        fd       t        t        fd       z
  t               k(  sJ z
  t               k(  sJ  z
  t                k(  sJ z
  z   t               k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       y )Nr'   r$   r%   r    r!   r   Fcommutativec                  $     t        g d      z   S r6   r   rK   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>P      sVI%66 r.   c                       z   S rk   r-   )r   rL   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>Q      sQw r.   c                       z   S rk   r-   rM   rN   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>R      sSy r.   c                       t         dz
  z   S Nr    r   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>S      sa!e} r.   c                       dz   S Nr(   r-   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>T  r   r.   c                  "    dt         dz  z
   z   S Nr    r%   r9   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>U      AqDC/ r.   c                  $     t        g d      z
  S r6   r   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>]  r   r.   c                       z
  S rk   r-   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>^  r   r.   c                       t         dz
  z
  S r   r   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>_  r   r.   c                       dz
  S r   r-   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>`  r   r.   c                      t         dz    z
  S )Nr$   r   )rL   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>a  s    A} r.   c                  "    dt         dz  z    z
  S )Nr    r#   r   r   s   r/   r0   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>b  r   r.   )r   r,   r9   r   r   r   rH   )r   rK   rL   rM   rN   s   @@@@@r/   .test_TransferFunction_addition_and_subtractionr   C  s   
1q5!a%
+C
1q5!a%
+C
1q5!Q$(Q,
2C
1a!eQ
'C 9c****9c****4#:xc37777#)c3 7777'A
:67
:'
:()
:,-
:'
:/0 9sd++++9sd++++4#:3$----9s?hsSD#6666
:67
:()
:,-
:'
:,-
:/0r.   c            
          t        t        dz   t        dz   dz   t               t        t        dz   t        dz
  t              t        t        t        dz  dz
  t              t        t        dz   t        dz
  t              t        t        dz   t        dz
  t              t        t        dz   t        dz   t              t        ddt               z  t               k(  sJ   z  t                k(  sJ  z   z  t                k(  sJ    z   z   z  t                   k(  sJ z  t              k(  sJ  z  z   z  t         t        ddt              t                    k(  sJ  z  z   z  t         t	                    k(  sJ t        dd	
      t        t        fd       t        t         fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       y )Nr%   r&   r    r$   r#   r'   rg   r   Fr   c                  $     t        g d      z  S r6   r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>y      rF9$55 r.   c                       z  S rk   r-   )r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>z      rAv r.   c                       z  S rk   r-   r   G5s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>{      rBw r.   c                       t         dz
  z  S r   r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>|  s    rQU| r.   c                      d z  S Nr&   r-   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>}      q2v r.   c                  $     t        g d      z  S r6   r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                       dz  S r3   r-   )G6s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                       z  S rk   r-   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                       dz  S r   r-   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                       t         dz  z  S r   r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rAqDy r.   c                  0    t         dt         dz  z  z
   z  S )Nr#   r!   r   )r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    AadF
b0 r.   c                      d z  S r3   r-   )r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                       z  S rk   r-   )r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r   r.   c                        z  S rk   r-   )r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    sBw r.   c                      d z   z  S r   r-   )r   G7s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQV} r.   c                       z  z  S rk   r-   r   r   r   s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR"W~ r.   c                       z   z   z  S rk   r-   r  s   r/   r0   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR27^4 r.   )r   r,   r9   r   r   r   r   rH   )r   r   r   r   r   r   r   r   s   @@@@@@@@r/   1test_TransferFunction_multiplication_and_divisionr  e  so   	!a%!Q$A	.B	!a%Q	*B	!QTAXq	)B	!a%Q	*B	!a%Q	*B	!a%Q	*B	!Q	"B b5F2rN"""3r6VRC_$$$3r62#:R"----3s7B3;s?fbS2#sRC8888b5F2rN"""rERU8r2'Aq16"b>BC C Cb5"r'?fRXb"-=>>>>'A
:56
:~&
:'
:+,
:~&
:56
:~&
:'
:~&
:()
:01
:~&
:'
:'
:,-
:-.
:45r.   c                     t        d      \  } }}t        | dz  t        dz  t        | z  |z  t        z  z   | dz  z   |       }t        |t        dz  z
  |t        dz  z   |      }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  sJ |j                  sJ |j                  sJ |j                  rJ y Nzomega_o, zeta, taur!   r%   r#   )r   r   r,   r9   rC   rD   	is_proper)r`   zetar   r   r   r   r   s          r/   test_TransferFunction_is_properr    s    !56GT3	'1*adQwYt^A-=&=
&JG	TB	#1*cAqDj#	6B	!A#ad(QT/AaC/!3Q1a4Z	CB	!AqD&1a4-!A#-11q!t8Q	?B<<<<<<<<<|||r.   c                     t        d      \  } }}t        | dz  t        dz  t        | z  |z  t        z  z   | dz  z   |       }t        |t        dz  z
  |t        dz  z   |      }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  rJ |j                  rJ |j                  sJ |j                  rJ y r  )r   r   r,   r9   rC   rD   is_strictly_proper)r`   r  r   rK   rL   rM   rN   s          r/   (test_TransferFunction_is_strictly_properr    s    !56GT3
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C%%%%%%%%!!!!%%%%%r.   c                     t        d      \  } }}t        |dz  t        dz  t        |z  |z  t        z  z   |dz  z   |      }t        | t        dz  z
  | t        dz  z   |       }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  sJ |j                  sJ |j                  rJ |j                  rJ y )Nztau, omega_o, zetar!   r%   r#   )r   r   r,   r9   rC   rD   is_biproper)r   r`   r  rK   rL   rM   rN   s          r/   !test_TransferFunction_is_biproperr    s    !56C$
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C??????r.   c                  z   t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t               t        d      t              }  t        d      t              }t              }|j                  fk(  sJ |j                  t        k(  sJ t        t                     }|j                  t               fk(  sJ |j                  t        k(  sJ t        | dt              }t        | dt              }t        t        ||            }|j                  t        ||      fk(  sJ t              }|j                  fk(  sJ t        ||      }|j                  ||fk(  sJ |j                  t        k(  sJ t        t                     }	|	j                  t               fk(  sJ t              }
||
k(  sJ ||k(  rJ t!        t"        fd       t!        t"        fd       t!        t"        fd	       t!        t$        fd
       t!        t$        fd       t!        t$        fd       y )Nr%   r!   r#   r    X_dXc                      t               S rk   r   rJ   rM   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    vb# r.   c                       t               S rk   r  rJ   rL   rM   rN   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    vb#sC8 r.   c                      t                S rk   r  rL   rM   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    vsdC0 r.   c                      t        d       S r   r  rJ   rN   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    fQC0 r.   c                  H    t        t        dz  t        t        z  z          S r   )r   r,   r9   r  s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    fQTAaCZc: r.   c                  2    t         t        g d            S N)r    r!   r%   r#   )r   r   r   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    fS&*>? r.   )r   r>   r,   r?   r@   rA   r9   rB   rG   r  wnr   r   r=   varr   r   rH   rI   )inpouts0s1tf3_rO   s2s3s4s6s7rJ   rL   rM   rN   s              @@@@r/   test_Series_constructionr*    s   	"QT'Bq!tG+bd2Bq!tGbAg4E1Q4NPQ	RB
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
1adQtVBYq[02q58!
<C
(5/!
C
(3-
C	CB77r3i66Q;;	cT"C	(B77xSD)3////66Q;;CA&DSD!Q'D	HT4(#	.B77r8D$/5555	C	B77r3n$$$	d	B77tTl"""66Q;;	S(3,c	2B77sC#s!3S9999	CB8O8Rx<
:./
:89
:01
901
9:;
9?@r.   c                  F  	
 t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              } t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              }t        | |g| |  gg      t        |  g|  g| gg      t        | gg      	t        t        gt        gt         gg      }t        j                  t!        dt        z  g      t              
t#              }|j$                  fk(  sJ |j&                  t        k(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t#        	      }|j$                  	fk(  sJ |j&                  t        k(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t#        	t/         |             }|j$                  	t/         |       fk(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t1        t2        d        t1        t4        fd       t1        t2        fd       t1        t2        	
fd	       t1        t4        	fd
       t1        t4        	fd       t1        t4        	fd       y )Nr%   r!   r#   r    )r!   r    c                      t               S rk   r   r-   r.   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    z| r.   c                      t               S rk   r-  )tf_1tfm_1s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    j5 r.   c                       t                 S rk   r-  r0  tfm_2s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    z%? r.   c                      t               S rk   r-  )tfm_3tfm_5s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>   s    z%7 r.   c                      t        d       S r   r-  r3  r5  s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    jE59 r.   c                  J    t        t        dz  t        t        z  z           S r   )r   r,   r9   r8  s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    jA!eVUC r.   c                  >    t        t        dt        z  g             S r   )r   r   r9   r5  s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    j1> r.   )r   r>   r,   r?   r@   rA   r9   rB   rG   r  r  r   TF3TF2TF1from_Matrixr   r   r=   r  shapenum_outputs
num_inputsr   r   rH   rI   )tf_2tf_3tfm_4s8s9s11r/  r0  r3  r5  r6  s         @@@@@r/   test_MIMOSeries_constructionrI    s   Bq!tGbAg-14bAg1a46G"Q$q&6PRSTDBqD1HbdQh2DAq!tafRik1BE91=D"T4$6$t8L#MNE"dUGteWug#>?E"dUG9-E"SEC5C4&#9:E"..vqse}a@E	E5	!B77uen$$$66Q;;886@&@@@@@	E5%	(B77ueU++++66Q;;886@&@@@@@
UL%%8%
@C88|UFUF;UCCCC99#..9CVCCCCC :+, 956 :?@ :78 99:
9CD
9>?r.   c                     t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              } z  z  t              cxk(  r4t        t                    cxk(  rt        t                    k(  sJ  J z   z  t        t                    k(  sJ z  | z   t        t              |       k(  sJ z  | z
  t        t              |        k(  sJ z  z   | z   t        t              |       k(  sJ z  z
  | z
  t        t               |        k(  sJ z  z
  | z   t        t               |       k(  sJ z  | z  z   t        t              t        |             k(  sJ z  | z  z
  t        t              t        t        ddt              t        |                   k(  sJ z  z
  z  z  t        t                     k(  sJ  z  t               k(  sJ z   t        t        ddt              t                    k(  sJ t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rBt        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ  J t        t               d      t        t                     j                         cxk(  rt        t        t
        t        z  t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t              k(  sJ  J t         d      t               j                         cxk(  rmt        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ  J t         d	      t               j                         k(  rJ t        t              t                     j                         t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t
         t        z  t        t
        t        z  t        z   z  z   t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t                 j                         t        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                          t        t         t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                     j                         t        t        t
        t        z  t        z
  dz  z  t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz
  z  t
        t        z  t        z   dz  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                  t               t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ t               j                  t               t        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t              t                     }|j                  sJ |j                   rJ |j"                  sJ t              }|j                  sJ |j                   sJ |j"                  rJ t         t                     }|j                  sJ |j                   sJ |j"                  rJ y )
Nr    r!   rg   c                       z  z  S rk   r-   rK   rL   rN   s   r/   r0   z'test_Series_functions.<locals>.<lambda>  s    s3ws{ r.   c                       z
  z  S rk   r-   rL  s   r/   r0   z'test_Series_functions.<locals>.<lambda>  s    sC#I r.   c                  $     t        g d      z  S r6   r   r   s   r/   r0   z'test_Series_functions.<locals>.<lambda>  s    s6)#44 r.   Trh   F)r   r,   r  r  r   r@   r9   r>   r?   r   r   r   rH   r   rewriter  r
  r  )rP   S1S2S3rK   rL   rM   rN   s       @@@@r/   test_Series_functionsrS    s	   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:Cs73;&c3/ )6&c:JC3P )#vc3'() ) ) ) )c	?fS(3*<====s7S=HVC%5s;;;;s7S=HVC%5t<<<<s7S=3(6#s+;S#"FFFFs7S=3(6#s+;cTC4"HHHHs7S=3(6#s+;cT3"GGGGs7SWS)96#s;K LLLLs7SWS)96BRSUWXZ[B\^dehjm^n;o pppps7C#Is"fS#xcT7JC&PPPP48vsdC((((W: 0Q :F3<LMMMM
:*+
:./
:45 #sT*fS#.>.C.C.E ;AqD1Q3r6$;.Q6:; ; ; ; ;#sHS3$/$?6#sT\]`cfbfTgChCmCmCo ABqD1HA	AqD1Q3r6$;4FQ4N'OOPSUVWSWZ[S[^_ab^befghehikeklpep^psuwxsx^x{|]|R|~  	AA A A A A#sSD40F3cT4J4O4O4Q TRCEAIAAqD1Q3r6$;4FQ4N(OQRST T T T TcC4%0F34E4J4J4LLLL(3$hsSD&9:??A!QTAaCF4K/"a%781<s1uq"Q$QR(|?SVW?WX[]^_[_bc[cfgijfjmnopmpqsmstxmxfx{}  @A  |A  gA  [B  DE  	FF F F3$sd#((*RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T3S!&&((!RTAXAAqD1Q3r6$;4FQ4N(OQRST T T#sHS3$/5::<BqD1Hq=!QTAaCF4K-?"a%-G*H1*LMPRSTPTWXPX[\}^_ab^befghehikeklpep^psuwxsx^xOy{|}~ ~ ~ #s##$459I!QPQTTUVWTWXZTZ[_T_M_bdfgbgMgij9kkkk#sSD!))*:;RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T 
c"HS3$$7	8B<<<$$$$>>>	S#	B<<<    ~~	cT8C#.	/B<<<    ~~~r.   c                  F  	
 t        t        t        t        gt         t         t        gg      t        t         gt         gt         gg      t        t         gg      } t        t         t         gt         t        gg      t        t        t         gt         t         gg      	t        t         gt        gg      
t        t        gt         gg      }z  
z   t	        t              
      k(  sJ z  |z   
z   t	        t              |
      k(  sJ z  
z
  |z
  t	        t              
 |       k(  sJ 	z  	z
  z   t	        t        	      	       k(  sJ 
 z   
z  z   t	        t        
       t        
             k(  sJ t        t        fd       t        t        fd       t        t        
fd       t        t        
fd       t        t        fd       t        t        fd       t        t        	fd       t        t        	fd       z  |  z  t        |        k(  sJ  z  | z  t        |        k(  sJ t        t        	fd	       t        t        	fd
       t        t        	fd       t        t        	fd       t        t        	fd       t        d      t              j                         cxk(  rut        t        t        dz   t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z
  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  z   t        t        z  t        z   dz  z
  t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ft        t        dz  t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z
  t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ff      k(  sJ  J t#        ddt        z   z  dt        z   dt        dz  z   dt        z  z   dz  z  gg      }t#        dt        z   gdt        dz  z   dt        z  z   dz  dt        z   z  gg      }t        j$                  |t              t        j$                  |t              }}t        ||      j                         t        t        dt        dz   dz  z  t        dz  dt        z  z   dz   dz  z  t        dz   dz  t        dz  dt        z  z   dz   dz  z  t              ff      k(  sJ t        ||      j                         j'                         t        t        ddt              ff      k(  sJ t        |   d      t        |         j                         cxk(  rbt        t        t        dz  t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t        t        z  t        z
  dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  z   t        t        z  t        z   dz  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ft        t        dz   t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z
  t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ff      k(  sJ  J t        t	        	      	d      t        t	        	      	      j                         cxk(  rVt        t        t         t         t        z  t        z
  t         t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   z  t        t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  t              t        t        t         t        z  t        t        t        z  t        z   z  z
  t        z   z  t        t        z  t        z   t              ft        t         t         t        z  t        z
  t         t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   z  t        t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  t              t        t         t        z  t        z   t         t        z  t        t        t        z  t        z   z  z
  t        z   z  t        t        z  t        z   dz  t              ff      cxk(  r-t        t	        	      	      j)                  t               k(  sJ  J y )Nc                       z  t         z   S rk   r>  tfm1tfm2s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>U  s    tDy3 r.   c                       z  t         z   S rk   )r>   rW  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>V  s    d4i"n r.   c                  "     z  t         dz
  z
  S r   r   tfm4tfm6s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>W  s    d4i1q51 r.   c                        z  dz
  S r   r-   r\  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>X  s    dD5j1n r.   c                  (    dt         dz  z    z  z   S )Nrg   r$   r   rW  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>Y  s    rAqDyDI5 r.   c                        z  z   S rk   r-   rX  rY  r]  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>]  s    teDj4/ r.   c                       z  z
  z   S rk   r-   rX  rY  r]  tfm5s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>^  s    d4i$.5 r.   c                       z  z  z
  S rk   r-   rd  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>_  s    d4i$t)3 r.   c                       z  t         z  S rk   rV  r]  re  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>f  s    tDy} r.   c                       z  t         z  S rk   r?   rh  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>g  s    d4il r.   c                  $      z  t         dz
  z  S r   r   rh  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>h  s    dD5j!a%0 r.   c                       z  dz  S r   r-   rh  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>i  s    d4ik r.   c                  *    t         dz   dz   z   z  S )Nr%   r    r   rh  s   r/   r0   z+test_MIMOSeries_functions.<locals>.<lambda>j  s    1uqy$.t3 r.   Trh   r!   r    r%   )r   r>  r=  r<  r   r   r   rH   rI   r   r   r   r@   r,   r9   r  r  r   r?  r   rO  )tfm3tfm7mat_1mat_2tm_1tm_2rX  rY  r]  re  r^  s         @@@@@r/   test_MIMOSeries_functionsrt  F  s   !Cc?cTC44E"FGD!SD6SD6SD6":;D!SD6(+D!SD3$<3$"=>D!C#;#t"=>D!SD6C5/2D!C5C4&/2D9t|JtT,BDIIII9td"l:dD3I4QU&VVVV9td"l:dD3ID5SWRW&XXXX9t$Zd5KTTXSX(YYYY:$t$Zt5LjY]`d_dNe(ffff
:./
9,-
912
9,-
956 9/0
956
9349dU?j$d;;;;$J
4$ ==== :,-
9*+
901
9)*
934 tTD1Zd5K5P5P5R >!$4adUBqD1Hq=5H!Q$QRSTQTUWQWX\Q\J\_acd_dJdghIh5hmolopqlqtuluxz{|x|  @A  yA  lB  DE  GH  DH  KL  MN  KN  OQ  KQ  RV  KV  DV  Y[  ]^  Y^  D^  ab  Cb  lb  6b  fh  ij  fj  mn  fn  qr  er  6r	AAq!tac"fTk)BE1A55q%: $<	!Q$1q1},adQqSVD[.@2q5.H1-LLQSPSTUPUXYPY\^_`\`cd\dOeghjkgknopqnqrtntuynygy|~  AB  }B  hB  PC  C  GI  JK  GK  NO  GO  RT  UV  RV  YZ  RZ  F[  ]^  `a  ]a  de  fg  dg  hj  dj  ko  do  ]o  rt  vw  rw  ]w  Fx  x	AAq!tac"fTk)BE1A55q
: 	<#= >> ? > ? > Q!WqsQq!tVAaCZ!O3456EacGqAvaczAoqs3456E'33E1=?U?a?abgij?k$DtT"'')!$4QAz\1a4!A#:PQ>TUBU5UXY\]X]`aWacdfgcgjklmjmcmpqcqtubuWuwx$y#{"}~ @ dD!&&(1137MP`abdeghPiOkNm7nnnn uteTD9tedUD)..0>!$4QT2a4!8a-5GAPQRSPSTVPVW[P[I[^`bc^cIcfgHg5gkmnokorsksvwjwyz|}y}  AB  CD  AD  EG  AG  HL  AL  zL  OQ  ST  OT  zT  WX  yX  kX  6X  \^  _`  \`  cd  \d  gh  [h  6h	AAq!tac"fTk)BE1A55q%: $<	1a4%AA-q!tac"fTk/ABE/IA.MMRTQTUVQVYZQZ]_`a]ade]ePfhiklhlopqrorsuouvzozhz}  BC  ~C  iC  QD  D  HJ  KL  HL  OP  HP  SU  VW  SW  Z[  S[  G\  ^_  ab  ^b  ef  gh  eh  ik  ek  lp  ep  ^p  su  wx  sx  ^x  Gy  y	AAq!tac"fTk)BE1A55q
: 	<#= >> ? > ? > |D$/El4.5::<h!$4aR"Qrc!eaiRSUVRVYZ[\Y\]_Y_`dYdRdgiklglRlEm9m5nqstuquxyqy|}  @A  }A  DE  FG  DG  HJ  DJ  KO  DO  }O  RT  VW  RW  }W  qX  Z[  %\  ^n  op  su  ru  vw  rwr!taxLrr o!!tax^, $-/?RCEAIRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxDx@y|~  @A  }A  DE  }E  HI  KL  HL  OP  QR  OR  SU  OU  VZ  OZ  HZ  ]_  ab  ]b  Hb  |c  ef  0grc!eai2#a%!RTAX,*>*BCbdQhQR]TUV/X#Y Zh ^hhtuy{  iA  CG  ^H  ^P  ^P  Qg  ^h	h i h i hr.   c                     t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t               t        d      t              }  t        d      t              }t              }|j                  fk(  sJ |j                  t        k(  sJ t        t                     }|j                  t               fk(  sJ |j                  t        k(  sJ t        | dt              }t        | dt              }t        t        ||             }|j                  t        ||       fk(  sJ t              }|j                  fk(  sJ t        ||      }|j                  ||fk(  sJ |j                  t        k(  sJ t              }	||	k(  sJ ||k(  rJ t        t                     }
|
j                  t               fk(  sJ t        t                     }|j                  t               fk(  sJ t!        t"        fd       t!        t"        fd       t!        t"        fd	       t!        t$        fd
       t!        t$        fd       t!        t$        fd       y )Nr%   r!   r#   r    r  r  c                      t               S rk   r   r  s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    xC0 r.   c                       t               S rk   rw  r  s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    xCc: r.   c                      t                S rk   rw  r   s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    xc2 r.   c                      t        d       S r   rw  r  s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    hq"c2 r.   c                  H    t        t        dz  t        t        z  z          S r   )r   r,   r9   r  s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    hq!tacz3< r.   c                  2    t         t        g d            S r  )r   r   r   s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    hsF<,@A r.   )r   r>   r,   r?   r@   rA   r9   rB   rG   r  r  r   r   r=   r  r   r   rH   rI   )r   r!  p0r   r$  rO   r   r   r   p5p6p7rJ   rL   rM   rN   s               @@@@r/   test_Parallel_constructionr    s   	"QT'Bq!tG+bd2Bq!tGbAg4E1Q4NPQ	RB
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
1adQtVBYq[02q58!
<C
(5/!
C
(3-
C	"c	B77r3i66Q;;	&cT"C	(B77vb3$'----66Q;;CA&DSD!Q'D	"fTD5)3	/B77r6$.4444	"c3	B77r3n$$$	$	B77tTl"""66Q;;	"c	B8O8Rx<	#sF3-	.B77sCcT!23333	#sF3,c	2B77sCbS!137777
:01
::;
:23
923
9<=
9ABr.   c                  j  	
 t        t        gt        gt        gg      t        t         gt        gt        gg      	t        t        gg      
t        t        gt        gt        gg      t        t        t        gt        t        gg      } t        t        t        gt        t        gg      }t        j                  t        dt        z  gg      t              t        	      }|j                  	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t        
      	      }|j                  t        
      	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t        
      	      }|j                  t        
      	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        	      }|j                  	fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        ||       }|j                  || fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        	t        
              }|j                  	t        
        fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t         d        t        t         	fd       t        t         
fd       t        t"        
fd       t        t         fd       t        t         	fd	       y )
Nr    )r%   r    r!   r!   c                      t        d      S )Nr-   r   r-   r.   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l2. r.   c                  &    t         t              S rk   )r   r>  rW  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l4s; r.   c                      t               S rk   r  )rX  rn  r]  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l4t< r.   c                      t               S rk   r  )rn  ro  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    |D$7 r.   c                      t        d       S r   r  )rX  r]  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l1dD9 r.   c                  J    t        t        dz  t        t        z  z           S r   )r   r,   r9   )rY  r]  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l1a4!A#:udC r.   )r   r>  r=  r<  r?  r   r9   r   r=   r  r,   r@  rA  rB  r   r   rI   rH   )re  r^  p8p9p10p11p12p13rX  rY  rn  r]  ro  s           @@@@@r/   test_MIMOParallel_constructionr    s.   !C53%#"78D!SD6C53%"89D!C5'*D!C53%#"78D!C:Sz":;D!C:Sz":;D!--fqseWoqAD	dD	!B77tTl"""66Q;;886@&@@@@@	jt,d	3B77z$-t444466Q;;886@&@@@@@
tZd3T
:C88jt4d;;;;77a<<99#..9CVCCCCC
tT4
(C88dD))))99#..9CVCCCCC
tT
"C88d|###99#..9CVCCCCC
tT:teT#:TE
BC88dJud$;dUCCCC99#..9CVCCCCC 9./ 9;< 9<= :78 99:
9CDr.   c            	      P   t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              } z   z   t              k(  sJ z   z   | z   t        |       k(  sJ z   z
  | z
  t         |        k(  sJ z  z   t        t                    k(  sJ z  z
  t        t                     k(  sJ  z
  t                k(  sJ z    t        t        ddt              t                    k(  sJ z   z  t        t                    k(  sJ z   | z  z  t        t              |       k(  sJ z    |  z  t        t        ddt              t              |        k(  sJ z   z  z   | z   t        t              |       k(  sJ z   z  z   z
  t        t                     k(  sJ z   | z   | z   z  t        t        |       t        |             k(  sJ t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rqt        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ  J t        t               d      t        t                     j                         cxk(  r!t        t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t              k(  sJ  J t         d      t               j                         cxk(  rt        t
        t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ  J t         d	      t               j                         k(  rJ t        t              t                    j                         t        t        t
        t        z  t        z
  z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t                 j                         t        t
         t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t        z
  t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                          t        t
         t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t        z
  t
        t        z  t        z
  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                     j                         t        t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z   z  z
  dt
        z  t        z  dt        z  z
  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                  t               t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ t               j                  t               t        t
        t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                    t              cxk(  rt        t                    k(  sJ  J t        t              t                    }|j                  sJ |j                   rJ |j"                  sJ t                }|j                  sJ |j                   rJ |j"                  sJ t         t                    }|j                  sJ |j                   rJ |j"                  sJ y )
Nr    r!   rg   c                       z   z   S rk   r-   rL  s   r/   r0   z)test_Parallel_functions.<locals>.<lambda>   s    sSy3 r.   c                       z  z
  S rk   r-   rL  s   r/   r0   z)test_Parallel_functions.<locals>.<lambda>  s    sSW} r.   c                  $     t        g d      z   S r6   r   r   s   r/   r0   z)test_Parallel_functions.<locals>.<lambda>  r   r.   Trh   F)r   r,   r  r  r   r@   r9   r>   r?   r   r   r   rH   r   rO  r  r
  r  )rP   P1P2P3rK   rL   rM   rN   s       @@@@r/   test_Parallel_functionsr    s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C9s?hsC55559s?S HS#sC$@@@@9s?S HS#tcT$BBBBS=HS&c*:;;;;S=HS6#c?*:;;;;4#:3$----3Y<6"22q!"<hsC>PQQQQ#Is?fXc3%7====#IC F8C+=sC$HHHH3Y<'7Aq'A8CQTCUX[W[ \\\\9s3w$c6#s;KS(QQQQ9s3w$c6#s;KcT(RRRR#IOcCi(F8Cc3JHUXZ]L^,____
:./
:,-
:67 Ct,c0B0G0G0I \AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \ \ \CfcT3/$?c63$,-224,8HBqDSTHWXZ[W[^_`a^abd^dei^iWilnpqlqWqtuVuIuSUQYA!Bt+b!e34J58:1q1a4!A#b&QU+CUXZ\]X]C]7^J_acdeaehiailmoplp!Btm !em$&'l( a()*9,, , , , , CsdT2hsC#6N6S6S6U :A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxx!tax!Q$1R,r1u45q	:: : : : : cTE2hsSD6I6N6N6PPPPF3$fS#&67<<>BqD1Hq!tac"fTk'9BE'ABQ1q\QTVWXTX[\T\_`bc_cfghifijlflmqfq_qtvxyty_ySz|}~  SD3$%**,"QBqD1Hq!tac"fTk/ABE/I!JJQNSURUVWRWZ[R[^_ab^befghehikeklpep^psuwxsx^xQyyTAX1qs2vd{*RU23Q	88 8 8 S#s#((**"QBqD1Hq!tac"fTk/ABE/I!JJQNRTUVRVYZRZ]^`a]adefgdghjdjkodo]ortvwrw]wQxxTAX1qs2vd{*RU23Q	88 8 8 CfS3$/5::<BqD1Hq!tac"fTk'9BE'ABQ1q\QUVWYUYZ[U[^_`a^aUadeghdhklmnknoqkqrvkvdv!ee U !tax!Q$1R"4r1u"<=q	BB B B C%%&67AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \Csd#++,<=A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]oU^ Q dQhA!Bt!3b!e!;<a	AA A A C#s+,c30Gl8T\]`beTfhkKllllll	&c"F3$4	5B<<<$$$$>>>	#tcT	"B<<<$$$$>>>	#tVC-	.B<<<$$$$>>>r.   c                  (   t        t        t        z  t        t        z  z   t        z
  t        t              } t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              }t        t        gt        gt        gg      t        t         g|gt         gg      t        |g| gt        gg      t        t        | gt        |gg      t        t        t        gt        | gg      t        t         gg      }t        | g|  g| gg      z   z   t              cxk(  rt        t                    k(  sJ  J z
  z
  t                k(  sJ z
   |z  | z  z   t         t        | |             k(  sJ z    |z  z
  t        t        |              k(  sJ z
  z
  z   t                k(  sJ z   z
  z
  t                k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       z   |z  t        |t                    k(  sJ z
  |z  | z  t        | |t                     k(  sJ z
  z
  ||z   z  t        t        ||      t                      k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rt              j!                  t              cxk(  rut        t        t"         t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  dz   t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   t              ft        t         t        t        dz  z  z   t
        t        z  z   t"        t        t        z   z  z   t        t        z   t              ft        t
         t        z  t        z
  t
        t        z  t        z
  t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  t              ff      k(  sJ  J y )Nr!   c                       z   t         z   S rk   )r=  rW  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>F  s    td{S0 r.   c                       z
  t         z
  S rk   rj  rW  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>G  s    dTkB. r.   c                  "     z
  t         dz
  z
  S r   r   rY  rn  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>H  s    dTkQU3 r.   c                        z
  dz
  S r   r-   r  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>I  s    tedlQ. r.   c                  (    dt         dz  z
  z
   z
  S r   r   r  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>J  s    q1a4x4/$6 r.   c                       z
  z
  S rk   r-   )rY  rn  ro  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>L      td{T1 r.   c                       z
  z   S rk   r-   )rX  rY  ro  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>M  r  r.   c                       z   z   S rk   r-   rb  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>O  s    dTkD0 r.   c                       z
  z
  S rk   r-   rb  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>P  s    td{d2 r.   c                       z   t         z  S rk   rV  rh  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>U  s    tS0 r.   c                       z
  t         z  S rk   )r@   r  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>V  s    td{B. r.   c                  "     z   t         dz
  z  S )Nr'   r   r  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>W  s    td{QU3 r.   c                       z   z   dz  S r3   r-   )rX  rY  rn  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>X  s    td{T114 r.   c                  (    dt         dz  z
   z   z  S r   r   )rX  rn  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>Y  s    q1a4x$+6 r.   c                       z
  z  z  S rk   r-   )rY  rn  r]  re  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>\  s    tT1$6 r.   c                       z
  z  S rk   r-   )rX  rY  re  s   r/   r0   z-test_MIMOParallel_functions.<locals>.<lambda>^  s    tT1 r.   Trh   r    )r   r>   r9   r?   r,   r@   r   r>  r=  r<  r   r   r   rH   rI   r   rO  r   r  r  )	rN   rP   r^  rX  rY  rn  r]  re  ro  s	      @@@@@@r/   test_MIMOParallel_functionsr  4  s   
2a4!R%<!+Q
2C
2ad7RT>B.B
:C!C53%#"78D!SD6C5C4&"9:D!C5C4&3%"89D!C#;c
";<D!C:cT{";<D!SD6(+D!C5C4&3%"89D$;dD$!?o<P\]acgPhjnCoooooo$;dTED5!AAAA$;4%*dU*+|D4%UYTY[_bfafIg/hhhh$;4%*%dD:dUYTYCZBZ)[[[[$;$TD54%(NNNN$;$T4$(NNNN
:01
9./
934
9./
967
:12
:12
901
9234KD,tT2J!KKKK4Kte#z4%|DSWRW?X'YYYY4K$-Lt<TVbcgjninqupuVv1wwww
:01
9./
934
945
967 :67
:12 td3|D$7O7T7T7V VD$''(>?V 0!QTAaCF4K5G"a%5O1PST1TVWYZVZ]^_`]`ac]cdh]hVhkmopkpVprs tv	2#1a4-"Q$.BF;R!VQ	GIL\^`]`ab]bef]fjlmnjnqrjr	
A!Bt	b!e	#j% ^%')!tax!Q$1R2Dr1u2L&MqMR LTU VV W V W Vr.   c                  X	  	
 t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              	t        t
        t        z  t        z
  t
        t        z  t        z   t              
t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              t        t        t        z
  t        t        z   t              } t        t        ddt              	z  
z        }|j                  t        ddt              t        	
      dfk(  sJ |j                  t        ddt              k(  sJ |j                  t        	
      k(  sJ |j                  t        k(  sJ t        	
z        }|j                  t        	
      dfk(  sJ |j                  k(  sJ |j                  t        	
      k(  sJ |j                  t        k(  sJ t        	z        }|j                  t        	      dfk(  sJ |j                  t        	      k(  sJ t        |       }|j                  | dfk(  sJ |j                  k(  sJ |j                  t        k(  sJ t        t        ddt                    }|j                  t        ddt              dfk(  sJ |j                  t        k(  sJ |t              k(  sJ t        t        ddt                    }|j                  t        ddt              dfk(  sJ |j                  t        k(  sJ t        | z  t        ddt                     }|j                  t        t        ddt              t        |             t        ddt               dfk(  sJ |j                  t        t        ddt              t        |             k(  sJ t        t         	
fd       t        t         fd       t        t         d        t        t         d        t        t"        	fd       t        t"        	fd	       t        t"        fd
       t        t"        fd       y )Nr    r!   rg   c                  "    t         z         S rk   r   rK   rL   rM   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    hsC#I6 r.   c                  2    t         t        g d            S r6   )r   r   r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    hsF9,=> r.   c                  F    t        t        ddt              t        dz
        S r   )r   r   r,   r-   r.   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    h'71a'@!a%H r.   c                      t        dd      S r   r  r-   r.   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    hq!n r.   c                  "    t         z        S rk   r  )rL   rN   rP   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xSW5 r.   c                      t         d      S )Ng      ?r  rK   rL   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xS#6 r.   c                  $    t          dz         S )Nrg   r  r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xc2gX6 r.   c                      t               S rk   r  r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xS1 r.   )r   r,   r  r  r   r@   r9   r>   r?   r   r=   r   sys1sys2r  r   rI   rH   )rR   f1f2f3f4f5f6f7rK   rL   rM   rN   rP   s           @@@@@r/   test_Feedback_constructionr  h  s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+C	"1a+SWS[	9B77'1a0&c32GLLLL77&q!Q////77fS#s++++66Q;;	#s3w	B77sF3,b111177c>>77fS#&&&&66Q;;	#c'3	B77vc3'b111177fS#&&&&	#s	B77sCn$$$77c>>66Q;;	#'1a0	1B77s,Q15r::::66Q;;#	"1a+S	1B77'1a0#r::::66Q;;
3s7,Q15
6	6B77v.r1a8&c:JKN^_`bcefNgMgikllll77f-b!Q7S9IJJJJ 967
9>?
9HI
9,-
:56
:67
:67
:12r.   c            
         t        ddt              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              t        t        t        z
  t        t        z   t              } z   z  t              k(  sJ z  z  z   z  t        z  z        k(  sJ z  z  z   z  t        z        k(  sJ z  z  z   z  t        z        k(  sJ z  z  z  z   z  t        z        k(  sJ z  z  z  z  z   z  t        z  z        t        z  z        fv sJ t        ddt              | z  z   z  t        |       k(  sJ z   z  t              k(  sJ t        t        fd       t        t        fd       t        t        fd       t        z  z        j                         t        t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t              k(  sJ t        z  z        j                  dt        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        z        j                         t        t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        z        j                  dt        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        z        j                         t        t        t        t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        z  d      j                  dt         t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        |       j                         t        t        t        t        z   z  t        t        z  t        t        z  z   t        z
  z  t        t        t        t        z   z  t         t        z   t        t        z  t        t        z  z   t        z
  z  z   z  t              k(  sJ t        | z  t        ddt                    j                          t        t         t         t        z   z  t        t        z   z  t        t        z  t        t        z  z   t        z
  z  t        t        t        z   z  t        t        t        z   z  t         t        z   t        t        z  t        t        z  z   t        z
  z  z   z  t              k(  sJ t              j                         t        ddt              k(  sJ t        z        j                  t               t        t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t        ddt                    j                  t               t        t        t        t        z  t        z   t        t        z  z   t        z
  t              k(  sJ y )Nr    r!   c                  ,     z  z  d z  z  z   z  S r   r-   r  s   r/   r0   z)test_Feedback_functions.<locals>.<lambda>  s     c#gckQS_= r.   c                        z  z  z  z  S rk   r-   )rK   rL   rM   rP   s   r/   r0   z)test_Feedback_functions.<locals>.<lambda>  s    s3ws{S04 r.   c                  &    z   z  z  z   z  S rk   r-   r  s   r/   r0   z)test_Feedback_functions.<locals>.<lambda>  s    s3w"s3ws{*:; r.   )r   r,   r  r  r   r@   r9   r>   r?   r   r   rI   rH   r   sensitivityrO  )rR   rJ   rK   rL   rM   rN   rP   s    @@@@@@r/   test_Feedback_functionsr    s   	!Q	"B
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+Cc?hr3////c#gck!"hr3s73;&????"s3ws{"#xSW'====GSW%#c'2)>>>>GSWS[()Xc#gs-CCCCGSWS[_,-(3s7CG2LhWZ[^W^`cdg`gNh1iiii"1a+c#g56(3:LLLL"s(xR0000
9=>
:45
:;<BC$))+"Q$(QTAaCF4K%7"a%%?@!RTAX,	AAqD1Q3r6$;&Q./C012	44 4 4 BC$00	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCS!&&("Q$(QTAaCF4K%7"a%%?@1bdQh<	AAqD1Q3r6$;&Q./D023Q$1R2Dr1u2LCNOP	RR R R CS!--	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCGS!&&(BFQTAaCF4K%7"a%%?@1rcBqRStGmVXYZVZFZC[	a!Q$1R$r1u,-D.011qs2vd{0BRU0JCLMN	PP P P CGS!$00	A2sR1W}r!t#$rAv1qs2vd{0BRU0J&KLqPQR R RC""$AEBqD1b5L1$45q!QU)rAvPRSTPTWXZ\W\P\_`P`Fa:a7bdefg g gSW.q!Q78==??!aR!Va!e,bdQUlQ.>?AEAqSTuIZ[Y[^_Y_bdefbfijlninbnqrbrXsLsAtvwxy y yB  "&6q!Q&????CS!))*:;"q&1a4!A#b&+#5A#=>RC"QPQT'MTVWXTXDXAY	a!Q$1R$r1u,-B.011qs2vd{0BRU0JALMN	PP P P $Q1-s3;;<LMBqD1Hq"u,q0!45 5 5r.   c                     t        dt        t              } t        t        t        dz  dz
  t              }t        t        t        dz   t              }t        t        t        dz  dz   t              }t        | |g||gg      }t        ||g|| gg      }t        ||g| |gg      }t        ||      }|j                  ||dfk(  sJ |j
                  |k(  sJ |j                  |k(  sJ |j                  t        k(  sJ |j                  dk(  sJ |  |k(  sJ t        ||d      }|j                  ||dfk(  sJ |j
                  |k(  sJ |j                  |k(  sJ |j                  t        k(  sJ |j                  dk(  sJ t        |t        ||            }	|	j                  |t        ||      dfk(  sJ |	j
                  |k(  sJ |	j                  t        ||      k(  sJ |	j                  t        k(  sJ |	j                  dk(  sJ t        ddt        z  gddgg      }
t        j                  |
t              x}}t        ||      }|j                  ||dfk(  sJ |j
                  |j                  cxk(  r|k(  sJ  J y )Nr    r%   r!   rg   r   )r   r,   r   r   r=   r  r  r  signr   r   r?  )rK   rL   rM   rN   r0  r3  r5  r  r  r  matr  
controllerr  s                 r/   test_MIMOFeedback_constructionr    sm   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C"S#Jc
#;<E"S#Jc
#;<E"S#Jc
#;<E	eU	#B77ueR((((77e77e66Q;;77b==S6R<<	eUA	&B77ueQ''''77e77e66Q;;77a<<	eZu5	6B77uj6;;;;77e77j....66Q;;77b==
1ac(QF#
$C.::3BBD:	dJ	'B77tZ,,,,77bgg%%%%%%r.   c                     	
 t        dt        t              t        t        t        dz  dz
  t              t        t        t        dz
  t              } t        t        t        dz  dz   t              }t        ddt              }t        dt        dz
  t              }t        g| |gg      t        | g|gg      t        j                  t	        d      t              t        |g||gg      	t        |  | g| |gg      
t        |  gg      t        | |gg      t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       t        t        	
fd       t        t        	
fd       t        t        fd       t        j                  t	        d      t              t        t        fd       y )Nr    r%   r!   rg   r  c                      t               S rk   r   r  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>	  s    l34 r.   c                  0    t        t                     S rk   )r   r   )r0  r3  r5  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>
  s    l<u+EuM r.   c                      t         d      S r   r  )r0  tfm_6s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>      |E5!< r.   c                      t                S rk   r  )tfm_7s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E59 r.   c                      t         d      S )Nr   r  r2  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E5"= r.   c                      t         d      S r   r  rE  r6  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r.   c                      t                S rk   r  r  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |EE6: r.   c                      t          d      S r   r  r;  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r.   c                      t         d      S r   r  )r0  tfm_8s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r.   )	r   r,   r   r?  r   r   rI   rH   r9   )rM   rN   rP   rR   rK   rL   r0  r3  r5  rE  r6  r  r  r  s       @@@@@@@@@@r/   test_MIMOFeedback_errorsr    s   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C
1a
#C
2q1ua
(C"S#Jc
#;<E"S#Jc
#;<E"..s1v1=E"S#Jc
#;<E"cT3K#s#<=E"cTF8,E"S#J<0E 945
9MN
:<=
:9:
:=>
:<=
::;
:<="..s1v1=E
:<=r.   c            
         t        dt        t              } t        t        t        dz
  t              }t        ddt              }t        dt        dz
  t              }t        j                  t	        d      t              }t        | |g||gg      }t        | |g||gg      }t        | |g| | gg      }t        ||      }t        |t        ||       d      }	|j                  t        t        j                  dgdt        j                  gg      k(  sJ |	j                  t        dt        dz  z  t        dz  z   t        dz  t        z
  dz   z  dt        dz  z  t        dz  z
  t        dz  t        z
  dz   z  gt        dz   t        gg      k(  sJ |j                         t        t        ddt        z  t              t        ddt              ft        ddt              t        ddt              ff      cxk(  r|j                  t              k(  sJ  J |	j                  d	d
      t        t        t        dz   dt        dz  z  z   dt        dz  z  z
  t        dz  z   t        dz  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  t        z   t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |	j                  d	      t        t        t        dt        dz  z  t        dz  z
  z  t        dz  t        z
  dz   z  dt        dz  z  t        dz  z   t        dz  t        z
  dz   z  z   t        t        dz  t        z
  dz   dz  z  t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |	j                         t        t        t        dt        dz  z  t        dt        z  dz
  z  z   dz   z  t        dz  t        z
  dz   t              t        dt        dz  z  t        dz
  z  t        dz  t        z
  dz   t              ft        ddt              t        t        dt        z
  z  dt              ff      k(  sJ |	j                  d
      t        t        t        dz   t        z   t        dz  t        z
  dz   t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |j                          | j                         k(  sJ y )Nr    rg   r!   r  r   r   r#   r%   FT)cancelr   r$   )r  )r   )r   r,   r   r?  r   r   r   r  r   r
   Halfr   rO  )
rK   rL   rM   rN   r0  r3  r5  rE  F_1F_2s
             r/   test_MIMOFeedback_functionsr    s   
1a
#C
1a!eQ
'C
1a
#C
2q1ua
(C"..s1v1=E"S#Jc
#;<E"cT3K#s#<=E"S#J#s#<=E ue
$C
uj7
;C??fqvvqkAqvv;%?@@@@??f1a4!Q$AA'F	
1a4!Q$AA&'(+,a4%&5 6 6 6 6 88:!1!QqS!!<Aq!!#%5aA%>Aq!%# $ 	%L ),4J(KL L L L L 8858.!11a4%!AqD&.1QT62IAqD2PRSUVRVYZ[\^_[_Y_R_bcdeghdhbhRhklmnpqmqkqRqtuRuwx!yAqD1QT6)1a4!8a<;!=?OPQSTVW?XZjlmoplpkpstktvwyzZ{>| ~ 	   8858!!1!Qq!tVad]2CQTAXPQ\2R	AqD1a4!Q$(Q,'3()*AqD1HqL1+<)<a"ABRSUVWYZVZSZ]^_`bc_c]cScefhieilmempqeqstBu!w	!Q	"$4adUQY1$EF H 	II I I 88:!1!R1Wq!A#'{5JQ5N2OQRTUQUXYQY\]Q]_`!aAqD!a%!Q$(Q,:!<>NqRSUV>WYijkmnqrmrjsuvxyYz={ } 	~~ ~ ~ 8848 !11a4%!)QTAX\1!MO_`bcdfgcg`gjklmoplpjp`prsuvrvyzrz}~r~  AB  PC  !D	!Q	"$4adUQY1$EF H 	II I I XXZ=cTKKM)))r.   c                     t        t        t        dz  z  t        t        z  z   t        z
  t        t        z   t              t        t        t
        z  t
        t        z  z   t        z
  t
        t
              t        t         gg      } | j                  | j                  | j                  fcxk(  rdk(  sJ  J | j                  t        t        t        t                           k(  sJ | j                  t        k(  sJ t        t        t         gt        gg      }|j                  |j                  |j                  fcxk(  rdk(  sJ  J |j                  t        t        t        t        t               t        t                          k(  sJ |j                  t        k(  sJ t        t        t        gt         g t        gg      }|j                  |j                  |j                  fcxk(  rdk(  sJ  J |j                  t        t        t        t        t              t        t               t         t                          k(  sJ |j                  t        k(  sJ t!        t"        fd       t!        t"        fd       t!        t"        fd       t!        t"        fd       t!        t$        d	        t!        t$        d
        t!        t"        fd       t!        t"        d        y )Nr!   )r    r    r  )r%   r!   c                  6    t        t        gt        g gg      S rk   r   r>  r=  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>U  s    5usecU6KL r.   c                  6    t        t         gt        gg      S rk   r   r>  r<  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>V  s    5SzC:6NO r.   c                  4    t        t        gt         gg      S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>Y  s    5usCj6IJ r.   c                  4    t        t        t        g gg      S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>Z  s    5SzC56IJ r.   c                  R    t        t        t        gt        t	        ddg      gg      S Nr    r!   )r   r>  r=  r<  r   r-   r.   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>]  s$    4sCj3PQSTvBW5XY r.   c                  R    t        t        t        ddg      gt        t        gg      S r  )r   r>  r   r<  r=  r-   r.   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>^  s#    4sFAq6N6KcSVZ5XY r.   c                  0    t        t        t         g      S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>a  s    5sCoF r.   c                  "    t        t        g      S rk   )r   r>  r-   r.   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>b  s    5se< r.   )r   r?   r,   r@   r>   r9   r   r<  r@  rA  rB  r=   r   r  r>  r=  r   rH   rI   )tfm3_re  ro  rN   rP   s      @@r/   (test_TransferFunctionMatrix_constructionr  A  s1   
2ad7RT>B.B
:C
2a4!R%<!+Q
2C"cTF8,E;;5,,e.>.>?I6IIIII::uUC4[1222299>>!C#;c
";<D::$**DOO<FFFFFF99eE#t$4eCoFGGGG88q==!C:cT{cT3K"HID::$**DOO<FFFFFF99eE#sOU35EucTSVGWXYYYY88q== :LM
:OP :JK
:JK 9YZ
9YZ :FG
:<=r.   c                  "   t        t        t        dz  z  t        t        z  z   t        z
  t        t        z   t              } t        t        t        dz   z  t        dz
  z  t        dz  dz   z  dgt        t        t        dz   z  t        t        dz  dz   z  z  gg      }t        dt        z  dz   t        dz  dz
  z  gg      }t        ddgddgg      }t        j                  |t              t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        t        dt              t        t        t        t              gg      k(  sJ t        j                  |t              t        t        dt        z  dz   t        dz  dz
  t              gg      k(  sJ t        j                  |t              t        t        ddt              t        ddt              gt        ddt              t        ddt              gg      k(  sJ t        t        gt        gg      }| t        t         gt         gg      k(  sJ t        t        t        t        g| t         t         gg      }| t        t         t         t         g|  t        t        gg      k(  sJ t        j                  |t              }t        t        t        t        z  t        z  t        t        dz  z  t              t        t        t        z  t        t        dz  t        z
  z  t              gg      }|j                  t        d      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        di      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        dt        di      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        d      t        t        dt        z  t        z  t        t        dz  z  t              t        dt        z  t        t         t        dz  z   z  t              gg      k(  sJ |j                  t        d      t        t        t        t        z  t        z  t        dz  t              t        t        t        z  t         t        dz  z   t              gg      k(  sJ |j                  t        d      t        t        dt        t        dz  z  t              t        t        t        z  t        t        dz  z  t              gg      k(  sJ |j                  t        dt        dt        t        i      t        t        t        t        z  t        dz  t              t        t        t         t        dz  z   t              gg      k(  sJ |j                         t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        t        dt              gt        ddt              t        t        t        t              gg      k(  sJ |j                         t        t        t        t        z  t        z  t        t        dz  z  t              gt        t        t        z  t        t         t        dz  z   z  t              gg      k(  sJ |j                         j                         |k(  sJ |j                         j                         |k(  sJ |j!                         t#        d       dz  t#        d      t$        z  dz  z
  t#        d       dz  t#        d      t$        z  dz  z   t#        d      dz  t#        d      t$        z  dz  z
  t#        d      dz  t#        d      t$        z  dz  z   gg gg dgggk(  sJ |j!                         ddgt#        t              t#        t               gggk(  sJ |j!                         t&        t(         t#        t(        dz
  t(        dz   z        z   z  t&        t(         t#        t(        dz
  t(        dz   z        z
  z  gg t         t        z  ggt         gt&        t(         t#        t(        dz
  t(        dz   z        z   z  t&        t(         t#        t(        dz
  t(        dz   z        z
  z  gt         t        z  gggk(  sJ |j+                         g dg gg g ggk(  sJ |j+                         dgdgggk(  sJ |j+                         g g t        t        z  ggt         dt        z  z  t#        dt        z  t        z  t        dz  z         dt        z  z  z
  t         dt        z  z  t#        dt        z  t        z  t        dz  z         dt        z  z  z   gg t        t        z  gggk(  sJ t        t-        t        dt        dz  dz
  t              t        t        dz  dt        z  z
  dz   dt              t        dt        t                    gg      }t        t/        t        t        dz  dz
  dt        dz  z  t        dz  z
  dt        z  z
  dz   t              t        dt        dz  z
  dt        dz  z  t        dz  z
  dt        z  z
  dz   t                    gg      }	|j1                         t        t        t        dz  dt        z  z
  dz   t        t        dz  dz
  z  t              gg      k(  sJ |	j1                         t        t        ddt        dz  z  t        dz  z
  dt        z  z
  dz   t              gg      k(  sJ |j3                         t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              t        t        dt              t        t        t        t              gk(  sJ |j3                         t        t        t        z  t        z  t        t        dz  z  t              t        t        t        z  t        t         t        dz  z   z  t              gk(  sJ |j3                         t-        t        dt        dz  dz
  t              t        t        dz  dt        z  z
  dz   dt              t        dt        t                    gk(  sJ |	j3                         t/        t        t        dz  dz
  dt        dz  z  t        dz  z
  dt        z  z
  dz   t              t        dt        dz  z
  dt        dz  z  t        dz  z
  dt        z  z
  dz   t                    gk(  sJ |j5                         t        t        t        t        d	z
  z  t        d
z   z  t        dz  d
z   t              t        ddt              ft        d
t        z  dt              t        t        t        t              ff      k(  sJ |j                  t        dt        dt        di      j5                         t        t        dt        t              t        dt        z  dt        dz  z  dz
  t              ff      k(  sJ t        t        t        dz  t        dz  z   t        z   t        t        dz  z
  t              t        t        dz   t        dz
  z  t        dz
  t        dz   z  t              gg      }
|
j7                         t7        |
      cxk(  rZt        t        t        dz   t        dz  z
  dz
  t        dz
  t              t        t        dz   t        dz   t              ff      k(  sJ  J |j9                         t        t        t        dz  dt        dz  z  z
  dt        z  z
  t        dz  dz   t              t        ddt              ft        t        dt              t        t        t        t              ff      k(  sJ |
j9                         t        t        t        dz  t        dz  z   t        z   t        dz   t        z   t              t        t        dz  dt        z  z   dz
  t        dz  dt        z  z   dz
  t              ff      k(  sJ y )Nr!   r    r%   r#   r&   r   )rg   r   r%   r$   rw   rv   ru   gT㥛 	@g
ףp=
@g9̗@gT㥛 @)r   r?   r,   r@   r>   r   r9   r   r?  r>  r=  r<  rC   r   r   	transpose
elem_polesr   r   r  r  
elem_zerosr   r   r   _flatr   r   r   )rP   rp  rq  mat_3rX  rY  H_1H_2H_3H_4H_5s              r/   %test_TransferFunctionMatrix_functionsr   d  s4   
2ad7RT>B.B
:C 	
AEAE	AqD1H	%q)	
Aq1uIq!Q$(|$%
 E qsQwA2345EaVaV,-E!--eQ7!1!QU)QU2CQTAXq!QScdeghjkSl m	!Q	"$4Q1$=> @ 	AA A A "--eQ7!1!A#'1a4!8Q!G HIJK K K!--eQ7!1!Q!:<LQPQST<U V	!Q	"$4Q1$=> @ 	AA A A "C53%.1D5*cTFcTF+;<<<<!Cc?S3$4E"FGD5*cTC4#,>#sC@P+QRRRR !
,
,UA
6C
 #3AaCE1QT61#EGWXYZ[X[]^`acd`dgh`h]iklGm"n!o
pC88Aq>36Fq!a%yRSVWRWGXZ[]^Z^abZbde6fhxyz|}  @A  iB  6C  FV  WX  Z[  ]^  F_  aq  rs  uv  xy  az  E{  5|  }  }  }  }88QF58HAPQETUXYTYIZ\]_`\`cd\dfg8hjz{|~  BC  kD  8E  HX  YZ  \]  _`  Ha  cs  tu  wx  z{  c|  G}  7~         88Q1aL!%;>NqRSVWRWyZ[^_Z_O`bcefbfijbjlm>n  qA  BC  EF  HI  qJ  >K  N^  _`  bc  ef  Ng  iy  z{  }~  @A  iB  MC  =D  &E  E  E  E88Aq>36Fqs1uaPQSTPTfVW6XZjklmnknpqtusuxy{|x|s|p}  @A  [B  6C  5D  E  E  E  E88Aq>36Fqs1uaQRdTU6VXhijklilopnpstvwswnwyzX{5|4}~~~~88Aq>36Fq!AqD&RS6TVfghijgjlmnoqrnrlrtuVv5w4xyyyy88Q1aB'(,BEUVXYZVZ\]_`\`bcEdfvwx{}z}  AB  DE  AE  {E  GH  gI  EJ  DK  -L  L  L  L ==?47G1q5	STWXSXHY[\^_[_bc[cef7giyz{}~  AB  jC  7D  GW  XY  [\  ^_  G`  br  st  vw  yz  b{  F|  6}  ~  ~  ~  ~==?47G!AqQRTUQUvWX7Y6Z]mnopqnqstwxvx{|~{v  tA  CD  ^E  ]F  6G  H  H  H  H==?$$&#---==?$$&#--- >>47(1*tAwqy{":T!WHQJaQRST<TVZ[\V]^_V_bfghbijkbklmbmVmostuovwxox{  AB  |C  DE  |E  FG  |G  pG  "H  JL  !M	aS	    >>!Q$q'DG8)< =>>>>??2utTAXq4I/J'J#KRRVQVY]_cfg_gjnqrjr^sYtQtMu"vxz~}  AC  ~C  }D  "E#dUT4!8dQh"78892utTTUXX\_`X`LaGb?b;cdhigijlglfmn!p p p p
 >>R 02r(;;;;>>!qc
|+++??"b2a4&!1#qt*tAbDGb!eO,ad3
3bS!B$Z$qtBwQSUVQVBWYZ[]Y]B^5^	_acfhijfjekl!n n n n
 !6*:1adQh*JL\]^`a]adefgdg]gjk]kmnpqLr  uE  FG  IJ  LM  uN  $O  #P  "Q  RC
 8,<QTAXqAvPQSTPT}WXYZWZGZ]^G^`a,bdtuvyz|}y}u}  @A  BC  EF  BF  @F  IJ  LM  IM  @M  PQ  RS  PS  @S  VW  @W  YZ  e[  $\  #]  "^  _C88:/2B1a4!A#:PQ>STVWYZVZ]^V^S_ab2c1d0effff88:/2B1a1fqRStmVWXYVYFY\]F]_`2a1b0cdddd 99;+Aq1uIq1u,=q!taxKM]^_abdeMfhxyz|}  @A  iB  DT  UV  XY  [\  D]  ^  ^  ^  ^99;+AaCE1QT61=?OPQRSPSUVYZXZ]^`a]aXaUbde?fgggg99;6"21adQh"BDTUVXYUY\]^_\_U_bcUcefhiDjl|}~  AB  DE  mF  G  H  H  H  H99;8$4QTAXqAv1}qQRs?RUV?VXY$Z\lmnqrtuqumuwxyz|}y}w}  AB  DE  AE  xE  HI  JK  HK  xK  NO  xO  QR  ]S  T  U  U  U  U 99;!1!QW+q3w2GAPSUV!WYijmoprsYt u  yI  JM  NO  JO  QR  TU  yV  Xh  ij  lm  op  Xq  xr   s  	tt t t88Quaa*+113!12eghjk!lMaOQTUVXYUYQY  ]O  RO  QR  	S!T  V 	WW W W !#3AqD1a4K!OQAXq#Q!a%!a%1q51q5/1=#? "@ AC <<>Xc] u!11a4%!Q$,2BAE1!MO_`ade`eghklglnoOp qstu u u u u
 JJL%(8A!Q$19LaQRdUVhXY(Z\lmnpqst\u'vaA&(8Aq(AB'D EE F E ::<!1!Q$A+/AqD519a!PRbcdfgcgjklmjmcmpqcqstvwswz{|}z}s}  AB  tB  DE  SF  !G   I  	JJ J Jr.   c                     t        dt        t        z  t        z   t              } t	        | t
              \  }}t        t        |d   z  |d   z   t        |d   z  |d   z   t              }t        t        t
        z  t
        z   t        t
        t        z  dt        z  z   z  t
        t        z  z   dt        z  z
  t              }t        j                  ||z
  j                         j                  k(  sJ y )Nr    r   r!   )
r   rC   r,   rD   r   Tr
   Zeror   r;   rJ   numZdenZtf_test_bilineartf_test_manuals        r/   test_TransferFunction_bilinearr	    s    	!QqSUA	&B"aJD$'$q'	$q'(91T!W9T!W;LaP%ac!eQ!AaC[1_QqS-@!DN66&~5??AEEEEEr.   c                     t        dt        t        z  t        z   t              } t	        | t
              \  }}t        t        |d   z  |d   z   t        |d   z  |d   z   t              }t        t        t
        z  t        t
        t        z  t        z   z  t        z
  t              }t        j                  ||z
  j                         j                  k(  sJ y )Nr    r   )
r   rC   r,   rD   r   r  r
   r  r   r;   r  s        r/   #test_TransferFunction_backward_diffr    s    	!QqSUA	&Br1%JD$'$q'	$q'(91T!W9T!W;LaP%ac1ac!e9Q;:N66&~5??AEEEEEr.   N)[sympy.core.addr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r   r   sympy.core.powerr	   sympy.core.singletonr
   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   sympy.matrices.denser   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   sympy.physics.controlr   r   r   r   r   r   r   r   r   r   sympy.testing.pytestr   rC   r{   rD   r,   rE   rF   r9   r   r>   r?   r@   rA   rB   rG   r   r  r  r  r>  r=  r<  re   r   r   r  r  r  r  r*  rI  rS  rt  r  r  r  r  r  r  r  r  r  r  r   r	  r  r-   r.   r/   <module>r     sp    (  0 0   " % 6 9 $ ( + , ' 2   (CJ L" D# @1aAq!QBBBT2qq!Q$41,r1u4a8q!Qr!taxA1-^9BD8L1D%6P		&	(AV)@X;|@iF+C\2EjEP1Wh33l/5d$&N>D%*P!>FcJJ	F	Fr.   