
    Qik                    J   d dl mZ d dlmZ d dlmZ d dlmZ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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(m)Z) d dlm*Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>  ed          \  Z?Z@ZAZBZCZDZEZFZGZHZIZJZK ed          \  ZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ[ e-deCdz  deIz  eJz  eCz  z   eJdz  z   eC          Z\ e-eGdeC          Z] e-eNeFz  eCz
  eNeCz  eFz   eC          Z^d Z_d Z`d Zad Zbd Zcd Zdd  Zed! Zfd" Zgd# Zhd$ Zid% Zjd& Zkd' Zld( Zmd) Znd* Zod+ Zpd, Zqd- Zrd. Zsd/ Ztd0 Zud1 Zvd2 Zwd3 Zxd4 Zyd5 Zzd6 Z{d7 Z|d8 Z}d9 Z~d: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdCS )D    )Add)Function)Mul)IpiRationaloo)Pow)S)symbols)explog)	Heaviside)sqrt)atan)eye)SISOLinearTimeInvariant)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix
ShapeError)sincos)TransferFunctionPIDControllerSeriesParallelFeedbackTransferFunctionMatrix
MIMOSeriesMIMOParallelMIMOFeedback
StateSpacegbtbilinearforward_diffbackward_diffphase_margingain_margin)raisesz.a, x, b, c, s, g, d, p, k,    tau, zeta, wn, Tza0:4,    b0:4, c0:4, d0:4      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/            	            ?      r   g333333?gffffff!g      ?gzomega_o, k_p, k_o, k_ic                  .    t          ddt                    S )Nr1   r   r   s     |/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/physics/control/tests/test_lti.py<lambda>z4test_TransferFunction_construction.<locals>.<lambda>x       /1a88 r=   c                  8    t          t          dt                    S Nr   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>y   s    /1a88 r=   c                  .    t          ddt                    S rB   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>z   r@   r=   c                  V    t          t          g d          t          t                    S Nr.   r/   r3   )r   r   r;   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>|   s    .viii/@/@!QGG r=   c                  `    t          t          dz  dt          z  z   dz
  t          dz   d          S )Nr/   r.   r3   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>~   s'    .q!taczA~q1uaHH r=   c                  D    t          t          dz   dt          z
  d          S )Nr.   r2   r1   )r   pr<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>   s    .q1ua!eQ?? r=   c                  $    t          ddd          S )Nr3   r1   r7   )r   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>   s    .q!Q77 r=   )r   r;   numdenargsrI   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_constructionru   "   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                  P  ?@ABCDEF 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  Ad	Bd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          Afd           t	          j        At                    t	          t          t          dz  z  dt          z  z   t          dz   dz  t                    k    sJ t	          j        At                    t	          t          t          dz  z  dt          z  z   t          dz   dz  t                    k    sJ t          t          Bfd           t	          j        Bt                    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	          j        ddgg dt                    }	t          dz  dt          z  g}
t          dz  t          dz   dg}t	          j        |
|t                    }g dCddg?|	t	          t          dz   dt          dz  z  dt          z  z   dz   t                    k    sJ |t	          t          dz  t          z  dt          z  z   t          dz  t          dz  z  t          t          dz   z  z   dz   t                    k    sJ t          t          ?Cfd           dg}ddg}d}t	          j        |||t                    }	|	t	          dt          z  dz
  t          dz   dt          z  z
  t          dz   dt          z  z   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 t5          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 |	                    t8                    t8          dz  t8          dz  dt8          z  z   dz
  z  dt8          z  t8          dz  dt8          z  z   dz
  z  z   dt8          dz  dt8          z  z   dz
  z  z
  k    sJ |                    dt          z             t;          d          d z  t;          d          t          z  d z  z   k    sJ |                    t;          d          dz            t&          t          t          z  z  t$          t"          z  t          t;          d          dz  z  z  t;          d          t$          z  t          z  dz  z   dt"          z  t*          z  t          t;          d          dz  z  z  dz  z   t;          d           t*          z  t          z  d
z  z   z  ddt;          d          dz  z  z  dt;          d          dz  z  z  t(          z  d
t$          z  t"          z  t          t;          d          dz  z  z  d!t$          z  t          z  z   d!t"          z  t*          z  t          t;          d          dz  z  z  z   d t*          z  t          z  z   z  z
  k    sJ |                                dk    sJ |	                                t?          dd          k    sJ |'                                dk    sJ |.                                dk    sJ |)                                dk    sJ t	          dt          t                                                    t@          k    sJ t	          tB          dz  tD          z
  tD          tB                    }0t	          tD          tB          dz  tD          z
  tB                    }1t	          tB          dz  tB          d"z  tB          z   tB          dz  z   tB                    }2t	          tB          d"z  tB          z   tB          dz  z   tB          dz  tB                    }3|#                                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 tI          |(#                                          tI          d%d&d't          z  z
  d&d't          z  z   g          k    sJ tI          |#                                          tI          d(d)t          z  z
  d(d)t          z  z   g          k    sJ |1#                                tD          t?          dd          z  tD          t?          dd          z   t          tD          t?          dd          z  z  t           tD          t?          dd          z  z  gk    sJ |2#                                tK          tB          d
z  tB          z   dz   d          dtK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d	          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          g
k    sJ t          tL          d*            t5          d+d,-          \  }4}5t5          d.d,/          }6t	          t          dz  t&          z   t$          t          z  z
  |4t          z  |5z
  t                    }2t	          t          dz  t&          z   t$          t          z  z
  |4t          z  dz
  t                    }7t	          t          dz  t&          z   t$          t          z  z
  |4t          z  |6z
  t                    }8|'                                du sJ |'                                d,u sJ |	'                                du sJ |('                                du sJ |'                                d,u sJ |7'                                d,u sJ |8'                                d,u sJ |2'                                du sJ |/'                                J |-'                                J |(                                ddgk    sJ |(                                g k    sJ |	(                                ddgk    sJ |/(                                dt?          dd          z  t           t?          dd          z  z  dz  dt?          dd          z   t           t?          dd          z  z  d0z  tS          d          dt?          dd          z  z  t          z  t           t?          dd          z  z  d0z  z
  dt?          dd          z   t           t?          dd          z  z  d0z  tS          d          dt?          dd          z  z  t          z  t           t?          dd          z  z  d0z  z   gk    sJ |-(                                t          t$          z  t?          dd          z  t          t$          z  t?          dd          z   dz  tS          d          t          z  t          t$          z  t?          dd          z  z  dz  z
  t          t$          z  t?          dd          z   dz  tS          d          t          z  t          t$          z  t?          dd          z  z  dz  z   gk    sJ tI          |+(                                          tI          d1d2tS          d3t          dz  z  dz
            z  z
  d2tS          d3t          dz  z  dz
            z  d1z   g          k    sJ |0(                                tD          t?          dd          z  tD          t?          dd          z   dz  tS          d          t          z  tD          t?          dd          z  z  dz  z
  tD          t?          dd          z   dz  tS          d          t          z  tD          t?          dd          z  z  dz  z   gk    sJ |3(                                tK          tB          d
z  tB          z   dz   d          dtK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d	          tK          tB          d
z  tB          z   dz   d          tK          tB          d
z  tB          z   dz   d          g
k    sJ t          tL          d4            t	          t          dz   t          dz  t          dz  z
  d
z   t                    }t	          dt          z  dz   dt          z
  t                    D| t	          t           dz
  t          dz  t          dz  z
  d
z   t                    k    sJ D t	          dt          z  dz
  dt          z
  t                    k    sJ t	          t          dz   t          dz
  t                    Et	          t          dz  dz   dt          z
  t                    Ft	          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                    }EEz  *                                Edz  cxk    rtW          Ed          cxk    r|k    sn J FFz  Fz  *                                Fdz  cxk    rtW          Fd          cxk    r|(k    sn J Fdz  tW          Fd          cxk    rt	          ddt                    k    sn J tY          E          *                                dz  Edz  cxk    r?tW          Ed          cxk    r*t	          t          dz
  t          dz   t                    k    sn J FFz  *                                dz  Fd5z  cxk    rHtW          Fd5          cxk    r3t	          dt          z
  dz  t          dz  dz   dz  t                    k    sn J t          t          Efd6           t          t          Ffd7           t          t          EFfd8           t	          t          dz
  t          dz  dt          z  z
  dz   t                    }t	          t          t          z   t          dz  dz
  t                    }9t[          |          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 |9                    t          d          t	          t          dz   dt                    k    sJ D0                    t          t          i          t	          dt          z  dz   dt          z
  t                    k    sJ t          tb          Dfd9           D                    t          t          d                    Dk    sJ t	          t&          t          t          z  z  t$          t          t          z  z  z   t"          t          z  t          z
  t                    }:|:0                    t          tD          i          t	          t&          tD          t          z  z  t$          t          tD          z  z  z   t"          t          z  tD          z
  tD                    k    sJ |:                    t          tD                    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                    };t	          dt          z   dt          z   d	t          z   z  t                    }<t	          ddt                    }=t	          ddt                    }>|;                                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 |<                                t          t          dz   t          dt          z   d	t          z   z  dd          d          k    sJ |=                                t          t;          d          t          ddd          d          k    sJ |>                                t          ddd          k    sJ d S ):Nr   Fevaluater/   r2   r.   r3   r5   r4   r1   r7   c                  ,    t          j                   S Nr   from_rational_expression)expr_2s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&OPV&W&W r=   c                  ,    t          j                   S r{   r|   )expr_3s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>       /HPP r=   c                  ,    t          j                   S r{   r|   )expr_4s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   r   r=   )r3   r1   r2   rF   c                  :    t          j         t                    S r{   )r   from_coeff_listsr;   )den3num3s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&GdTU&V&V r=   y             @y                      ?       @      @      @      @zc1, d0:3g      @r8         
   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/   r   )r   xrN   polesr<   r=   r>   r?   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 )Nr   r/   )r   rN   r   zerosr<   r=   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>2  s:    (8ArEA19LaQRdTU(V(V(\(\(^(^ r=   c                  4     t           dz  t           z   dz
  z  S Nr/   r.   r;   r^   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>E  s    sQTAX\2 r=   c                       t           z  S r{   r   r`   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>F  s    sAv r=   c                       z  S r{   r<   r^   r`   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>G  s    sCx r=   c                  V                          t          t          d          i          S Nr/   )xreplacerI   r   r]   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>R  s    cllAs1vv;77 r=   )2r   r
   r;   rI   r   r   tauto_exprr}   r   r-   ZeroDivisionErrorrX   r   from_zpkr   r   rP   rO   rN   rQ   rR   rW   expandsubsevalfr   eval_frequencywnr   dc_gainr   r	   r   kr   strr   NotImplementedError	is_stabler   r   doitpowr   r   rK   rL   r   rY   )Gexpr_1expr_5expr_6rZ   delayexpr_7H1H2expr_8r[   num2den2r\   r   r   gaintf0rS   rT   G1G2crV   efrU   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_rb   rd   re   rh   ri   rk   r   r~   r   r   r   r]   r^   r`   sG                                                                  @@@@@@@@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 
+QFIIIq
A
ACqD!A#;DqD!a%D

+D$
:
:C99Dq6D"1q5!AqD&1Q3,*:A>>>>>>"1a46AaC<AadQAY1F1JANNNNNN
VVVVVWWW CEENED

#E5$
:
:C"1Q38a#gAoC#a%-PRSTTTTTT 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&&&& b!!RUBEAbDL1,<%="b!eaPRdlUVFV@W%WZ[]_ab]befgiei]ilm]mZn%nnnnnQU##qttBw1a':::::QqTT!V$$
1a4Bq1Q446{"QqTT"WQYq[01R471qttAv;3Fq3HH1R55QS8TU:VW<WX[\]^abcdaeaefgag]h[hijmnopmqmqrsmsit[tuw[wyz{}y}  A  zA  BC  FG  HI  FJ  FJ  KL  FL  BM  zM  PR  SU  PU  VW  PW  zW  Z\  ]_  Z_  `b  Zb  cd  gh  ij  gk  gk  lm  gm  cn  Zn  zn  qs  tv  qv  wx  qx  zx  \y  	yy y y y ;;==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 )Nr5   r2   r3   r.   r/   r   Fcommutativec                  ,     t          g d          z   S rE   r   r[   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>q      sVIII%6%66 r=   c                       z   S r{   r<   )r   r\   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>r      sQw r=   c                       z   S r{   r<   r]   r^   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>s      sSy r=   c                       t           dz
  z   S Nr.   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>t      sa!e} r=   c                       dz   S Nr7   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>u  r   r=   c                  $    dt           dz  z
   z   S Nr.   r3   rI   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>v      AqDC/ r=   c                  ,     t          g d          z
  S rE   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>~  r   r=   c                       z
  S r{   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                       t           dz
  z
  S r   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                       dz
  S r   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                      t           dz    z
  S )Nr2   r   )r\   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  s    A} r=   c                  $    dt           dz  z    z
  S )Nr.   r1   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   )r   r;   rI   r    r   r-   rX   )r   r[   r\   r]   r^   s   @@@@@r>   .test_TransferFunction_addition_and_subtractionr  d  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 z  t          t          d                    k    sJ  z  t           t          d                    k    sJ z  z  t          t          d                    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           d S )Nr3   r4   r.   r2   r1   r5   rw   r   Fr   c                  ,     t          g d          z  S rE   r   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF999$5$55 r=   c                       z  S r{   r<   )r   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rAv r=   c                       z  S r{   r<   r   G5s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rBw r=   c                       t           dz
  z  S r   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQU| r=   c                      d z  S Nr4   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      q2v r=   c                  ,     t          g d          z  S rE   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r	  r=   c                       dz  S rB   r<   )G6s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       z  S r{   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       dz  S r   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       t           dz  z  S r   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rAqDy r=   c                  4    t           dt           dz  z  z
   z  S )Nr1   r/   r   )r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    AadF
