
    Rie                     ^   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, ZZd-S ).    )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                  `   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n 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            d S )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     Dlib/python3.11/site-packages/sympy/physics/control/tests/test_lti.py<lambda>z4test_TransferFunction_construction.<locals>.<lambda>r       /1a88 r.   c                  8    t          t          dt                    S Nr   r+   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>s   s    /1a88 r.   c                  .    t          ddt                    S r3   r+   r-   r.   r/   r0   z4test_TransferFunction_construction.<locals>.<lambda>t   r1   r.   c                  V    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    .viii/@/@!QGG r.   c                  `    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H r.   c                  D    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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      sQ	   	!a%AAq	1	1B6a!e6adQhl####7q1uadQhlA.....
1q5!a%
+
+C7q1u7q1u8Aq1ua((((( 1q5!Q$(A
.
.C7q1u7q!tax    8Aq!tax+++++
1a4!AqD&=1,adQqSj1na
@
@C81qAv)1a4!A#:>1===== AEAE?QUQUOQ
?
?C7q1uq1uo%%%%8QQ!a%!a%!<<<<<AE1q5!,,D9QAq)))))
1q5!a%
+
+C8Aq1ua(((((AE1q5!,,D9QAq)))))
1a
#
#C7a<<<<7a<<<<81ay    CA&&D8s????8q====9*Aq11111
1QT6AaC<!A#-qAv!|Q
?
?C
1QT6AaC<!A#-qAv!|Q
?
?CczzzzBqD2ad7NR1W4bdRTk1EEDBqD2ad7NR1W4bdRTk1EED4<<<<U8t----dU8~------
1QT6AadF?QqS014acAadFlQqS6H!
L
LC8!Q$1a4!+ac11Q31a4<!A#3EqIIIIIAqD1Ha1fqslQ&6::DQTAXqAv!|a'7;;E9QT1qs7Qq!tV#3Q77777D====BqD2Ir!Q$wA~':A>>D8RT	""""8RT	Bq!tG+,,,,9bdBAI1a4$7;;;;; Aq!tax!|Q//D9AqD1HqL!,,,,,Aq!$$D9Aq	!!!! Bq#vI1c6	1B61t9aHHD9AsFR"QV)3RD	\1EEEEEBE!c(NRD	\92a4!8QGGD9AIAag5r!taxCCCCC$%=>>GS#sS3q5[3q501a4!G)A+3EQR
3RTUVVD8s1us1u}s*****9QQ,gqj1W9Q;.FA.MqQQQQQ :88999
:88999
:88999
9GGHHH
9HHIII
9??@@@
97788888r.   c                  H  :;<=>? 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            }||                                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                    }
|	                                t          |	          cxk    r|
k    sn 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                    }|                                t          |          cxk    r|k    sn 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                    }|                                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 |                                t	          t          dz  dt          z  z   dz
  t          dz  dt          z  z   dz
  t                    k    sJ |                                |k    sJ |                                t	          ||t                    k    s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                    }|                    t           dt          dt"          dt$          dt&          di          |k    sJ |                    t           dt          dt"          dt$          dt&          di                                          |k    s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                    }#|!                    |d|d|d|di          |#k    sJ |!                    |d|d|d|di                                          |"k    s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                    }&|$                    t           dt          dt"          dt$          di          |&k    sJ |$                    t           dt          dt"          dt$          di                                          |%k    s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                    })|'                    t           dt          di          |)k    sJ |'                    t           dt          di                                          |(k    sJ |)                                |(k    sJ |	                                dk    sJ |                                t3          dd          k    sJ |!                                dk    sJ |(                                dk    sJ |#                                dk    sJ t	          dt          t                                                    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                    }-|                                t<          t<          t<           t<           gk    sJ |                                g k    sJ |                                ddgk    sJ |)                                t          gk    sJ |'                                t            t          z  gk    sJ |%                                dt          z  gk    sJ t?          |"                                          t?          dddt<          z  z
  ddt<          z  z   g          k    sJ t?          |                                          t?          d d!t<          z  z
  d d!t<          z  z   g          k    s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 |,                                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|"                                du sJ |"                                d$u sJ |"                                du sJ |""                                du sJ |"                                d$u sJ |1"                                d$u sJ |2"                                d$u sJ |,"                                du sJ |)"                                J |'"                                J |#                                ddgk    sJ |#                                g k    sJ |#                                ddgk    sJ |)#                                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 |'#                                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?          |%#                                          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 |*#                                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 |-#                                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  %                                >dz  cxk    rtM          >d          cxk    r|k    sn J ??z  ?z  %                                ?dz  cxk    rtM          ?d          cxk    r|"k    sn J ?dz  tM          ?d          cxk    rt	          ddt                    k    sn J tO          >          %                                dz  >dz  cxk    r?tM          >d          cxk    r*t	          t          dz
  t          dz   t                    k    sn J ??z  %                                dz  ?d-z  cxk    rHtM          ?d-          cxk    r3t	          dt          z
  dz  t          dz  dz   dz  t                    k    sn 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 |j)                            t          d          |j*                            t          d          cxk    rdk    sn J |                    t          d          t	          t          dz
  t          dz  dt          z  z
  dz   t                    k    sJ |4                    t          d          t	          t          dz   dt                    k    sJ =+                    t          t          i          t	          dt          z  dz   dt          z
  t                    k    sJ t          tX          =fd1           =                    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|5+                    t          t8          i          t	          t           t8          t          z  z  t          t          t8          z  z  z   t          t          z  t8          z
  t8                    k    sJ |5                    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|6                                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 |7                                t          t          dz   t          dt          z   d	t          z   z  dd          d          k    sJ |8                                t          t[          d          t          ddd          d          k    sJ |9                                t          ddd          k    sJ d S )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&OPV&W&W r.   c                  ,    t          j                   S rk   rl   )expr_3s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>       /HP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                                                    S )Nr!   rx   )r   xr>   polesr-   r.   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>   s:    (8Ar!R%x!|aQRd?RTU(V(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                                                    S )Nrx   r!   )r   r>   r{   zerosr-   r.   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>  s:    (8ArEA19LaQRdTU(V(V(\(\(^(^ r.   c                  4     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                  V                          t          t          d          i          S Nr!   )xreplacer9   r   rM   s   r/   r0   z1test_TransferFunction_functions.<locals>.<lambda>2  s    cllAs1vv;7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KKE2::<<F		261	=	=B	!a%!Q$(C#JJ!6	:	:BQqS!Q$(^e444F4V<<@PQRTUWX@Y@YYYYY
WWWWXXX
:PPPPQQQ4VQ??CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrCrrrrr4VQ??CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrCrrrrr
:PPPPQQQ4VQ??CSTUWXZ[C\C\\\\\4VQ??!ac'A!G,q1Q3wQq!tV.DaHHI I I I4VQ??!AqD&1QT6/A-QQCCD D D D88884VQ??1a4!A#)1a4!8Q778 8 8 8 1a4!Q$;?A1Ha
8
8C1a4!Q$;?+QUA66A<<>>Xc]]////a//////
AEAE?QUQUOQ
?
?CQAq))A<<>>Xc]]////a////// 
1q51*q!tax!mQ	7	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	N	NB99;;*1a4!A#:>1a4!AqD&=1;LaPPPPPP::<<+AqD1Q3JNAqD1Q3JNANNNNNN99;;"99;;*1a33333399;;*2ad7R1W+<aCCCCCC 
AB	AqD2a4"	B
2r1
%
%Cs1us{C1Hs1u,<s,BAFFG!a1a4!A#)91==H88RB2q"aQ788HDDDD88RB2q"aQ788>>@@GKKKK>>w&&&&Z((NBBT2ad7R1W$r)B
2r1
%
%Cs1uc!Q$hQT&9C&?CCG!Qq!tVa1f_q%8!<<H88RB2q"a011X====88RB2q"a0117799WDDDD>>w&&&&
2ad7R1W,r!t3b8"Q$(A
F
FCs1a4x#ad(2Q6<a#a%iKKG!Q$1a4! 3a 7QqS!DDH88RB2q"a011X====88RB2q"a0117799WDDDD>>w&&&&
1r!Q$w;1q!
4
4Cs1a4x!|QUA66G!Q$
AE155H88RR$%%111188RR$%%++--8888>>w&&&& ;;==A;;==HQNN****;;==A??""""""""Aq!$$,,.."4444 1a4!8Q
*
*C
1adQh
*
*C
1a4BQT!11
5
5C
1b519q!t+QT1
5
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  P  Pw}}3/?/A(A4JZ[\J\C\']#^#^^^^^99;;1x1~~.Xa^^1D0DaHUVXYNNH[F[^_]_`adlmnpqdrdr`s]sttttt99;;71a4!8a<33Q1q1a8P8PRYZ[]^Z^abZbefZfhiRjRj1q1a  '!Q$(Q,":":GAqD1HqLRS<T<TV]^_ab^bef^fij^jlmVnVn1q1a  '!Q$(Q,":":< < < < <  ^ ^___ 6D)))DAqd###A
1a4"9r!t+QqS1Wa
8
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NN 3aR8Aq>>4J J1 LqS[\]_`SaSaObNbefdfjrstvwjxjxcyNyz|N|QHQNN##A%rXa^^&<<R?O@BChqRSnnBUAUXYWY]efgij]k]kVlAlmoAorvwxryryz{  G  HI  KL  M  M  {N  sN  OP  sP  ST  RT  X`  ab  de  Xf  Xf  Qg  sg  hj  sj  Bj k k k k k99;;AbDHQNN3qtx1~~6N5Nq5PSWXYSZSZ[\S\^_`b^bfnoprsftft]uSuvwSw5w
B$(1a..	!!!#d1ggai2!Q0H&H&JJL L L L Lw}}30@FXYZ\]Y]F]`cFcAdAd0d(d0A5;<<<uD(F $G $G G G G G99;;1x1~~.Xa^^1D0DQ0FaQRSTW_`acdWeWeSfIfghIh0h	
Xa^^	Qa1x1~~+>!>q!@@B B B B B99;;71a4!8a<33Q1q1a8P8PRYZ[]^Z^abZbefZfhiRjRj1q1a  '!Q$(Q,":":GAqD1HqLRS<T<TV]^_ab^bef^fij^jlmVnVn1q1a  '!Q$(Q,":":< < < < <  ^ ^___ 1q5!Q$A+/1
5
5C
2a4!8QUA
.
.C4#QBFAqD1a4K!OQ??????4#AaC!GQUA666666 1q5!a%
+
+C
1a4!8QUA
.
.C1q1}q1uqj!<<GAzAEA:q99GG>>sAv????S!??????????GCK36CCCCSa[[CCCCGCCCCCC6Sa[[====$4Q1$=$=======#;;r!S"WaaaaCaaaa@PQRUVQVXY\]X]_`@a@aaaaaaaG>>R37llllc#rllllll>NPQTUPUXYz\]_`\`cd\dgh[hjk>l>lllllll
:2222333
:~~~~&&&
:'''''((( 
!a%A!a	3	3B
1q5!Q$(A
.
.C"::)!a%!a%!Q??????6;;q!Aq 1 16666Q666666771a==,QUAqD1Q3JNAFFFFFF88Aq>>-a!eQ::::::<<A#3BqD1Ha!eQ#G#GGGGG
9777788888As1vv#%%%%
2ad7R1W,bdQh
:
:C<<A#3Bq!tGbAg4Er!taxQR#S#SSSSS88Aq>>-bAg1a4.?A1MMMMMM 2ad7Qq!tV+a/A1
=
=C
AEQUQUOQ
7
7CAq!$$DAq!$$D;;==CAqD1QT6!1A!5QTAXUZ8[8[8[fklllllll;;==CQa!ea!e_b5)Q)Q)Q\abbbbbbb<<>>S1s1b5'A'A'AERRRRRRR<<>>SB777777777r.   c                  p    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           d S )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      sVIII%6%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,
2
2C
1a!eQ
'
'C 9c******9c******4#:xc3777777#)c3 7 77777'''A
:6666777
:'''
:((((()))
:,,,,---
:'''
:////000 9sd++++++9sd++++++4#:3$------9s?hsSD#666666
:6666777
:((((()))
:,,,,---
:'''
:,,,,---
:////0000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           d S )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      rF999$5$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                  4    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  s   	!a%!Q$A	.	.B	!a%Q	*	*B	!QTAXq	)	)B	!a%Q	*	*B	!a%Q	*	*B	!a%Q	*	*B	!Q	"	"B b5F2rNN""""3r6VRC__$$$$3r62#:R"------3s7B3;s?fbS2#sRC888888b5F2rNN""""rERU8r2'Aq116"b>>BBC C C Cb5"r'?fRXb"-=-=>>>>>>'''A
:5555666
:~~~~~&&&
:'''
:++++,,,
:~~~~&&&
:5555666
:~~~~&&&
:'''
:~~~~&&&
:(((()))
:0000111
:~~~~&&&
:'''
:'''
:,,,,,---
:------...
:4444445555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 d S 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6GT3	'1*adQwYt^A-=&=
&JG	T	TB	#1*cAqDj#	6	6B	!A#ad(QT/AaC/!3Q1a4Z	C	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 d S 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6GT3
7A:q!tainQ.>'>!'KW
U
UC
3A:sQTz3
7
7C
1Q3q!t8ad?QqS014a!AqD&j!
D
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 d S )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6C$
7A:q!tainQ.>'>!'KW
U
UC
3A:sQTz3
7
7C
1Q3q!t8ad?QqS014a!AqD&j!
D
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           d S )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8 r.   c                  &    t                      S rk   r  rL   rM   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    vsdC00 r.   c                  &    t          d           S r   r  rJ   rN   s   r/   r0   z*test_Series_construction.<locals>.<lambda>  s    fQC00 r.   c                  V    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                  B    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	R	RB
2a4!8RTAXq
1
1C
2a4!R%<!+Q
2
2C
1adQtVBYq[02q58!
<
<C
(5//!

C
(3--

C	CB7r3i6Q;;;;	cT""C	(	(B7xSD))3/////6Q;;;;CA&&DSD!Q''D	HT4((#	.	.B7r8D$//55555	C		B7r3n$$$$	d		B7tTl""""6Q;;;;	S(3,,c	2	2B7sC#s!3!3S99999	CB8888Rxxxx
:.....///
:8888888999
:00000111
900000111
9:::::;;;
9????@@@@@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          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n J t#          	          }|j        	fk    sJ |j        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t#          	t/           |                     }|j        	t/           |           fk    sJ |j        |j        |j        fcxk    rdk    sn 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           d S )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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7 r.   c                  &    t          d           S r   r-  r3  r5  s   r/   r0   z.test_MIMOSeries_construction.<locals>.<lambda>  s    jE599 r.   c                  X    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C r.   c                  P    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    sO   Bq!tGbAg-14bAg1a46G"Q$q&6PRSTTDBqD1HbdQh22DAq!tafRik1BE91==D"T4$6$t8L#MNNE"dUGteWug#>??E"dUG9--E"SEC5C4&#9::E".vqse}}a@@E	E5	!	!B7uen$$$$6Q;;;;86@@@@&@@@@@@	E5%	(	(B7ueU+++++6Q;;;;86@@@@&@@@@@@
UL%%88%
@
@C8|UFUF;;UCCCCC9#.9CCCCVCCCCCC :++,,, 955555666 :?????@@@ :77777888 999999:::
9CCCCCDD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    rEt          t                              cxk    r"t          t                              k    sn 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                                                    cxk    rMt          t          t          dz  dt          z  t          z  t          z  z   t          dz  z   t                    k    sn J t          t                     d          t          t                                                               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n J t           d          t                                                     cxk    r~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n J t           d	          t                                                     k    rJ t          t                    t                                                               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                                                       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           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          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                                        t                     t          t          t          dz  dt          z  t          z  t          z  z   t          dz  z   t                    k    sJ t                                         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 d S )
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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
1
1C
2a4!R%<!+Q
2
2C
2ad7RT>B.B
:
:Cs73;&c3// ) ) ) )6&c:J:JC3P3P ) ) ) )#vc3''(() ) ) ) ) )c	?fS(3*<*<======s7S=HVC%5%5s;;;;;;s7S=HVC%5%5t<<<<<<s7S=3(6#s+;+;S#"F"FFFFFs7S=3(6#s+;+;cTC4"H"HHHHHs7S=3(6#s+;+;cT3"G"GGGGGs7SWS)9)96#s;K;K L LLLLLs7SWS)9)96BRSUWXZ[B\B\^dehjm^n^n;o;o p ppppps7C#Is"fS#xcT7J7JC&P&PPPPP48vsdC((((((W: 0Q : :F3<L<LMMMMMM
:******+++
:......///
:4444555 #sT***fS#.>.>.C.C.E.E ; ; ; ;AqD1Q3r6$;.Q6::; ; ; ; ; ;#sHS3$//$???6#sT\]`cfbfTgTgChChCmCmCoCo A A A ABqD1HA	AqD1Q3r6$;4FQ4N'OOPSUVWSWZ[S[^_ab^befghehikeklpep^psuwxsx^x{|]|R|~  	A  	AA A A A A A#sSD4000F3cT4J4J4O4O4Q4Q T T T TRCEAIAAqD1Q3r6$;4FQ4N(OQRSST T T T T TcC4%000F34E4E4J4J4L4LLLLL(3$$hsSD&9&9::??A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 F F3$sd##((**RCEAIAAqD1Q3r6$;4FQ4N(OQRSST T T T3S!!&&(((!RTAXAAqD1Q3r6$;4FQ4N(OQRSST T T T#sHS3$//55::<<BqD1Hq=!QTAaCF4K-?"a%-G*H1*LMPRSTPTWXPX[\}^_ab^befghehikeklpep^psuwxsx^xOy{|}}~ ~ ~ ~ #s##$4559I!QPQTTUVWTWXZTZ[_T_M_bdfgbgMgij9k9kkkkk#sSD!!))*:;;RCEAIAAqD1Q3r6$;4FQ4N(OQRSST T T T 
c""HS3$$7$7	8	8B<$$$$>	S#		B<    ~	cT8C#..	/	/B<    ~r.   c                    	
 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                    	                                cxk    rt          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n 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          ||          	                                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          ||          	                                                                t          t          ddt                    ff          k    sJ t          |   d          t          |             	                                cxk    rt          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n J t          t	          	          	d          t          t	          	          	          	                                cxk    rt          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	          	          	                              t                     k    sn J d S )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GGD!SD6SD6SD6":;;D!SD6(++D!SD3$<3$"=>>D!C#;#t"=>>D!SD6C5/22D!C5C4&/22D9t|JtT,B,BDIIIIII9td"l:dD3I3I4QU&V&VVVVV9td"l:dD3I3ID5SWRW&X&XXXXX9t$Zd5K5KTTXSX(Y(YYYYY:$t$Zt5L5LjY]`d_dNeNe(f(fffff
:.....///
9,,,,,---
911111222
9,,,,,---
955555666 9//////000
95555555666
933333334449dU?j$d;;;;;;$J
4$ = ===== :,,,,,---
9*****+++
900000111
9)))))***
933333444 tTD111Zd5K5K5P5P5R5R > > > >!$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66EacGqAvaczAoqs34566E'3E1==?U?abgij?k?k$DtT""''))!$4QAz\1a4!A#:PQ>TUBU5UXY\]X]`aWacdfgcgjklmjmcmpqcqtubuWuwx$y$y#{"}~~   dD!!&&((11337MP`abdeghPiPiOkNm7n7nnnnn uteTD999tedUD))..0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EEl4..55::<<h h h 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  0grc!eai2#a%!RTAX,*>*BCbdQhQR]TUVV/X#Y Z Zh h h h ^hhtuy{  iA  iA  CG  ^H  ^H  ^P  ^P  Qg  ^h  ^h	h h h h h h h 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           d S )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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2 r.   c                  &    t          d           S r   rw  r  s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    hq"c22 r.   c                  V    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                  B    t           t          g d                    S r  )r   r   r   s   r/   r0   z,test_Parallel_construction.<locals>.<lambda>  s    hsF<<<,@,@A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	R	RB
2a4!8RTAXq
1
1C
2a4!R%<!+Q
2
2C
1adQtVBYq[02q58!
<
<C
(5//!

C
(3--

C	"c		B7r3i6Q;;;;	&cT""C	(	(B7vb3$''-----6Q;;;;CA&&DSD!Q''D	"fTD5))3	/	/B7r6$..44444	"c3		B7r3n$$$$	$		B7tTl""""6Q;;;;	"c		B8888Rxxxx	#sF3--	.	.B7sCcT!2!233333	#sF3,,c	2	2B7sCbS!1!1377777
:00000111
::::::::;;;
:22222333
922222333
9<<<<<===
9AAAABBBBBr.   c                  |  	
 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n 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n 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n J t          	          }|j        	fk    sJ |j        |j        |j        fcxk    rdk    sn J t          ||           }|j        || fk    sJ |j        |j        |j        fcxk    rdk    sn J t          	t          
                      }|j        	t          
            fk    sJ |j        |j        |j        fcxk    rdk    sn J t          t           d            t          t           	fd           t          t           
fd           t          t"          
fd           t          t           fd           t          t           	fd	           d S )
Nr    )r%   r    r!   r!   c                       t          d          S )Nr-   r   r-   r.   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l2.. r.   c                  0    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7 r.   c                  &    t          d           S r   r  )rX  r]  s   r/   r0   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l1dD99 r.   c                  X    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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88D!SD6C53%"899D!C5'**D!C53%#"788D!C:Sz":;;D!C:Sz":;;D!-fqseWooqAAD	dD	!	!B7tTl""""6Q;;;;86@@@@&@@@@@@	jt,,d	3	3B7z$--t444446Q;;;;86@@@@&@@@@@@
tZd33T
:
:C8jt44d;;;;;7a<<<<9#.9CCCCVCCCCCC
tT4
(
(C8dD)))))9#.9CCCCVCCCCCC
tT
"
"C8d|####9#.9CCCCVCCCCCC
tT:teT#:#:TE
B
BC8dJud$;$;dUCCCCC9#.9CCCCVCCCCCC 9../// 9;;;;;<<< 9<<<<<<=== :77777888 999999:::
9CCCCCDDDDDr.   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                    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                                                    cxk    rt          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n J t          t                     d          t          t                                                               cxk    rGt          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n J t           d          t                                                     cxk    r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n J t           d	          t                                                     k    rJ t          t                    t                                                              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                                                       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
           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          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                                        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                                         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n 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 d S )
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
1
1C
2a4!R%<!+Q
2
2C
2ad7RT>B.B
:
:C9s?hsC5555559s?S HS#sC$@$@@@@@9s?S HS#tcT$B$BBBBBS=HS&c*:*:;;;;;;S=HS6#c??*:;;;;;;4#:3$------3Y<6"22q!"<"<hsC>P>PQQQQQQ#Is?fXc3%7%7======#IC F8C+=+=sC$H$HHHHH3Y<'7Aq'A'A8CQTCUCUX[W[ \ \\\\\9s3w$c6#s;K;KS(Q(QQQQQ9s3w$c6#s;K;KcT(R(RRRRR#IOcCi(F8Cc3J3JHUXZ]L^L^,_,_____
:......///
:,,,,,,---
:6666777 Ct,,,c0B0B0G0G0I0I \ \ \ \AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[[\ \ \ \ \ \CfcT3//$???c63$,,--224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, 9,, , , , , , CsdT222hsC#6N6N6S6S6U6U : : : :A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxx!tax!Q$1R,r1u45q	: 	:: : : : : : cTE222hsSD6I6I6N6N6P6PPPPPF3$$fS#&6&67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 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 8 8 CfS3$//5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 B B C%%&67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 A A C#s++,,c30G0Gllll8T\]`beTfTfhkKlKlllllll	&c""F3$4$4	5	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n 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                                                    cxk    rt                                        t                    cxk    rt          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n J d S )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
2
2C
2ad7RT>B.B
:
:C!C53%#"788D!SD6C5C4&"9::D!C5C4&3%"899D!C#;c
";<<D!C:cT{";<<D!SD6(++D!C5C4&3%"899D$;dD$!?!?oooo<P\]acgPhPhjnCoCooooooo$;dTED5!A!AAAAA$;4%*dU*+|D4%UYTY[_bfafIgIg/h/hhhhh$;4%*%dD:dUYTYCZCZBZ)[)[[[[[$;$TD54%(N(NNNNN$;$T4$(N(NNNNN
:00000111
9.....///
933333444
9.....///
966666777
:111111222
:111111222
9000000111
92222223334KD,tT2J2J!K!KKKKK4Kte#z4%|DSWRW?X?X'Y'YYYYY4K$-Lt<T<TVbcgjninqupuVvVv1w1wwwww
:00000111
9.....///
933333444
9444444555
966666777 :6666666777
:111111222 td333|D$7O7O7T7T7V7V V V V VD$''(>??V V V V 0!QTAaCF4K5G"a%5O1PST1TVWYZVZ]^_`]`ac]cdh]hVhkmopkpVprs t tv	2#1a4-"Q$.BF;R!VQ	G	GIL\^`]`ab]bef]fjlmnjnqrjr	
A!Bt	b!e	#j% ^%')!tax!Q$1R2Dr1u2L&MqMR MR LTU V VV V V V V V V V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                    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           d S )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6 r.   c                  B    t           t          g d                    S r6   )r   r   r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    hsF999,=,=>> r.   c                  Z    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H r.   c                  "    t          dd          S r   r  r-   r.   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    hq!nn r.   c                  *    t           z            S rk   r  )rL   rN   rP   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xSW55 r.   c                  &    t           d          S )Ng      ?r  rK   rL   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xS#66 r.   c                  ,    t            dz             S )Nrg   r  r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xc2gX66 r.   c                  $    t                     S rk   r  r   s   r/   r0   z,test_Feedback_construction.<locals>.<lambda>  s    xS1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
1
1C
2a4!R%<!+Q
2
2C
2ad7RT>B.B
:
:C
1q5!a%
+
+C	"1a++SWS[	9	9B7'1a00&c32G2GLLLLL7&q!Q//////7fS#s++++++6Q;;;;	#s3w		B7sF3,,b111117c>>>>7fS#&&&&&&6Q;;;;	#c'3		B7vc3''b111117fS#&&&&&&	#s		B7sCn$$$$7c>>>>6Q;;;;	#'1a00	1	1B7s,Q155r:::::6Q;;;;#	"1a++S	1	1B7'1a00#r:::::6Q;;;;
3s7,Q155
6
6	6B7v.r1a88&c:J:JKKN^_`bcefNgNgMgiklllll7f-b!Q77S9I9IJJJJJJ 9666666777
9>>>>???
9HHIII
9,,---
:555555666
:66666777
:6666777
:1111122222r.   c            
      f   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                                            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                                            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                                            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          |                                           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                                                               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                                                    t          ddt                    k    sJ t          z                                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                                                  t                     t          t          t          t          z  t          z   t          t          z  z   t          z
  t                    k    sJ d S )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
1
1C
2a4!R%<!+Q
2
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CCGSWS[_,-(3s7CG2L2LhWZ[^W^`cdg`gNhNh1iiiii"1a++c#g56(3:L:LLLLL"s(xR000000
9======>>>
:4444444555
:;;;;;;;<<<BC$$))++"Q$(QTAaCF4K%7"a%%?@!RTAX,	AAqD1Q3r6$;&Q./C012	4 	44 4 4 4 BC$$0	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG 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 R R CS!!-	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG 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 P P CGS!$$0	A2sR1W}r!t#$rAv1qs2vd{0BRU0J&KLqPQR R R RC""$$AEBqD1b5L1$45q!QU)rAvPRSTPTWXZ\W\P\_`P`Fa:a7bdeffg g g gSW.q!Q7788==???!aR!Va!e,bdQUlQ.>?AEAqSTuIZ[Y[^_Y_bdefbfijlninbnqrbrXsLsAtvwxxy 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 P P $Q1--s33;;<LMMBqD1Hq"u,q0!445 5 5 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n J d S )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    s   
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7ueR(((((7e7e6Q;;;;7b====S6R<<<<	eUA	&	&B7ueQ'''''7e7e6Q;;;;7a<<<<	eZu55	6	6B7uj66;;;;;7e7j......6Q;;;;7b====
1ac(QF#
$
$C.:3BBBD:	dJ	'	'B7tZ,,,,,7bg%%%%%%%%%%%%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           d S )Nr    r%   r!   rg   r  c                  $    t                     S rk   r   r  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>	  s    l344 r.   c                  @    t          t                               S rk   )r   r   )r0  r3  r5  s   r/   r0   z*test_MIMOFeedback_errors.<locals>.<lambda>
  s    l<u+E+EuM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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    sZ   
1a
#
#C
1adQh
*
*C
1a!eQ
'
'C
1adQh
*
*C
1a
#
#C
2q1ua
(
(C"S#Jc
#;<<E"S#Jc
#;<<E".s1vv1===E"S#Jc
#;<<E"cT3K#s#<==E"cTF8,,E"S#J<00E 944444555
9MMMMMMNNN
:<<<<<===
:9999:::
:=====>>>
:<<<<<===
::::::;;;
:<<<<===".s1vv1===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 |                                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|                    t                    k    sn 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 |	                    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 |	                                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 |	                    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 |                                 |                                 k    sJ d S )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".s1vv1===E"S#Jc
#;<<E"cT3K#s#<==E"S#J#s#<==E ue
$
$C
uj77
;
;C?fqvqkAqv;%?@@@@@@?f1a4!Q$AA'F	
1a4!Q$AA&'(+,a4%&5 6 6 6 6 6 6 88::!1!QqS!!<!<Aq!!!#%5aA%>%>Aq!!%# $ 	% 	%L L L L ),4J(K(KL L L L L L 8858..!11a4%!AqD&.1QT62IAqD2PRSUVRVYZ[\^_[_Y_R_bcdeghdhbhRhklmnpqmqkqRqtuRuwx!y!yAqD1QT6)1a4!8a<;;!=?OPQSTVW?X?XZjlmoplpkpstktvwyzZ{Z{>| ~ 	 	    8858!!!1!Qq!tVad]2CQTAXPQ\2R	AqD1a4!Q$(Q,'3()*AqD1HqL1+<)<a"A "ABRSUVWYZVZSZ]^_`bc_c]cScefhieilmempqeqstBuBu!w	!Q	"	"$4adUQY1$E$EF H 	I 	II I I I 88::!1!R1Wq!A#'{5JQ5N2OQRTUQUXYQY\]Q]_`!a!aAqD!a%!Q$(Q,::!<>NqRSUV>W>WYijkmnqrmrjsuvxyYzYz={ } 	~ 	~~ ~ ~ ~ 8848  !11a4%!)QTAX\1!M!MO_`bcdfgcg`gjklmoplpjp`prsuvrvyzrz}~r~  AB  PC  PC  !D	!Q	"	"$4adUQY1$E$EF H 	I 	II I I I XXZZ=cTKKMM))))))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n 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n 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n 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            d S )Nr!   )r    r    r  )r%   r!   c                  B    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L r.   c                  B    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O r.   c                  @    t          t          gt           gg          S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>Y  s    5usCj6IJJ r.   c                  @    t          t          t          g gg          S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>Z  s    5SzC56IJJ r.   c                  h    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Y r.   c                  h    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(    4sFAq6NN6KcSVZ5XYY r.   c                  <    t          t          t           g          S rk   r  r   s   r/   r0   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>a  s    5sCoF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  s   
2ad7RT>B.B
:
:C
2a4!R%<!+Q
2
2C"cTF8,,E;5,e.>?IIII6IIIIII:uUC4[[112222229>>>>!C#;c
";<<D:$*DO<FFFFFFFFFF9eE#t$4$4eCooFFGGGGGG8q====!C:cT{cT3K"HIID:$*DO<FFFFFFFFFF9eE#sOOU35E5EucTSVGWGWXXYYYYYY8q==== :LLLLMMM
:OOOOOPPP :JJJJKKK
:JJJJKKK 9YYZZZ
9YYZZZ :FFFFGG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          }|                    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 |                    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 |                    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 |                    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 |                    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 |                    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 |                    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 |                                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 |                                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 |                                                                |k    sJ |                                                                |k    s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 |                                ddgt#          t                    t#          t                     gggk    s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 |                                g dg gg g ggk    sJ |                                dgdgggk    s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          }	|                                t          t          t          dz  dt          z  z
  dz   t          t          dz  dz
  z  t                    gg          k    sJ |	                                t          t          ddt          dz  z  t          dz  z
  dt          z  z
  dz   t                    gg          k    sJ |                                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 |                                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 |                                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 |	                                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 |                                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 |                    t          dt          dt          di                                          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          }
|
                                t7          |
          cxk    rmt          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n J |                                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 |
                                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 d S )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  sQ   
2ad7RT>B.B
:
:C 	
AEAE	AqD1H	%q)	
Aq1uIq!Q$(|$%
  E qsQwA23455EaVaV,--E!-eQ77!1!QU)QU2CQTAXq!Q!QScdeghjkSlSl m	!Q	"	"$4Q1$=$=> @ 	A 	AA A A A "-eQ77!1!A#'1a4!8Q!G!G HIJJK K K K!-eQ77!1!Q!:!:<LQPQST<U<U V	!Q	"	"$4Q1$=$=> @ 	A 	AA A A A "C53%.11D5*cTFcTF+;<<<<<<!Cc?S3$4E"FGGD5*cTC4#,>#sC@P+QRRRRRR !