b0 r=   c                      d z  S rB   r<   )r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                      d z   z  S r   r<   )r  G7s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQV} r=   c                       z  z  S r{   r<   r  r  r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR"W~ r=   c                       z   z   z  S r{   r<   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR27^4 r=   )	r   r;   rI   r   r    r   r   r-   rX   )r   r   r   r   r  r  r  r   s   @@@@@@@@r>   1test_TransferFunction_multiplication_and_divisionr"    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"-=-=>>>>>> b5F2s2r{{++++++3r6VRCR------rE2:BB444444'''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/   r3   r1   )r   r   r;   rI   rS   rT   	is_proper)rp   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;   rI   rS   rT   is_strictly_proper)rp   r&  r   r[   r\   r]   r^   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/   r3   r1   )r   r   r;   rI   rS   rT   is_biproper)r   rp   r&  r[   r\   r]   r^   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            
      R   t          d          \  } }}}t          | |||          }t                      }t          |t                    sJ t          |t                    sJ |t          | |||t                    k    sJ |t          | ||dt                    k    sJ |j        |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   k    sJ |j        t          dz  |z  t          z   k    sJ |j        t          k    sJ |j        | k    sJ |j	        |k    sJ |j
        |k    sJ |j        |k    sJ |                                t          |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   t          dz  |z  t          z   t                    k    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |                                t          |t          dz  z  |z   | t          z  z   t          t                    k    sJ t          t          t          dz   t                    }t!          ||          }t#          ||          }t%          ||          }	|t!          t          | |||t                    t          t          t          dz   t                              k    sJ |t#          t          | |||t                    t          t          t          dz   t                              k    sJ |	t%          t          | |||t                    t          t          t          dz   t                              k    sJ |                                t          t          t          dz  |z  t          z   z  t          dz   |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   z  z   t          dz   t          dz  |z  t          z   z  t                    k    sJ |                                t          t          |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   z  t          dz   t          dz  |z  t          z   z  t                    k    sJ |	                                t          t          dz   t          dz  |z  t          z   z  |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   z  t          |t          dz  z  |t          z  |z  z   |z   | t          dz  z  |z  z   | t          z  z   z  t          dz   t          dz  |z  t          z   z  z   t          dz  |z  t          z   z  t                    k    sJ d S )Nzkp ki kd tfr   r/   TFr.   )r   r   
isinstancer   r;   rK   rL   varkpkikdrZ   r   r%  r,  r)  r    r   r!   )
r1  r2  r3  rZ   r   r   r[   par1ser1fed1s
             r>   test_PIDControllerr7    s   ]++NBB	r2r2	&	&B	B b-(((((b*+++++ r2r2q111111r2r1a0000006R1Wr!tBw&+bAgbj82a4?????6QT"Wq[    6Q;;;;5B;;;;5B;;;;5B;;;;5B;;;; 7799(AqD2a47):R)?"QT'"*)LrRSt)SUVXYUYZ\U\_`U`bcdddddd<4>T!!!! E))))7799(AqD21)<aCCCCCC 1a!eQ
'
'CBD"c??DBD8M"b"b!<<>NqRSVWRWYZ>[>[\\\\\\6-BB::<LQPQTUPUWX<Y<YZZZZZZ8M"b"b!<<>NqRSVWRWYZ>[>[\\\\\\99;;*1ad2gk?a!ebAgPRSTPTUWPWFWZ\F\_abcefbf_fgi_iFilnoplpFp=q+q,-EAqDGaK+@!E E E E E E99;;*1bAg1R.?".Dr!Q$wrz.QTVWXTX.X+Y,-EAqDGaK+@!E E E E E E99;;*AEAqDGaK+@"QT'BqDQSGBSVXBX[]^_ab^b[bce[eBehjklhlBl+m,-r!Q$wAb/@2/E1a4PR
/RUWXYUY/Y,Z^_bc^cfgijfjkmfmpqfq]r,ruvxyuyz|u|  @A  vA  ,B  DEF F F F F F F F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 )Nr3   r/   r1   r.   X_dXc                  $    t                     S r{   r   rZ   r]   s   r>   r?   z*test_Series_construction.<locals>.<lambda>#  s    vb# r=   c                  (    t                     S r{   r<  rZ   r\   r]   r^   s   r>   r?   z*test_Series_construction.<locals>.<lambda>$  s    vb#sC88 r=   c                  &    t                      S r{   r<  r\   r]   s   r>   r?   z*test_Series_construction.<locals>.<lambda>%  s    vsdC00 r=   c                  &    t          d           S r   r<  rZ   r^   s   r>   r?   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;   rI   rA  s   r>   r?   z*test_Series_construction.<locals>.<lambda>'  s    fQTAaCZc:: r=   c                  B    t           t          g d                    S N)r.   r/   r3   r1   )r   r   r   s   r>   r?   z*test_Series_construction.<locals>.<lambda>(  s    fS&*>*>?? r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r   r   rM   r0  r    r-   rX   rY   )inpouts0s1tf3_r_   s2s3s4s6s7rZ   r\   r]   r^   s              @@@@r>   test_Series_constructionrQ     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 )Nr3   r/   r1   r.   )r/   r.   c                      t                      S r{   r#   r<   r=   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>E  s
    z|| r=   c                  $    t                     S r{   rT  )tf_1tfm_1s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>H  s    j55 r=   c                  (    t                       S r{   rT  rW  tfm_2s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>L  s    z%?? r=   c                  $    t                     S r{   rT  )tfm_3tfm_5s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>O  s    z%77 r=   c                  &    t          d           S r   rT  rZ  r\  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>R  s    jE599 r=   c                  X    t          t          dz  t          t          z  z               S r   )r#   r;   rI   r_  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>S  s!    jA!eVUCC r=   c                  P    t          t          dt          z  g                     S r   )r#   r   rI   r\  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>T  s    j1>> r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r"   TF3TF2TF1from_Matrixr   r#   rM   r0  shapenum_outputs
num_inputsr$   r-   rX   rY   )tf_2tf_3tfm_4s8s9s11rV  rW  rZ  r\  r]  s         @@@@@r>   test_MIMOSeries_constructionrp  +  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/   rw   c                       z  z  S r{   r<   r[   r\   r^   s   r>   r?   z'test_Series_functions.<locals>.<lambda>k  s    s3ws{ r=   c                       z
  z  S r{   r<   rs  s   r>   r?   z'test_Series_functions.<locals>.<lambda>l  s    sC#I r=   c                  ,     t          g d          z  S rE   r   r   s   r>   r?   z'test_Series_functions.<locals>.<lambda>m  s    s6)))#4#44 r=   Trx   F)r   r;   r&  r   r   rP   rI   rN   rO   r   r    r-   rX   r   rewriter%  r)  r,  )r`   S1S2S3r[   r\   r]   r^   s       @@@@r>   test_Series_functionsrz  W  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 r{   re  tfm1tfm2s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    tDy3 r=   c                       z  t           z   S r{   )rN   r~  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i"n r=   c                  $     z  t           dz
  z
  S r   r   tfm4tfm6s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i1q51 r=   c                        z  dz
  S r   r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    dD5j1n r=   c                  *    dt           dz  z    z  z   S )Nrw   r2   r   r~  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    rAqDyDI5 r=   c                        z  z   S r{   r<   r  r  r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    teDj4/ r=   c                       z  z
  z   S r{   r<   r  r  r  tfm5s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i$.5 r=   c                       z  z  z
  S r{   r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i$t)3 r=   c                       z  t           z  S r{   r}  r  r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    tDy} r=   c                       z  t           z  S r{   rO   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4il r=   c                  &      z  t           dz
  z  S r   r   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    dD5j!a%0 r=   c                       z  dz  S r  r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4ik r=   c                  ,    t           dz   dz   z   z  S )Nr3   r.   r   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    1uqy$.t3 r=   Trx   r/   r.   r3   )r"   re  rd  rc  r$   r#   r-   rX   rY   r   r   r   rP   r;   rI   r   r&  r   rf  r   rv  )tfm3tfm7mat_1mat_2tm_1tm_2r  r  r  r  r  s         @@@@@r>   test_MIMOSeries_functionsr    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 )Nr3   r/   r1   r.   r9  r:  c                  $    t                     S r{   r    r=  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    xC00 r=   c                  (    t                     S r{   r  r?  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    xCc:: r=   c                  &    t                      S r{   r  r   s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>   s    xc22 r=   c                  &    t          d           S r   r  rC  s   r>   r?   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;   rI   rA  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    hq!tacz3<< r=   c                  B    t           t          g d                    S rF  )r    r   r   s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    hsF<<<,@,@AA r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r   r    rM   r0  r   r-   rX   rY   )rG  rH  p0r   rK  r_   r   r   r   p5p6p7rZ   r\   r]   r^   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.   )r3   r.   r/   r/   c                       t          d          S )Nr<   r$   r<   r=   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>+  s    l2.. r=   c                  0    t           t                    S r{   )r$   re  r~  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>.  s    l4s;; r=   c                  &    t                     S r{   r  )r  r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>1  s    l4t<< r=   c                  $    t                     S r{   r  )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>4  s    |D$77 r=   c                  &    t          d           S r   r  )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>7  s    l1dD99 r=   c                  X    t          t          dz  t          t          z  z               S r   )r$   r;   rI   )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>8  s!    l1a4!A#:udCC r=   )r"   re  rd  rc  rf  r   rI   r$   rM   r0  r;   rg  rh  ri  r#   r-   rY   rX   )r  r  p8p9p10p11p12p13r  r  r  r  r  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/   rw   c                       z   z   S r{   r<   rs  s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>O  s    sSy3 r=   c                       z  z
  S r{   r<   rs  s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>P  s    sSW} r=   c                  ,     t          g d          z   S rE   r   r   s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>Q  r   r=   Trx   F)r   r;   r&  r   r   rP   rI   rN   rO   r    r   r-   rX   r   rv  r%  r)  r,  )r`   P1P2P3r[   r\   r]   r^   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 r{   )rd  r~  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{S0 r=   c                       z
  t           z
  S r{   r  r~  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkB. r=   c                  $     z
  t           dz
  z
  S r   r   r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkQU3 r=   c                        z
  dz
  S r  r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tedlQ. r=   c                  *    dt           dz  z
  z
   z
  S r   r   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    q1a4x4/$6 r=   c                       z
  z
  S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>      td{T1 r=   c                       z
  z   S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  r  r=   c                       z   z   S r{   r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkD0 r=   c                       z
  z
  S r{   r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{d2 r=   c                       z   t           z  S r{   r}  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tS0 r=   c                       z
  t           z  S r{   )rP   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{B. r=   c                  $     z   t           dz
  z  S )Nr5   r   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{QU3 r=   c                       z   z   dz  S rB   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{T114 r=   c                  *    dt           dz  z
   z   z  S r   r   )r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    q1a4x$+6 r=   c                       z
  z  z  S r{   r<   )r  r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tT1$6 r=   c                       z
  z  S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tT1 r=   Trx   r.   )r   rN   rI   rO   r;   rP   r"   re  rd  rc  r$   r#   r-   rX   rY   r   rv  r   r   r&  )	r^   r`   r  r  r  r  r  r  r  s	      @@@@@@r>   test_MIMOParallel_functionsr    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/   rw   c                  *    t           z             S r{   r!   r[   r\   r]   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    hsC#I66 r=   c                  B    t           t          g d                    S rE   )r!   r   r   s   r>   r?   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>   r?   z,test_Feedback_construction.<locals>.<lambda>  s!    h'71a'@'@!a%HH r=   c                  "    t          dd          S r   r  r<   r=   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    hq!nn r=   c                  *    t           z            S r{   r  )r\   r^   r`   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xSW55 r=   c                  &    t           d          S )N      ?r  r[   r\   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xS#66 r=   c                  ,    t            dz             S )Nrw   r  r   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xc2gX66 r=   c                  $    t                     S r{   r  r   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xS11 r=   )r   r;   r&  r   r   rP   rI   rN   rO   r!   rM   r   sys1sys2r0  r-   rY   rX   )rb   f1f2f3f4f5f6f7r[   r\   r]   r^   r`   s           @@@@@r>   test_Feedback_constructionr    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            
      N   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  z  | z  t          t          d          |           k    sJ z  z  | z  z  t          z  z                                  t          | z                                  d                    k    sJ 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          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/   rw   c                  ,     z  z  d z  z  z   z  S r   r<   r  s   r>   r?   z)test_Feedback_functions.<locals>.<lambda>  s     c#gckQS_= r=   c                  &    z   z  z  z   z  S r{   r<   r?  s   r>   r?   z)test_Feedback_functions.<locals>.<lambda>  s    s3w"s3ws{*:; r=   )r   r;   r&  r   r   rP   rI   rN   rO   r   r   r   r!   r-   rY   rX   sensitivityrv  )r`   rb   rZ   r[   r\   r]   r^   s     @@@@@r>   test_Feedback_functionsr    s7
   	!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GCK#c!fS#sCRLL#&N&NNNNNGCKCG$C/A/A/C/CS#c'IYIYZ\E]E](^(^^^^^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======>>>
:;;;;;;;<<<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          t          dz   dt                    } t          t          dz   dt                    }t          | |d          }t          | |d          }t          ddt                    }t          |t                    sJ t          |t                    sJ |j        | k    sJ |j        | k    sJ |j        t          |t          ||                     k    sJ |j        t          |t          ||                      k    sJ t          | |          }t          | |          }| |z  |k    sJ | |z   |k    sJ |	                                t          t          dz   dz  t          dz   t          dz   z  dz   t                    k    sJ |	                                t          t          t          dz   t          dz   t          dz   z  dz   z  z   dz   t          dz   t          dz   z  dz   t                    k    sJ t          | |z  |d          }|t          t          | |          |          k    sJ |j        | |z  k    sJ |j        t          |t          |t          | |                              k    sJ t          | |z  |t                    }|t          t          | |          |t                    k    sJ |j        | |z  k    sJ d S )Nr.   r/   rw   )
r   r;   r!   r/  r   rK   rL   r    r   r   )	r[   r\   fd1fd2unitrJ  r   fd3r]   s	            r>   test_Feedback_with_Seriesr     s   
1Q31
%
%C
1Q31
%
%C
3R
 
 C
3Q

CAq!$$D c233333c8$$$$$ 7c>>>>7c>>>>7htVC%5%56666667htfS#&6&6%6777777 
S		B	#s		B9????9????7799(!a%!a!ea!e_q5H!LLLLLL7799(a!eq1uq1uo6I-J)JQ)NQRUVQVYZ]^Y^P_bcPcefgggggg 3s7C
$
$C(6#s++S1111117cCi7htVCS1A1A%B%BCCCCCC 3s7C
+
+C"6#s#3#3S!<<<<<<7c#gr=   c                  	   t          ddd          \  } }}}}}t          dd          \  }}}| ||dz  z  z   |z  t          z  |z  }	||z  }
|||z   z  }|dz  t          z  ||z   z  }t          | |
t          z  dz   z  |	t          dz  z  dz
  t                    }t          d|t          dz  z  t          t          z  z   t                    }t          d|t          z  t                    }t          |t          z  dt                    }t          |t          t                    }t          ddt                    }t          ||z  |          }t          ||z  |z  |          }|t          t          |t          ||                    |          k    sJ |j        t          |t          ||                    k    sJ |j        t          |t          |t          |t          ||                                        k    sJ ||z  t          z  t          dz  z  |dz  z  ||z   z  |t          dz  z  t          t          z  z   dz  z  t           |z  |z  t          dz  | |dz  |z  z   z  z   z  | t          z  |z  |z  t          z  |dz  z  |t          z  |z   z  t          |z  ||z   z  |t          dz  z  t          t          z  z   z  t           |z  |z  t          dz  | |dz  |z  z   z  z   z  z   z  t          dz  |z  |t          dz  z  t          t          z  z   z  | t          z  |z  |z  t          z  |dz  z  |t          z  |z   z  t          |z  ||z   z  |t          dz  z  t          t          z  z   z  t           |z  |z  t          dz  | |dz  |z  z   z  z   z  z   z  ||z  t          z  t          z  |z  ||z   dz  z  |t          dz  z  t          t          z  z   z  t           |z  |z  t          dz  | |dz  |z  z   z  z   z  t          dz  |z  |t          dz  z  t          t          z  z   z  | t          z  |z  |z  t          z  |dz  z  |t          z  |z   z  t          |z  ||z   z  |t          dz  z  t          t          z  z   z  t           |z  |z  t          dz  | |dz  |z  z   z  z   z  z   z  z   z  ||z   z  z  }|
                                |z
                                  d	k    sJ d S )