,UA
6
6C
 #3AaCE1QT61#E#EGWXYZ[X[]^`acd`dgh`h]iklGmGm"n!o
p
pC88Aq>>36Fq!a%yRSVWRWGXZ[]^Z^abZbde6f6fhxyz|}  @A  iB  iB  6C  FV  WX  Z[  ]^  F_  F_  aq  rs  uv  xy  az  az  E{  5|  }  }  }  }  }  }88QF58HAPQETUXYTYIZ\]_`\`cd\dfg8h8hjz{|~  BC  kD  kD  8E  HX  YZ  \]  _`  Ha  Ha  cs  tu  wx  z{  c|  c|  G}  7~              88Q1aL!!%;>NqRSVWRWyZ[^_Z_O`bcefbfijbjlm>n>n  qA  BC  EF  HI  qJ  qJ  >K  N^  _`  bc  ef  Ng  Ng  iy  z{  }~  @A  iB  iB  MC  =D  &E  &E  E  E  E  E88Aq>>36Fqs1uaPQSTPTfVW6X6XZjklmnknpqtusuxy{|x|s|p}  @A  [B  [B  6C  5D  E  E  E  E  E  E88Aq>>36Fqs1uaQRdTU6V6VXhijklilopnpstvwswnwyzX{X{5|4}~~~~~~88Aq>>36Fq!AqD&RS6T6TVfghijgjlmnoqrnrlrtuVvVv5w4xyyyyyy88Q1aB'((,BEUVXYZVZ\]_`\`bcEdEdfvwx{}z}  AB  DE  AE  {E  GH  gI  gI  EJ  DK  -L  -L  L  L  L  L ==??47G1q5	STWXSXHY[\^_[_bc[cef7g7giyz{}~  AB  jC  jC  7D  GW  XY  [\  ^_  G`  G`  br  st  vw  yz  b{  b{  F|  6}  ~  ~  ~  ~  ~  ~==??47G!AqQRTUQUvWX7Y7Y6Z]mnopqnqstwxvx{|~{v  tA  CD  ^E  ^E  ]F  6G  H  H  H  H  H  H==??$$&&#----==??$$&&#---- >>477(1*tAwwqy{":T!WWHQJaQRST<TVZ[\V]V]^_V_bfghbibijkbklmbmVmostuovovwxox{  AB  |C  |C  DE  |E  FG  |G  pG  "H  JL  !M	aS	     >>!Q$q''DGG8)< =>>>>>??2utTAXq4I/J/J'J#KRRVQVY]_cfg_gjnqrjr^sYtYtQtMu"vxz~}  AC  ~C  }D  "E#dUT4!8dQh"788892utTTUXX\_`X`LaGbGb?b;cdhigijlglfmn!p p p p p
 >>R 02r(;;;;;>>!qc
|++++??"b2a4&!1#qt*tAbDGb!eO,,ad3
3bS!B$Z$qtBwQSUVQVBWBWYZ[]Y]B^5^	_acfhijfjekl!n n n n n
 !6*:1adQh*J*JL\]^`a]adefgdg]gjk]kmnpqLrLr  uE  FG  IJ  LM  uN  uN  $O  $O  #P  "Q  R  RC
 8,<QTAXqAvPQSTPT}WXYZWZGZ]^G^`a,b,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[  e[  $\  $\  #]  "^  _  _C88::/2B1a4!A#:PQ>STVWYZVZ]^V^S_ab2c2c1d0effffff88::/2B1a1fqRStmVWXYVYFY\]F]_`2a2a1b0cdddddd 99;;+Aq1uIq1u,=q!taxKKM]^_abdeMfMfhxyz|}  @A  iB  iB  DT  UV  XY  [\  D]  D]  ^  ^  ^  ^  ^99;;+AaCE1QT61==?OPQRSPSUVYZXZ]^`a]aXaUbde?f?fggggg99;;6"21adQh"B"BDTUVXYUY\]^_\_U_bcUcefhiDjDjl|}~  AB  DE  mF  mF  G  G  H  H  H  H  H99;;8$4QTAXqAv1}qQRs?RUV?VXY$Z$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  ]S  T  T  U  U  U  U  U 99;;!1!QW+q3w2GAPSUV!W!WYijmoprsYtYt u  yI  JM  NO  JO  QR  TU  yV  yV  Xh  ij  lm  op  Xq  Xq  xr   s  	t  	tt t t t88Quaa*++1133!12eghjk!l!lMaOQTUVXYUYQY  ]O  RO  QR  	S  	S!T  V 	W 	WW W W W !#3AqD1a4K!OQAXq#Q#Q!a%!a%1q51q5/1==#? "@ A AC <<>>Xc]] u u u u!11a4%!Q$,2BAE1!M!MO_`ade`eghklglnoOpOp qsttu u u u u u
 JJLL%(8A!Q$19LaQRdUVhXY(Z(Z\lmnpqst\u\u'vaA&&(8Aq(A(AB'D E EE E E E ::<<!1!Q$A+/AqD519a!P!PRbcdfgcgjklmjmcmpqcqstvwswz{|}z}s}  AB  tB  DE  SF  SF  !G   I  	J  	JJ J J J J Jr.   c                  8   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	        k    sJ d S )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P%ac!eQ!AaC[1_QqS-@!DDN6&~5??AAEE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	        k    sJ d S )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P%ac1ac!e9Q;::N6&~5??AAEE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     s
         ( ( ( ( ( (       0 0 0 0 0 0 0 0 0 0             " " " " " " % % % % % % 6 6 6 6 6 6 9 9 9 9 9 9 $ $ $ $ $ $ ( ( ( ( ( ( + + + + + + , , , , , , ' ' ' ' ' ' 2 2 2 2 2 2 2 2                        ( ' ' ' ' 'CJ7 L" D# D# @1aAq!QBBBT2qq!Q$41,r1u4a88q!Qr!taxA1--^9 ^9 ^9BD8 D8 D8L1 1 1D%6 %6 %6P	 	 		& 	& 	&	 	 	(A (A (AV)@ )@ )@X; ; ;|@i @i @iF+C +C +C\2E 2E 2EjE E EP1W 1W 1Wh33 33 33l/5 /5 /5d$& $& $&N> > >D%* %* %*P!> !> !>FcJ cJ cJJ	F 	F 	F	F 	F 	F 	F 	Fr.   