NzI_b, I_s, m, h, l2, l1T)realnonnegativezK_D, K_P, v)r  r/   r.   r3   r   )r   rU   r   r;   r   r!   r   rK   rL   r    r   r   )IbIsmhl2l1KDKPvtau1_sqtau2tau3KGthetaGdeltaGpsiDcontPIcontGunityGinnerGouterexprs                         r>   test_issue_26161r  F  s6   "#;154I I IBAq"bD111IBAAQJ!#a'!+G6DR=D	Q
b2gAqbD1HqL17Q!V3Ca3GKKFaa1fq1u!4a88FAtax++DR!VQ**Eb!Q''FaA&&Fefnf--Ffvo,f55FXfVVFD-A-ABBFKKKKKK:vt(<(<======:&&vW[H\H\9]9]*^*^______rE!GAqDLArBw'AqD1Q3(::QBqDFQT2PQSTPTUVPV;EW<WX[]Z]^_Z_`aZabcZcdeZefgijfjZjlnoplpstltZuaCbM2ad7QqS=)A2a46AqD"q!tAv+4F+FG[H ILMqDQRFTVWXZ[W[T[^_`a^aTaLbegdghidijkdklmdmnodopqstptdtTAXe1b2g1a4!A#61QArAqDQRF{AS8STeU MVWYZ\W\]^W^_`W`abWbdfikdknocoWo1Wqs]XRT!VadBAaK&88X:<=qDFBq!tGaPQcM<RUWTWXYTYZ[T[\]T]^_T_`acd`dTdfhijfjmnfnToaCbM2ad7QqS=)A2a46AqD"q!tAv+4F+FGUH =IXIMJ LNPR7MTVD NNt#--//1444444r=   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.   r3   r/   rw   r   )r   r;   r"   r%   rM   r  r  r0  signr#   r   rf  )r[   r\   r]   r^   rW  rZ  r\  r  r  r  matr  
controllerr  s                 r>   test_MIMOFeedback_constructionr  f  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.   r3   r/   rw   r0  c                  $    t                     S r{   r%   r  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    l344 r=   c                  @    t          t                               S r{   )r%   r$   )rW  rZ  r\  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    l<u+E+EuMM r=   c                  &    t           d          S r   r  )rW  tfm_6s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>      |E5!<< r=   c                  $    t                      S r{   r  )tfm_7s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E599 r=   c                  &    t           d          S )Nr   r  rY  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E5"== r=   c                  &    t           d          S r   r  rl  r]  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   c                  &    t                      S r{   r  r"  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |EE6:: r=   c                  &    t            d          S r   r  rb  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   c                  &    t           d          S r   r  )rW  tfm_8s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   )	r   r;   r"   rf  r   r-   rY   rX   rI   )r]   r^   r`   rb   r[   r\   rW  rZ  r\  rl  r]  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.   rw   r/   r  r   r   r1   r3   FT)cancelr   r2   )r)  )r   )r   r;   r"   rf  r   r%   r#   r  r   r   Halfr   rv  )
r[   r\   r]   r^   rW  rZ  r\  rl  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  )r3   r/   c                  B    t          t          gt          g gg          S r{   r"   re  rd  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KLL r=   c                  B    t          t           gt          gg          S r{   r"   re  rc  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC:6NOO r=   c                  @    t          t          gt           gg          S r{   r2  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usCj6IJJ r=   c                  @    t          t          t          g gg          S r{   r2  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC56IJJ r=   c                  h    t          t          t          gt          t	          ddg          gg          S Nr.   r/   )r"   re  rd  rc  r   r<   r=   r>   r?   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 r6  )r"   re  r   rc  rd  r<   r=   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s(    4sFAq6NN6KcSVZ5XYY r=   c                  <    t          t          t           g          S r{   r0  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5sCoFF r=   c                  ,    t          t          g          S r{   )r"   re  r<   r=   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5se<< r=   )r   rO   r;   rP   rN   rI   r"   rc  rg  rh  ri  rM   r   r0  re  rd  r-   rX   rY   )tfm3_r  r  r^   r`   s      @@r>   (test_TransferFunctionMatrix_constructionr;    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!          d          dz  t"          z             t%          dt          z  t          z  dt          z  z  dt"          z  t          z  t          z  dt          z  z  z
  t"          t          z  t           t          z  dt          z  dz  z
  t"          t          z  z   z  t          dt          z  t          z  dt          z  dz  z
  dt"          z  t          z  z   z  z   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          t3          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          t5          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 |                                t3          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 |	                                t5          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          }
|
                                t=          |
          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.   r3   r1   r4   r   r2   r   )rw   r   r3   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @) r   rO   r;   rP   rN   r   rI   r"   rf  re  rd  rc  rS   r   r   r   r   r   r   	transpose
elem_polesr   r   r&  
elem_zerosr   r    r   _flatr   r   r   )r`   r  r  mat_3r  r  H_1H_2H_3H_4H_5s              r>   %test_TransferFunctionMatrix_functionsrG    sa   
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 add1fqj))Vac!eQqSkAaCE!GQqSM6QSTUVSVYZXZ[\X\_`ab_bcd_dXdghijgjXjSknoqstuquvwqwz{|}z}~zq  CD  EF  CF  GH  CH  rH  oI  TI  6J  5K  .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                  
   t          dt          t          z  t          z   t                    } t	          | t
          d          \  }}t          t          |d         z  |d         z   t          |d         z  |d         z   t                    }t          t          t
          z  dt          t          t
          z  dz  z   z  z  t
          dt          t          t
          z  dz  z   z  z  z   t          t           t          t
          z  dz  z   t          t          t
          z  dz  z   z  z   t                    }t          j        |                                |                                z
                                  j	        k    sJ t          dt          t          z  t          z   t                    } t	          | t
          d          \  }}t          |d         t          |d         z  |d         z   t                    }t          t
          t          z  t          t           t          t
          z  z   t          z  z   t                    }t          j        |                                |                                z
                                  j	        k    sJ t          dt          t          z  t          z   t                    } t	          | t
          d          \  }}t          t          |d         z  t          |d         z  |d         z   t                    }t          t          t
          z  t          t          t
          z  z   z  t          t          t          t          t
          z  z   z  z
  t                    }t          j        |                                |                                z
                                  j	        k    sJ t          dt          t          z  t          z   t                    } t	          | t
          d          \  }}t          t          |d         z  |d         z   t          |d         z  |d         z   t                    }t          t          dz  t
          z  dt          dt          z  t
          z  dz  z   z  z  dt
          z  dt          dt          z  t
          z  dz  z   z  z  z   t          t           dt          z  t
          z  dz  z   t          dt          z  t
          z  dz  z   z  z   t                    }t          j        |                                |                                z
                                  j	        k    sJ d S )	Nr.   r6   r   r/   g333333?r3   r   r8   )
r   rS   r;   rT   r'   Tr   Zeror   rK   )rZ   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r>   test_TransferFunction_gbtrR  b  s   	!QqSUA	&	&BRCJD$'DGd1g(=q47{TRSW?TVWXX%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqqN6&//11.2I2I2K2KKUUWW[[[[[	!QqSUA	&	&BRAJD$&tAw$q'	$q'0A1EEO%ac1QqS!|+;Q??N6o..001H1H1J1JJTTVVZZZZZ	!QqSUA	&	&BRAJD$'$q'	1T!W9T!W3DaHH%a!eQ1Woq1a!A#g;JJN6&//11.2I2I2K2KKUUWW[[[[[	!QqSUA	&	&BRCJD$"1T!W9T!W#4aQiQ6GKKK%ac!eRQqSU2X->&?!A#r1qQRsSTuUWx<GXBY&Y[\ab`befghehijejkmem`mpqtuvwtwxytyz|t|p|_}[}  @A  B  BN6k**,,^-D-D-F-FFPPRRVVVVVVVr=   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  dt          t          t
          z  dz  z   z  z  t
          dt          t          t
          z  dz  z   z  z  z   t          t           t          t
          z  dz  z   t          t          t
          z  dz  z   z  z   t                    }t          j        |                                |                                z
                                  j	        k    sJ d S )Nr.   r   r/   )
r   rS   r;   rT   r(   rI  r   rJ  r   rK   )rZ   rK  rL  rM  rN  s        r>   test_TransferFunction_bilinearrT    s   	!QqSUA	&	&B"aJD$'$q'	$q'(91T!W9T!W;LaPP%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqqN6&//11.2I2I2K2KKUUWW[[[[[[[r=   c                  $   t          dt          t          z  t          z   t                    } t	          | t
                    \  }}t          |d         t          |d         z  |d         z   t                    }t          t
          t          z  t          t           t          t
          z  z   t          z  z   t                    }t          j        |                                |                                z
                                  j	        k    sJ d S Nr.   r   )
r   rS   r;   rT   r)   rI  r   rJ  r   rK   )rZ   rK  rL  rO  rN  s        r>   "test_TransferFunction_forward_diffrW    s    	!QqSUA	&	&Bb!$$JD$&tAw$q'	$q'0A1EEO%ac1QqS!|+;Q??N6o..001H1H1J1JJTTVVZZZZZZZr=   c                  t   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  z   z  t          t          t          t          t
          z  z   z  z
  t                    }t          j        |                                |                                z
                                  j	        k    sJ d S rV  )
r   rS   r;   rT   r*   rI  r   rJ  r   rK   )rZ   rK  rL  rP  rN  s        r>   #test_TransferFunction_backward_diffrY    s    	!QqSUA	&	&Br1%%JD$'$q'	$q'(91T!W9T!W;LaPP%a!eQ1Woq1a!A#g;JJN6&//11.2I2I2K2KKUUWW[[[[[[[r=   c            	         t          dt          dz  dz   t                    } t          t          dz  dt                    }t          dt          t          z  t          z   t                    t          t          dz   t          t          t          z            z  t          dz  dz   t                    t          |ggg          t          |           ddt          dt          d          z            z  t          z  z   k    sJ t          |          dk    sJ t          t          fd	           t          t          fd
           t          t          fd           d S )Nr   r3   r.   r/   iL      r   c                  "    t                     S r{   r+   r   s   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    S(9(9 r=   c                  "    t                     S r{   r^  r   s   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |C00 r=   c                  <    t          t                               S r{   )r+   r#   tf_ms   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |Jt,<,<== r=   )r   rI   r;   rS   rT   r   r   r"   r+   r   r   r   r-   r   rX   r[   r\   r]   r^   rb  s     @@@r>   "test_TransferFunction_phase_marginrd    s5   
2q!tax
+
+C
1a4Q
'
'C
1ac!eQ
'
'C
AE3qu::-q!tax
;
;C!C5#-00Ds4$r((
+;+;';B'> >>>>>!!!!
 9 9 9 9:::
:0000111
:====>>>>>r=   c                  8   t          t          dz  dt          dz   z  t          dz
  z  t          dz
  z  t                    } t          t          dz  dt          z  z   dz   dt                    }t          dt          t          z  t          z   t                    t          t          dz   t	          t          t
          z            z  t          dz  dz   t                    t          |ggg          t          |           dt          t          d          dz            z  t          d          z  k    sJ t          |          t          k    sJ t          t          fd           t          t          fd	           t          t          fd
           d S )Nr/   r2   r.   r   ir8   i  c                  "    t                     S r{   r,   r   s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    C(8(8 r=   c                  "    t                     S r{   rg  r   s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {3// r=   c                  <    t          t                               S r{   )r,   r#   ra  s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {:d+;+;<< r=   )r   r;   rS   rT   r   r   r"   r,   r   r   r	   r-   r   rX   rc  s     @@@r>   !test_TransferFunction_gain_marginrj    sU   
1a4AaC!A#"!5q
9
9C
1a4!A#:>1a
0
0C
1ac!eQ
'
'C
AE3qu::-q!tax
;
;C!C5#-00Dss3qttCx==0R88888sr!!!!
 8 8 8 8999
:////000
:<<<<=====r=   c            
         t          ddgddgg          } t          ddg          }t          ddgg          }t          dg          }t          | |||          }|j        t          ddgddgg          k    sJ |j        t          ddg          k    sJ |j        t          ddgg          k    sJ |j        t          dg          k    sJ |j        t          ddgddgg          t          dgdgg          t          ddgg          t          dgg          fk    sJ t          t          t          g          t          t          g          t          t          g          t          t          g                    }|j        t          t          gg          k    sJ |j        t          t          gg          k    sJ |j        t          t          gg          k    sJ |j        t          t          gg          k    sJ |j        t          t          gg          t          t          gg          t          t          gg          t          t          gg          fk    sJ t          t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg                    }|j        t          ddgddgg          k    sJ |j        t          ddgddgg          k    sJ |j        t          ddgddgg          k    sJ |j        t          ddgddgg          k    sJ |j        t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg          fk    sJ t          t          t          gt          t          gg          }t          t          t          gt          t          gg          }t          t          t           gt"          t$          gg          }	t          t&          t(          gt*          t,          gg          }
t          |||	|
          }|j        t          t          t          gt          t          gg          k    sJ |j        t          t          t          gt          t          gg          k    sJ |j        t          t          t           gt"          t$          gg          k    sJ |j        t          t&          t(          gt*          t,          gg          k    sJ |j        t          t          t          gt          t          gg          t          t          t          gt          t          gg          t          t          t           gt"          t$          gg          t          t&          t(          gt*          t,          gg          fk    sJ t                      }|j        t          dgg          t          dgg          t          dgg          t          dgg          fk    sJ t          ddgddgg          }t          ddg          }t          ||          }|j        t          ddgddgg          k    sJ |j        t          ddg          k    sJ |j        t          ddgg          k    sJ |j        t          dgg          k    sJ |j        t          ddgddgg          t          dgdgg          t          ddgg          t          dgg          fk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ t1          t2          d	            t1          t2          d
            t1          t2          d            t1          t2          d            t1          t4          d            t1          t4          d            d S )Nr   r.         r   r6   r/   TFc            	          t          t          t          t          dz   dz  g          t          t          dz   g          t          t          dz  dz
  g          t          dt          z  g                    S r6  r&   r   r;   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>%  sY    z&!acAX*?*?1*0!Q$(*<*<facUmm M  M r=   c            	          t          t          t          g          t          t          dz   t          dz  dz   g          t          t          dz  dz
  g          t          dt          z  g                    S )Nr.   r3   r/   rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>'  sY    z&!++vqsAqD1Ho7N7N*0!Q$(*<*<facUmm M  M r=   c            
         t          t          t          g          t          t          dz   g          t          t          dz  dz
  gt          dz  dt          z  z   dz   gg          t          dt          z  g                    S r6  rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>)  sl    z&!++vqse}}*01a4!8*q!taczA~>N1O*P*PRXZ[\]Z]Y^R_R_ a  a r=   c            
      2   t          t          t           t           gt          dgg          t          t          dz  dgdt          gg          t          dt          gg          t          dt          z  dt          z  gt          t          gg                    S )Nr   r/   rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>+  sz    z&A2r(QF1C*D*D061a1a&7I0J0J06Ax0@0@061ac
QF7K0L0L N  N r=   c                  V    t          t          dz  t          dz   dt          z  d          S r   )r&   r;   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>1  s     jAqsAaC;; r=   c                  |    t          t          ddg          t          dg          t          dg          d          S )Nr/   r6   rw   r.   r   )r&   r   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>2  s5    jC)9)962$<<)/a9 9 r=   )r   r&   state_matrixinput_matrixoutput_matrixfeedforward_matrixrM   rN   rO   rP   a3rQ   rR   rW   b3c0r   c2c3r   r   r   d3is_SISOr-   r   rY   )A1B1C1D1ss1ss2ss3A4B4C4D4ss4ss5A6B6ss6s                   r>   test_StateSpace_constructionr    si   	!Q!Q 	!	!B	AB	!Q		B	B
RR
$
$Cv1v1v&6777777vq!f~~----Ax 0 00000!VQC[[00008AA/00&1#s2D2DfqRSfXFVFVX^ab`c_dXeXefffff VRD\\62$<<B4LL&",,0 0C vtf~~----vtf~~----v....!VbTF^^33338vvvQSPTvWWWWW VdBZ!Q011S!Hq!f-..QFQF+,,QFQF+,,. .C
 vbzA7&;<<<<<<vQx!Q&8999999AA'7 8 88888!VaVaV,<%=%=====8r
!"Q ) * *a!"A ( ) )A!"A ( ) )A!"A ( ) )* * * * * 
"bB8$	%	%B	"bB8$	%	%B	"bB8$	%	%B	"bB8$	%	%B
RR
$
$CvBx"b&:;;;;;;vBx"b&:;;;;;;R2r('; < <<<<<!Vb"XBx,@%A%AAAAA8R!#R * + +R!#R * + +R!#R * + +R!#R * + +, , , , , ,,C8uvse}}fqcUmmVaSE]]SSSSS	!Q!Q 	!	!B	AB
R

Cv1v1v&67777771v....Ax 0 00000!VaSE]]22228A!"A ( ) )!" % & &Ax((u' ' ' ' ' ;$;$;%;%;$;$ : M M N N N
: M M N N N
: a a b b b
: N N O O O 9;;<<<
9 9 9 : : : : :r=   c                    
 t          ddgddgg          } t          ddgddgg          }t          ddgddgg          }t          ddgdd	gg          }t          | |||          
t          g d
g dg dg          }t          ddgddgddgg          }t          g dg dg          }t          ddgddgg          }t          ||||          t                      t          t          dg          t          dg          t          dg          t          dg                    t          t          g dg dg dg dg dg          t          ddgddgddgddgddgg          t          g dg dg          t          ddgddgg                    }t          t          g dg dg dg dg dg          t          ddgddgddgddgddgg          t          g d g d!g          t          d"d#gddgg                    }	
z   |k    sJ 
z  |	k    sJ d$z   t          t          dgg          t          dgg          t          dgg          t          d$gg                    k    sJ d%z  t          t          dgg          t          dgg          t          d&gg          t          d'gg                    k    sJ d%z  t          t          dgg          t          d(gg          t          dgg          t          d'gg                    k    sJ t          t          
fd)           t          t          fd*           d S )+Nr1   r.   r/   r   r2   r   r3   rw   r   r1   r/   rw   r   r   r/   r2   r3   r   r1   r/   r   r.   r1   r3   r1   r.   r   r   r   r/   r   r   r   r   r   r   r   r1   r/   r   r   rw   r   r   r   r   r/   r2   r3   r/   r  r1   r/   r   r   r.   r.   r1   r3   r5   )r   r1   r/   r   r   )rw   r   r   r   r   )r/   r2   r3   r   r   )      r1   r.   )r   r/   r   r  r  )r   r   r   r/   r  )r3   r   r   r.   r  r   r6   r        @g      @r   c                       z   S r{   r<   )r  r  s   r>   r?   z%test_StateSpace_add.<locals>.<lambda>r  r   r=   c                       z  S r{   r<   )r  r  s   r>   r?   z%test_StateSpace_add.<locals>.<lambda>s  s    s3w r=   )r   r&   r-   r   )r  r  r  r  A2B2C2D2expected_addexpected_mulr  r  r  r  s             @@@@r>   test_StateSpace_addr  4  sB   	!QB 	!	!B	!QR!	"	"B	!R!Q 	!	!B	!QB 	!	!B
RR
$
$C	KKK			2	3	3B	!QR"a)	*	*B	III&	'	'B	"a!Q 	!	!B
RR
$
$C
,,C
VQC[[&!++vqc{{FA3KK
H
HC 	 	 	 	
a	R
a	R	a 	 	 	 	 	 		
A	
A 	 	!	 	 , 	 	  	  	

r


	r
c
 	 	 	 	 	 		R	a 	 	!	 	 * 9$$$$s7l""""9
6A3%==&1#--!PVY\X]W^P_P_``````s7j!uvugPVY\X]W^P_P_``````s7j!w!PVY\X]W^P_P_``````
:((((()))
:'''''r=   c                     t          t          t          gt          t          gg          } t          t
          t          gt          t          gg          }t          t          t          gt          t          gt          t          gg          }t          t          t          gt          t          gt          t           gg          }t#          | |||          }| }t          ddgddgg          }t          ddg          }t          ddgg          }t          dg          }	t#          ||||	          }
|t#          t          t          t          gt          t          gg          t          t
          t          gt          t          gg          t          t           t           gt           t           gt           t           gg          t          t           t           gt           t           gt           t            gg                    k    sJ |
 t#          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    k    sJ | |k    sJ |
    |
k    sJ d S )Nrw   r.   )r   rN   rO   rP   rx  rQ   rR   rW   ry  rz  r   r{  r|  r   r   r   r}  r&   )ABCDSSSS_neg	state_mat	input_mat
output_matfeedforward_matsystems              r>   test_StateSpace_negationr  u  s[   R2r(#$$AR2r(#$$AR2r(RH-..AR2r(RH-..A	Aq!Q		BSFQ!R)**I2wI"a	""JaSkkO	9j/JJF6B88% & &B88% & &RC":C":C":' ( ( RC":C":C":' ( (		) 		)
) 
) 
) 
) 76B88% & &Q4+&&Ar7)$$B4&>>		# 	## # # # 7b====z]v%%%%%%r=   c                  
   t          t          t          g          t          t          dz   dz  g          t          t          dz  dz
  g          t          dt          z  g                    } t          t          t          t          z   g          t          t          dz   t          dz
  z  g          t          t          dz  t          dz  z
  g          t          t          t          z
  g                    }|                     t          di          t          t          dgg          t          dgg          t          dgg          t          dgg                    k    sJ |                    t          di          t          t          t          dz   gg          t          dgg          t          dt          dz  z
  gg          t          t          dz
  gg                    k    sJ |                     t          t          i          t          t          t          gg          t          t          dz   dz  gg          t          t          dz  dz
  gg          t          dt          z  gg                    k    sJ |                    t          t          t          t          i          t          t          t          t          z   gg          t          t          dz   t          dz
  z  gg          t          t          dz   t          dz  z   gg          t          t          t          z
  gg                    k    sJ t          t          z  t          z   }t          t          dz  z  t          t          z  z   t          z   }t          t          |g          t          |g                    }t          t          dt          z  dz   gg          t          dt          dz  z  d	t          z  z   dz   gg          t          dgg          t          dgg                    }t          t          d
t          z  dz   gg          t          dt          dz  z  dt          z  z   dz   gg          t          dgg          t          dgg                    }|                    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 d S )Nr.   r/   r3   r2   $      r   r   r1   r   r   r   r   r   )r&   r   r;   rI   r   r   rS   rT   rO   rN   rW   rR   rQ   r   )r  r  r   r   Gexpectexpect_s          r>   !test_SymPy_substitution_functionsr    sV   
VQC[[&1q51*"6"61qz8J8JFTUVWTWSXMM
Z
ZC
VQUG__fq1uq1uo->&?&?APQSTPTAVAVX^`ade`e_fXgXg
h
hC88QqE??j!vQSPTvX^ac`d_eXfXfgggggg88QqE??j!a%	):):FQC5MM6TUXY[\X\T\S]R^K_K_agjknojoiphqararssssss <<16A3%==&AEA:,"8"8&1a4!8*:N:NPVYZ[\Y\X]W^P_P_``a a a a<<1a
##6AE7)$$fAA.?-@&A&A6QPQTETUWXTXL>JZC[C[]cfgjkfkeldm]n]noop p p p 
AB	AqD2a4"	B62$<<..A1q	{++Va1fqslQ6F5G4H-I-I6TUSVRW==Z`cdbeafZgZghhF#a%#+00&3q!t8c!e;Kc;Q:R9S2T2TV\_`^a]bVcVceknomplqererssG662q"aQAr1566&@@@@662q"aQAr1566<<>>'IIII<<>>W$$$$$$r=   c            	      L
   t          ddgddgg          } t          ddg          }t          ddgg          }t          dg          }t          | |||          }t          t          t          t          gt          t
          gg          t          t          gt          gg          t          t          t          gg                    }|
                    t                    }| 
                    t                    }|d         d         }|d         d         }	|t          d	t          z  d
z   t          dz  dt          z  z   dz   t                    k    sJ |	j        |j         k    sJ |	j        |j        k    sJ t          g dg dg dg          }
t          g dg dg dg          }t          g dg dg dg          }t          g dg dg dg          }t          |
|||          }|
                    t                    }|d         d         t          dt          dz  z  dt          dz  z  z   dt          z  z
  dz   dt          dz  z  dt          dz  z  z   dt          z  z
  dz
  t                    k    sJ |d         d         t          dt          dz  z  dt          dz  z  z   dt          z  z
  d z
  dt          dz  z  dt          dz  z  z   dt          z  z
  dz
  t                    k    sJ |d         d         t          dt          dz  z  d!t          z  z   dz
  dt          dz  z  dt          dz  z  z   dt          z  z
  dz
  t                    k    sJ |
                    t                    t          t           t          t          z  t
          t          z  z
  t          t          z  z   z  t          t           t          z  t          t          z  z   t          t          z  z   z  z
  t           t
          z  t          t          z  z   t          t          z  z   t
          t          z  z   t          dz  z
  t                    ggk    sJ t          
                    t                    }|t          t          ddgt           dz   d"t           z  t"          z  gg          t          dgdgg          t          ddgg          t          dgg                    k    sJ |
                    t                    d         d         t          k    sJ t%          t&          d#            d S )$Nr   rw   r3   r/   r2   r.   r   )r  r  r   ;   r5   r7   )rl  r   r3   )r.   r   r.   )r/   r.   r.   )r6   r   r.   )r   r.   r/   )r/   r/   r3   r   r.   r   )r   r/   r.   )r.   r   r/   )r/   r/   r   )r.   r.   r.   )r3   r/   r.   r   r   g      %@r  r6   g      @g      @g      @r   r   c                      t          t          t          dz  z  t          dz  z   t          t          z  z
  t          z   t          t          dz  z
  t                                        t                    S r   )r   rT   r;   rI   rS   rv  r&   r<   r=   r>   r?   z!test_conversion.<locals>.<lambda>  sJ    /!Q$A!0Ca0GQPQTSTUU]]^hii r=   )r   r&   rN   rO   rP   rx  rR   rW   r   r{  rv  r   r;   rK   rL   re  r   r&  r-   rX   )r  r  r  r  r   H3tm1tm2r[   r\   r  r  r  r  r   tm3r  s                    r>   test_conversionr    s   	"bAr7#	$	$B	AB	!Q		B	B	BB	#	#B	FRHr2h/00frdRD\6J6JPVY[]_X`WaPbPb	c	c	cB
**%
&
&C3--(
)
)C
a&)C
a&)C"2a4"9adQqSj1na@@@@@@7swh7cg 
			9995	6	6B	iii3	4	4B	IIIyyy1	2	2B	IIIyyy1	2	2B	BB	#	#B
**%
&
&C q6!9(QTC1H)<tAv)E)KSQRTUQUXX[\]_`\`X`M`cfghchMhknMnpqrrrrrrq6!9(QTC1H)<tAv)E)KSQRTUQUXX[\]_`\`X`M`cfghchMhknMnpqrrrrrrq6!9(QTCE)9C)?QTCPQSTPTHATWZ[\W\A\_bAbdeffffff::&''-=rc2b52b5=SUVWSWCW>X[]`b_bce_ehjkmhm_mprstpt_t[u>u?Ac"fr!tmbQSe>SVXYZVZ>Z]^`a]a>acd.f .f -g ,h h h h h 
Z	 	 B6Q/UFBrE$J/1 2 2A33  ! !Aq6(##A3%==	" 	"" " " " ::&''*1-4444 :iijjjjjr=   c                     t          ddgddgg          } t          dgdgg          }t          ddgg          }t          dg          }t          dgdgg          }t          d          }t          | |||          }|                                t          dgg          k    sJ |                    |          t          d	t	          |           z  d
t	          d|z            z  z
  gg          k    sJ t          ddgddgg          }t          dd          }t          ddg          }	t          ||          }
|
                    |	          t          dt	          d|z            z  gdt	          |           z  dt	          d|z            z  z
  gg          k    sJ t          ddgddgg          }t          dgdgg          }t          ddgg          }t          dg          }t          dg          }t          ||||          }|                    ||          }t          |                                                                	                                d                   t          ddt	          d|z  dz            z  t          t          d          |z  dz            z  z   dt	          d|z  dz            z  t          t          d          |z  dz            z  z
            k    sJ t          ddgddgg          }t          dgdgg          }t          ddgg          }t          dt          |          z  gg          }t          |||          }t          |                    ||          d                                                                         	                                          }|t          dt          |          z  dt	          d|z  dz            z  t          t          d          |z  dz            z  t          |          z  z   dt	          d|z  dz            z  t          t          d          |z  dz            z  t          |          z  z
            k    sJ t          d          \  }}}t          ddgddgg          }t          dgd|z  gg          }t          ddgg          }t          |gdgg          }t          t	          | |z            gg          }t          |||          } |                     |||                                          }!|!d         j        d         d         ||||z  z  z   d|dz  |z  z  z
  t	          | |z            |dz  |z  z  z   k    sJ t          d          \
  }"}#}$}%}&}'}(})}*}+t          |"|#g|$|%gg          },t          |&|'g          }-t          |(|)gg          }.t          |*|+g          }/t          |,|-|.          }0|0                    |/          d         }1|1                    |"df|#df|$df|%df|&df|'df|(df|)df|*df|+dfg
          }1|1d	t	          |           z  d
t	          d|z            z  z
  k    sJ d S )Nr   r.   r   r   rw   r/   r   )initial_conditionsr7   r4   r3   )r  r  r2   r  r1   r   )input_vectorr0  r   gY8b4@r   r8   )r0  r  zm a x_0)r  r  r0  z+a_11 a_12 a_21 a_22 b_1 b_2 c_1 c_2 i_1 i_2)r   r   r&   dsolver   r   r   r   r   r   r   r   r   r   rM   r   )2r  r  r  r  I1r   r  r  r  I2r  A3B3C3D3U3r  opr  r  r  U4r  op4r  rS   x0A5B5C5I5U5r  op5a11a12a21a22rR   rW   r   r{  i1i2r  r  C6I6r  expr6s2                                                     r>   test_StateSpace_dsolver    s    
!Q"b"	#	#B	!qc
		B	!R			B	B	!qc
		BA
RR
$
$C ::<<6A3%==((((:::,,3r77Qs2a4yy[9P8Q7R0S0SSSSS	"a1b'"	#	#B	QqB	AB
rR
 
 
 C:::,,3r!t99#qb''	TUVYZ\]^Z^V_V_T_H_G`7a0b0bbbbb	"a2r(#	$	$B	!qc
		B	!Q		B	B	B
RR
$
$C		+	+Br{{}}##%%++--a011S?OPSTVWXTXYZTZP[P[?[\_`def`g`ghi`ijk`k\l\l?l9l.1#bd1f++oc$q''!)A+>N>N.N:O 6P 6P P P P P 
"a2r(#	$	$B	!qc
		B	!Q		B	"Yq\\/"#	$	$B
RR
 
 C
cjjQRj003<<>>EEGGMMOO
P
PC#c)A,,&)9#bd1f++)Ec$q''RS)TU+FVFV)VW`abWcWc)cc.1#bd1f++oc$q''!)A+>N>N.NyYZ||.[\ ] ] ] ] ] ] y!!HAq"	!Q!Q 	!	!B	!q1ug		B	!Q		B	"s		B	#qb1f++	 	 B
RR
 
 C
***
C
C
L
L
N
NCq6;q>!Q!Wq!Q$q&z 9C1IIq!tAv<N NNNNN189f1g1g.Cc3BBB	#sc3Z(	)	)B	R		B	"b
		B	R		B
RR
 
 CJJ"J--a0EJJa3(S"IRy2q'BPQ7UWYZT[^`bd]ehjlmgnqsuvpwxyyEAc1"ggI#bd))+++++++r=   c            	         t          ddgddgg          } t          ddg          }t          ddgg          }t          dg          }t          | |||          }t          t          ddgddgg          t          ddgddgg          t          ddgddgg                    }t          t          ddgddgg          t          ddgddgg                    }t          t          t          t          gt          t
          gg          t          t          gt          gg          t          t          t          gg                    }|
                                d	k    sJ |
                                d
k    sJ |                                t          ddgddgg          k    sJ |                                t          ddgddgddgddgg          k    sJ |                                t          dgdgg          t          dgdgg          gk    sJ |                                t          dgdgdgdgg          gk    sJ |                                                    t          dft          dft          dft
          dft          dft          dfg          }|t          ddgddgg          k    sJ |                                d	k    sJ |                                d
k    sJ |                                t          ddgddgg          k    sJ |                                t          g dg dg          k    sJ |                                t          dgdgg          t          dgdgg          gk    sJ |                                t          dgdgg          gk    sJ |                                t          t          gt          gg          t          t          t          z  t          t          z  z   gt          t          z  t
          t          z  z   gg          gk    sJ |                                                    t          dft          dft          dft
          dft          dft          dfg          }	|	t          ddgddgg          k    sJ t          ddgddgg          }
t          dgdgg          }t          ddgg          }t          dgg          }t          |
|||          }t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    }|                    |          }|                    |          }|j        |j        |j        z   k    sJ |j        |j        |j        z   k    sJ |j        |j        |j        z   k    sJ |j        t          g dg dg dg dg          k    sJ |j        t          ddgddgddgddgg          k    sJ |j        t          g dg dg          k    sJ |j        t          ddgddgg          k    sJ |j        |j        |j        z   k    sJ |j        |j        |j        z   k    sJ |j        |j        |j        z   k    sJ |j        t          t          t          ddgt          t
          ddgg dg dg          k    sJ |j        t          t          dgt          dgddgddgg          k    sJ |j        t          t          t          ddgg dg          k    sJ |j        t          ddgddgg          k    sJ d S )Nrl  r   r.   r   r6   r1   r/   rw   TFr3   r   r  r   g      )r.   rw   r/   r   r   r.   r   r   r.   r   r   r   r   r   r.   r   r   r   r   r.   )r   r&   rN   rO   rP   rx  rR   rW   r   r{  is_observableobservability_matrixobservable_subspacer   is_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesri  rh  rt  ru  rv  rw  )A_matB_matC_matD_matSS1SS2SS3SS4QoQcr  r  r  r  r  r  r  r  s                     r>   test_StateSpace_functionsr    s    T2JA'((EC8EQF8EA3KKE
UE5%
0
0C
VaVaW-..v1v1v6F/G/GQSUVPWZ[]_Y`OaHbHb
c
cC
VaVaW-..v2wB6H/I/I
J
JC
Vb"XBx0116B4",3G3GRTVXQYPZI[I[
\
\C $&&&&%''''##%%!Q!Q0@)A)AAAAA##%%"qQ8q"XPRUVx0X)Y)YYYYY""$$!qc
););VaS1#J=O=O(PPPPP""$$"tqTB40H)I)I(JJJJJ		!	!	#	#	(	(2q'B8b!Wr2hQSUVPWZ\^_Y`)a	b	bB!Q!R)******   D((((  E))))%%''FS%LQ#,3O,P,PPPPP%%''6>>>>>>2R+S+SSSSS$$&&6C5Q%.+A+A6E7WZT[J\C]C]*^^^^^$$&&6A3*+=+=*>>>>>$$&&6+-$+-$30 ,1 ,128+-b52b5=/+-b52b5=/:; 3< 3<+= = = = =
 
	#	#	%	%	*	*RGb!Wr2hRSUWXRY\^`a[b+c	d	dB!Q!R)****** 
!Q!Q 	!	!B	!qc
		B	!Q		B	!B
RR
$
$C
VaVaV,--vsQCj/A/A6Aq6(CSCSU[^_]`\aUbUb
c
cC
**S//C
**S//C>S^cn<<<<<>S^cn<<<<<?co?????v|||\\\<<<Q]Q]Q]&^______v1v1v1v1v&FGGGGGGlll'C D DDDDD!VaVaV,<%=%===== >S^cn<<<<<>S^cn<<<<<?co?????vB1~B1~|||UaUaUa&bccccccvAwQ!Q!Q&HIIIIIIRA'E F FFFFF!VaVaV,<%=%=======r=   c                  T   t          ddgddgg          } t          dgdgg          }t          ddgg          }t          dgg          }t          ddgddgg          }t          dgdgg          }t          ddgg          }t          dgg          }t          | |||          }t          ||||          }	t          t          t          dz   t                    }
t	          ||	          }|t	          t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                              k    sJ |                                t          t          g dg dg dg dg          t          dgdgdgdgg          t          g dg          t          dgg                    k    sJ |j        dk    sJ |j        dk    sJ |                    t                    t          t          dz  t          dz  t          dz  z
  t          z
  dz   t                    k    sJ t	          |          }t	          ||	          }|                                |                                k    sJ t	          |
|          }|t	          t          t          t          dz   t                    t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                              k    sJ |                                t          t          g d	g d
g dg          t          dgdgdgg          t          g d
g          t          dgg                    k    sJ |                    t                    t          t          dz  t          dz  t          dz  z   t          z
  dz
  t                    k    sJ t          ddgddgg          }t          ddgddgg          }t          ddgddgg          }t          ddgddgg          }t          g dg dg dg          }t          ddgddgddgg          }t          g dg dg          }t          ddgddgg          }t          ||||          }t          ||||          }t          ||          }|t          t          t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg                    t          t          g dg dg dg          t          ddgddgddgg          t          g dg dg          t          ddgddgg                              k    sJ |                                t          t          g dg dg dg dg dg          t          ddgddgddgddgddgg          t          g dg d g          t          dd!gddgg                    k    sJ |j        |j        k    sJ |j        |j        k    sJ t          |          }t          ||          }|                                |                                k    sJ |                    t                    |                    t                    k    sJ t          dt          t                    }t          dt          dz   t                    }t          t          t          dz   t                    }t          |
|g||gg          }t          ||          }|t          t          t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg                    t          t          t          t          dz   t                    t          dt          t                    ft          dt          dz   t                    t          t          t          dz   t                    ff                    k    sJ d S )"Nr   r.   r  r  r   r.   r.   r   r  r/   r3   )rw   r   r   )r   r   r.   )rw   r.   r   r1   r   r2   r  rw   r  r  r  r   r  r  r  r  )r/   r   r   r1   r/   )r  r4   rw   r   r   )r  r4   r/   r2   r3   r8   r   )r  r   r1   r/   r   r  )r   r&   r   r;   r   r   ri  rh  rv  r#   r"   ) rO   rR   r   r   rP   rW   r{  r   r  r  r[   r5  ser2ser3ser_tfrx  ry  r|  r}  a4b4c4d4r  r  ser4ser5ser6r\   r]   r^   tfms                                    r>   test_StateSpace_seriesr  ]  s;
   	!Q!Q 	!	!B	!qc
		B	!Q		B	!B	!Q!Q 	!	!B	!qc
		B	!Q		B	!B
RR
$
$C
RR
$
$C
1ac1
%
%C#sD6*VFF-$ &% &%&,CC.! '" '"#)Aq6(#3#3VaSE]]	D D FPPVFFX$ Q% Q%&,CC.! '" '"#)Aq6(#3#3VaSE]]	FD FD	E E E E E E 99;;*"(LL(LL(LL(LL	$* + +
 #CCCC	$! " "
 #LLL>22"QC5MM+ + + + + + ?aq    <<())-=adAqD1a4KRSOVWDWYZ-[-[[[[[#;;D$D99;;$))++%%%% CFV,QAq99:fFFN$ G% G%&,CC.! '" '"#)Aq6(#3#3VaSE]]	<D <D E E E E E E
 ;;==J"'KK&JJ&JJ$( ) ) #CCC$! " " #III;//"QC5MM
+ 
+ 
+ 
+ 
+ 
+ >>*++/?1adQPQTkTUoXYFY[\/]/]]]]] 
!Q!R!	"	"B	!Q"b"	#	#B	!R1a&!	"	"B	!Q!R!	"	"B	[[[)))4	5	5B	!Q"bB7+	,	,B	YYY'	(	(B	"a1a&!	"	"B
RR
$
$C
RR
$
$Cc3D:jGG1 * *%!HH'     &GG( ! !%GG'      !+6KKKKKK3! ," ," $*!HH!H+ $ $ !'JJJJ(  !! !!"(GG* # #
! 
!           & 99;;*++++++,,,,,,))) + , , ab	b	r
R " # # ***' ) * * RB ! " "!# # # # # #& ?cn,,,,s....c??DdC  D99;;$))++%%%%<<.//4<<@V3W3WWWWW
1a
#
#C
1ac1
%
%C
1ac1
%
%C
 3*sCj!9
:
:Cc3D:jQB1! *" *"#)aR+" $# $#$*BQ,! %" %"#)QB+! $" $"# # %;)!QUA668HAq8Q8QR)!QUA668HAPQEST8U8UV<X %Y %Y
Z 
Z 
Z 
Z 
Z 
Z 
Z 
Zr=   c                      t          ddgddgg          } t          dgdgg          }t          ddgg          }t          dgg          }t          ddgddgg          }t          dgdgg          }t          ddgg          }t          dgg          }t          | |||          }t          ||||          }	t          ||	          }
|
t          t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                              k    sJ |
                                t          t          g dg dg dg dg          t          dgdgdgdgg          t          g dg          t          dgg                    k    sJ |
                    t
                    t          t          t          dz   z  t          dz  dz
  t                    k    sJ t          t          t          dz   t                    }t          ||          }|t          t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    t          t          t          dz   t                              k    sJ |                                t          t          g d	g d
g dg          t          dgdgdgg          t          g dg          t          dgg                    k    sJ |                    t
                    t          t          dz  t          dz  dz
  t                    k    sJ t          ddgddgg          }t          ddgddgg          }t          ddgddgg          }t          ddgddgg          }t          g dg dg dg          }t          ddgddgddgg          }t          g dg dg          }t          ddgddgg          }t          ||||          }t          ||||          }t          ||          }|t          t          t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg                    t          t          g dg dg dg          t          ddgddgddgg          t          g dg dg          t          ddgddgg                              k    sJ |                                t          t          g dg dg dg dg dg          t          ddgddgddgddgddgg          t          g dg dg          t          dd gddgg                    k    sJ t          dt          t                    }t          dt          dz   t                    }t          t          t          dz   t                    }t          ||g||gg          }t          ||          }|t          t          t          t          t          dz   t                    t          dt          t                    ft          dt          dz   t                    t          t          t          dz   t                    ff          t          t          ddgddgg          t          ddgddgg          t          ddgddgg          t          ddgddgg                              k    sJ d S )!Nr   r.   r  r  r  r  r  r/   r  )r.   r   r   )r   r   rw   r   r.   rw   r1   r   r2   r  r3   rw   r  r  r  r   r  r  r  r  r  r  r  r  r  r5   )	r   r&   r    r   rv  r   r;   r$   r"   )rO   rR   r   r   rP   rW   r{  r   r  r  r   r[   r   rx  ry  r|  r}  r
  r  r  r  r  r  r   r\   r]   r^   r  r   s                                r>   test_StateSpace_parallelr    s   	!Q!Q 	!	!B	!qc
		B	!Q		B	!B	!Q!Q 	!	!B	!qc
		B	!Q		B	!B
RR
$
$C
RR
$
$C	#s		B*VaVaV,<%=%=vsQCj?Q?QSY\]_`[aZbScSceknomplqererss$VaVQFO%<%<fqc1#Y>O>OQWZ[]^Y_X`QaQacilmknjocpcpqqs s s s s s7799
6$$$$	+& $' $'
 	   
 ~..u' ' ' ' ' ' ::&''+;Aq1uIq!taxQR+S+SSSSS 1ac1
%
%C	#s		B*VAA-  &! &!"(* # #%1vh//!	@ @ BRRSUVYZUZ\]A^A^	` ` ` ` ` `
 7799
"

"

"

 $ % %     


|,,u
' 
' 
' 
' 
' 
' ::&''+;AqD!Q$(A+N+NNNNN 
!Q!R!	"	"B	!Q"b"	#	#B	!R1a&!	"	"B	!Q!R!	"	"B	[[[)))4	5	5B	!Q"bB7+	,	,B	YYY'	(	(B	"a1a&!	"	"B
RR
$
$C
RR
$
$C	c3		BjQB1! *" *"#)aR+" $# $#$*BQ,! %" %"#)QB+! $" $"# # %/v###7% 0& 0& (.aRa/" (# (# %+"

"

,$ %% %%&,QQ.! '" '"
%# 
%#$ $ $ $ $ $& 7799
6'(((((()))'+) $* $* ARARQ ! " " )))' ) * * AA   ! !" " " " " "( 1a
#
#C
1a!eQ
'
'C
1a!eQ
'
'C
 3*sCj!9
:
:C	c3		B4)!QUA668HAq8Q8QR)!QUA668HAPQEST8U8UV6X Y Y #6AB+! $" $"#)AR+" $# $#$*BA,  %! %!"(AB*! #" #"# #$ $ $ $ $ $ $ $r=   c                  ~   t          ddgddgg          } t          dgdgg          }t          ddgg          }t          dgg          }t          ddgddgg          }t          dgdgg          }t          ddgg          }t          dgg          }t          | |||          }t          ||||          }	t          ||	          }
|
t          t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    d          k    sJ |
                                t          t          g dg dg dg dg          t          dgdgdgdgg          t          g dg          t          dgg                    k    sJ |
                    t
                    t          t          t          dz
  z  t          dz  t          z
  dz   t                    k    sJ t          ||	d          }|                                t          t          g dg d	g dg dg          t          dgdgdgdgg          t          g dg          t          dgg                    k    sJ |                    t
                    t          t          t          dz
  z  t          dz  d
t          d
z  z  z
  t          z
  dz   t                    k    sJ t          t          t          dz   t                    }t          ||          }|t          t          t          ddgddgg          t          dgdgg          t          ddgg          t          dgg                    t          t          t          dz   t                    d          k    sJ |                                t          t          g dg dg dg          t          dgdgdgg          t          g dg          t          dgg                    k    sJ t          ddgd
dgg          }t          dd
gddgg          }t          d
dgddgg          }t          dd
gddgg          }t          g dg dg dg          }t          ddgddgddgg          }t          g dg dg          }t          ddgddgg          }t          ||||          }t          ||||          }t          ||          }|t          t          t          ddgd
dgg          t          dd
gddgg          t          d
dgddgg          t          dd
gddgg                    t          t          g dg dg dg          t          ddgddgddgg          t          g dg dg          t          ddgddgg                    d          k    sJ |                                t          t          t          d          t          dd          t          dd          t          dd
          t          d          gt          dd
          t          dd          t          dd          t          dd          t          d          gt          d          t          dd          t          d d          t          d!d
          t          d"          gt          d#d
          t          d$d          t          d%d          t          d&d          t          d'          gt          dd
          t          d(d          t          d)d          t          d*d          t          d+          gg          t          t          dd          t          d,d          gt          dd          t          d-d          gt          dd          t          d.d          gt          dd          t          d/d          gt          dd          t          d0d          gg          t          t          d          t          dd          t          d1d          t          d-d
          t          d#          gt          dd
          t          d2d          t          d2d          t          d"d          t          d          gg          t          t          dd          t          d3d          gt          dd          t          dd          gg                    k    sJ t          ||d          }|                                t          t          t          dd          t          d4d          t          d          t          d5          t          d6d          gt          d7d          t          d8d9          t          dd
          t          d          t          d'd          gt          d:d          t          d;d          t          d          t          d<          t          d=d          gt          d>d          t          d?d9          t          d@d
          t          d+          t          d&d          gt          d
d          t          dAd9          t          dd
          t          dB          t          dCd          gg          t          t          dDd          t          dEd          gt          d#d9          t          dFd9          gt          dDd          t          dGd          gt          dHd9          t          dId9          gt          dd9          t          dJd9          gg          t          t          dd          t          d3d          t          d          t          d          t          dd          gt          dd          t          dFd9          t          dd
          t          d          t          dKd          gg          t          t          dd          t          d#d          gt          dd9          t          dLd9          gg                    k    sJ d S )MNr   r.   rw   r  )r.   rw   rw   r   r  r  r3   )r.   r.   r.   r   r/   r  )r.   rw   r.   r  r1   r   r2   r  r  r  r  r   r  r  r  ir8   ir7   r4   '   iiiir     I      r  /      U   r     i   iir   ir\  >   r  i    iyr   r  )   r  ir   ir   ir   Q   r5   ir   iiW   r   r  i)	r   r&   r!   r   rv  r   r;   r%   r   )rO   rR   r   r   rP   rW   r{  r   r  r  r  r  r[   r  rx  ry  r|  r}  r
  r  r  r  r  r  fd4fd5s                             r>   test_StateSpace_feedbackr'  `  s   	!Q!Q 	!	!B	!qc
		B	!Q		B	!B	!Q!Q 	!	!B	!qc
		B	!Q		B	!B
RR
$
$C
RR
$
$C
3

C (:fq!fq!f-=&>&>aSz@R@RTZ]^`a\b[cTdTdflopnqmrfsfstt$VaVQFO%<%<fqc1#Y>O>OQWZ[]^Y_X`QaQacilmknjocpcpqqsuw w w w w w88::F*NN*NN*NN*NN	,, %- %- /5CCCC	6! /" /" $*)\\N$, $,-3SE.# .#
$ 
$ 
$ 
$ 
$ 
$ ;;'((,<QAY1qSTVW,X,XXXXX 3Q

C88::F(LL(LL(LL(LL	,* %+ %+ -3CCCC	4! -" -" $*)\\N$, $,-3SE.# .#
$ 
$ 
$ 
$ 
$ 
$ ;;'((,<QAY1qQRTUQUvXYHY\]H]_`,a,aaaaa 1ac1
%
%C
3

C(:fFF.$ '% '%&,CC.! '" '"#)Aq6(#3#3VaSE]]	D D
 -QAq992? ? ? ? ? ? 88::V'KK'KK'KK-) &* &* ,2CCC3! ," ," $*&YYK$) $)*0SE+# +#$ $ $ $ $ $ 
!Q!R!	"	"B	!Q"b"	#	#B	!R1a&!	"	"B	!Q!R!	"	"B	[[[)))4	5	5B	!Q"bB7+	,	,B	YYY'	(	(B	"a1a&!	"	"B
RR
$
$C
RR
$
$C sC
 
 C,z&GG2% +& +&'-!HH/& (' ('(.GG0% )& )&'-GG/% (& (& '  ' )36'KK'KK'KK;) 4* 4* ,2!HH!H3& ,' ,' )/&JJ&JJ0( )) ))*0GG2% +& +&
)' 
)' )+%, , , , , ,& 88::F%a[[(2q//8C;K;KXVY[\M]M]_ghk_l_lm%a^^Xc1-=-=x1~~xXZ\]`hij`k`kl%a[[(3*:*:HS!<L<LhWZ\]N^N^`hil`m`mn%b!__hsA.>.>QQYZ]_`QaQacklncocop%b!__hr1ooxAPXY[]^P_P_aijlamamn,p %q %q
 sy%b!__hr1oo>%a^^Xc1-=-=>%a^^Xb!__=%a^^Xc1-=-=>%a^^Xc1-=-=>z@ sA sA
 CI%a[[(3*:*:HROOXVY[\M]M]_ghj_k_kl%a^^Xc1-=-=xQ?O?OQYZ]_`QaQacklncocopJr Cs Cstz%b!__hr1oo>%a^^Xa^^<|> u? u?@ @ @ @ @ @" sC
#
#C88::F%a^^Xb!__hqkk8TV<<YabeghYiYij%b!__htR.@.@(2q//S[\]S^S^`hikmn`o`op%c1--xAhWZmm]efikl]m]mn%b!__htR.@.@(2q//S[\^S_S_aijmopaqaqr%a^^Xc2->->QQYZ\Q]Q]_ghjlm_n_no,q %r %r
 tz%a^^Xc1-=-=>%b"--xB/?/?@%a^^Xc1-=-=>%c2..R0@0@A%c2..R0@0@A{C tD tD
 FL%b!__hr1oox{{HUWLLZbcfhiZjZjk%b!__hr2.>.>QQYZ\Q]Q]_ghkmn_o_opMr Fs Fstz%a^^Xb!__=%a__hsB.?.?@|B uC uCD D D D D D D Dr=   N)sympy.core.addr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r   r   r	   sympy.core.powerr
   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   r   'sympy.functions.special.delta_functionsr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   sympy.physics.control.ltir   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   r   r   r   sympy.physics.controlr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   sympy.testing.pytestr-   rS   r   rT   r   r;   rU   rV   rI   r   r   r&  r   rI  rN   rO   rP   rx  rQ   rR   rW   ry  rz  r   r{  r|  r   r   r   r}  re  rd  rc  ru   r   r  r"  r'  r*  r-  r7  rQ  rp  rz  r  r  r  r  r  r  r  r  r  r  r'  r-  r;  rG  rR  rT  rW  rY  rd  rj  r  r  r  r  r  r  r  r  r  r'  r<   r=   r>   <module>r<     s"         ( ( ( ( ( (       4 4 4 4 4 4 4 4 4 4 4 4             " " " " " " % % % % % % = = = = = = = = = = = = = = 9 9 9 9 9 9 9 9 9 9 9 9 $ $ $ $ $ $ = = = = = = ( ( ( ( ( ( + + + + + + , , , , , , ' ' ' ' ' ' > > > > > > > > > > = = = = = = = =W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W ( ' ' ' ' '.5g 7 / / +1aAq!Q3b!AH J B B >BBBBBBBBq!Q$41,r1u4a88q!Qr!taxA1--^9 ^9 ^9B^8 ^8 ^8B1 1 1D(6 (6 (6V	 	 		& 	& 	&	 	 	(F (F (FV(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05 05 05f# # #L5 5 5@$& $& $&N> > >D%* %* %*P!> !> !>FfJ fJ fJP$W $W $WL	\ 	\ 	\	[ 	[ 	[	\ 	\ 	\? ? ?> > > k: k: k:X?( ?( ?(B &  &  &D% % %0,k ,k ,k^;, ;, ;,|>> >> >>BHZ HZ HZVu$ u$ u$pAD AD AD AD ADr=   