
    g=                        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#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7  ed          \  Z8Z9Z:Z;Z<Z=Z>Z?Z@ZAZBZCZD ed          \  ZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZT e'de<dz  deBz  eCz  e<z  z   eCdz  z   e<          ZU e'e@de<          ZV e'eGe?z  e<z
  eGe<z  e?z   e<          ZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d  Zad! Zbd" Zcd# Zdd$ Zed% Zfd& Zgd' Zhd( Zid) Zjd* Zkd+ Zld, Zmd- Znd. Zod/ Zpd0 Zqd1 Zrd2 Zsd3 Ztd4 Zud5 Zvd6 Zwd7 Zxd8 Zyd9 Zzd: Z{d;S )<    )Add)Function)Mul)IpiRationaloo)Pow)S)symbols)explog)sqrt)atan)eye)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix
ShapeError)TransferFunction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 )Nr,   r   r   s     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/control/tests/test_lti.py<lambda>z4test_TransferFunction_construction.<locals>.<lambda>u       /1a88 r8   c                  8    t          t          dt                    S Nr   r5   r7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>v   s    /1a88 r8   c                  .    t          ddt                    S r=   r5   r7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>w   r;   r8   c                  V    t          t          g d          t          t                    S Nr)   r*   r.   )r   r   r6   r7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>y   s    .viii/@/@!QGG r8   c                  `    t          t          dz  dt          z  z   dz
  t          dz   d          S )Nr*   r)   r.   r5   r7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>{   s'    .q!taczA~q1uaHH r8   c                  D    t          t          dz   dt          z
  d          S )Nr)   r-   r,   )r   pr7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>|   s    .q1ua!eQ?? r8   c                  $    t          ddd          S )Nr.   r,   r2   )r   r7   r8   r9   r:   z4test_TransferFunction_construction.<locals>.<lambda>}   s    .q!Q77 r8   )r   r6   numdenargsrD   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                              r9   "test_TransferFunction_constructionrp      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8r8   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*   r-   r)   r.   r0   r/   r,   r2   c                  ,    t          j                   S Nr   from_rational_expression)expr_2s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&OPV&W&W r8   c                  ,    t          j                   S rv   rw   )expr_3s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>       /HPP r8   c                  ,    t          j                   S rv   rw   )expr_4s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>   r|   r8   )r.   r,   r-   rA   c                  :    t          j         t                    S rv   )r   from_coeff_listsr6   )den3num3s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&GdTU&V&V r8   y             @y                      ?       @      @      @      @zc1, d0:3g      @r3   i      
   g      пgS?g3pUcgH8?gٿg%1C9?c                      t          t          dz  t          t          dz  z  t          z   t          dz  z   t                                                    S )Nr*   r   )r   xrI   polesr7   r8   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>  s:    (8Ar!R%x!|aQRd?RTU(V(V(\(\(^(^ r8   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   rI   r   zerosr7   r8   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>/  s:    (8ArEA19LaQRdTU(V(V(\(\(^(^ r8   c                  4     t           dz  t           z   dz
  z  S Nr*   r)   r6   rY   s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>B  s    sQTAX\2 r8   c                       t           z  S rv   r   r[   s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>C  s    sAv r8   c                       z  S rv   r7   rY   r[   s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>D  s    sCx r8   c                  V                          t          t          d          i          S Nr*   )xreplacerD   r   rX   s   r9   r:   z1test_TransferFunction_functions.<locals>.<lambda>O  s    cllAs1vv;77 r8   )2r   r
   r6   rD   r   r   tauto_exprrx   r   r(   ZeroDivisionErrorrS   r   from_zpkr   r   rK   rJ   rI   rL   rM   rR   expandsubsevalfr   eval_frequencywnr   dc_gainr   r	   r   kr   strr   NotImplementedError	is_stabler   r   doitpowr   r   rF   rG   r   rT   )Gexpr_1expr_5expr_6rU   delayexpr_7H1H2expr_8rV   num2den2rW   r   r   gaintf0rN   rO   G1G2crQ   efrP   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_r]   r_   r`   rc   rd   rf   r   ry   r{   r~   r   rX   rY   r[   sG                                                                  @@@@@@@@r9   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7r8   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 )Nr0   r-   r.   r)   r*   r   Fcommutativec                  ,     t          g d          z   S r@   r   rV   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>m      sVIII%6%66 r8   c                       z   S rv   r7   )r   rW   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>n      sQw r8   c                       z   S rv   r7   rX   rY   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>o      sSy r8   c                       t           dz
  z   S Nr)   r   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>p      sa!e} r8   c                       dz   S Nr2   r7   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>q  r   r8   c                  $    dt           dz  z
   z   S Nr)   r.   rD   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>r      AqDC/ r8   c                  ,     t          g d          z
  S r@   r   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>z  r   r8   c                       z
  S rv   r7   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>{  r   r8   c                       t           dz
  z
  S r   r   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>|  r   r8   c                       dz
  S r   r7   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>}  r   r8   c                      t           dz    z
  S )Nr-   r   )rW   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>~  s    A} r8   c                  $    dt           dz  z    z
  S )Nr)   r,   r   r   s   r9   r:   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r8   )r   r6   rD   r   r   r(   rS   )r   rV   rW   rX   rY   s   @@@@@r9   .test_TransferFunction_addition_and_subtractionr   `  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0r8   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 )Nr.   r/   r)   r-   r,   r0   rr   r   Fr   c                  ,     t          g d          z  S r@   r   r   s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF999$5$55 r8   c                       z  S rv   r7   )r   r   s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rAv r8   c                       z  S rv   r7   r   G5s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rBw r8   c                       t           dz
  z  S r   r   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQU| r8   c                      d z  S Nr/   r7   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      q2v r8   c                  ,     t          g d          z  S r@   r   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r8   c                       dz  S r=   r7   )G6s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r8   c                       z  S rv   r7   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r	  r8   c                       dz  S r   r7   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r8   c                       t           dz  z  S r   r   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rAqDy r8   c                  4    t           dt           dz  z  z
   z  S )Nr,   r*   r   )r   s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    AadF
b0 r8   c                      d z  S r=   r7   )r   s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r8   c                      d z   z  S r   r7   )r  G7s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQV} r8   c                       z  z  S rv   r7   r  r  r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR"W~ r8   c                       z   z   z  S rv   r7   r  s   r9   r:   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR27^4 r8   )	r   r6   rD   r   r   r   r   r(   rS   )r   r   r   r   r  r  r  r   s   @@@@@@@@r9   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5r8   c                     t          d          \  } }}t          | dz  t          dz  t          | z  |z  t          z  z   | dz  z   |           }t          |t          dz  z
  |t          dz  z   |          }t          t          t
          z  t          dz  z  t          dz  z   t          t          z  z
  t          z   t
          t          t          dz  z  z
  t                    }t          t
          t          dz  z  t          dz  z   t          t          z  z
  t          z   t
          t          dz  z
  t                    }|j        sJ |j        sJ |j        sJ |j        rJ d S Nzomega_o, zeta, taur*   r.   r,   )r   r   r6   rD   rN   rO   	is_proper)rk   zetar   r   r   r   r   s          r9   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<<<|r8   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   r6   rD   rN   rO   is_strictly_proper)rk   r   r   rV   rW   rX   rY   s          r9   (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%%%%%%%%!!!!%%%%%%r8   c                     t          d          \  } }}t          |dz  t          dz  t          |z  |z  t          z  z   |dz  z   |          }t          | t          dz  z
  | t          dz  z   |           }t          t          t
          z  t          dz  z  t          dz  z   t          t          z  z
  t          z   t
          t          t          dz  z  z
  t                    }t          t
          t          dz  z  t          dz  z   t          t          z  z
  t          z   t
          t          dz  z
  t                    }|j        sJ |j        sJ |j        rJ |j        rJ d S )Nztau, omega_o, zetar*   r.   r,   )r   r   r6   rD   rN   rO   is_biproper)r   rk   r   rV   rW   rX   rY   s          r9   !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??r8   c                  z   t          t          t          dz  z  t          t          dz  z  z   t          t          z  z
  t
          t          dz  z  t          t          dz  z  z   t          t          z  t          z  z
  t                    t          t          t          z  t          z
  t          t          z  t          z   t                    t          t          t          z  t          t          z  z   t          z
  t          t                    t          dt          dz  dt          z  t          z  t          z  z   t          dz  z   t                     t          d          t                    }  t          d          t                    }t                    }|j        fk    sJ |j        t          k    sJ t          t                               }|j        t                     fk    sJ |j        t          k    sJ t          | dt                    }t          | dt                    }t          t          ||                    }|j        t          ||          fk    sJ t                    }|j        fk    sJ t          ||          }|j        ||fk    sJ |j        t          k    sJ t          t                               }	|	j        t                     fk    sJ t                    }
||
k    sJ ||k    rJ t!          t"          fd           t!          t"          fd           t!          t"          fd	           t!          t$          fd
           t!          t$          fd           t!          t$          fd           d S )Nr.   r*   r,   r)   X_dXc                  $    t                     S rv   r   rU   rX   s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    vb# r8   c                  (    t                     S rv   r,  rU   rW   rX   rY   s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    vb#sC88 r8   c                  &    t                      S rv   r,  rW   rX   s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    vsdC00 r8   c                  &    t          d           S r   r,  rU   rY   s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    fQC00 r8   c                  V    t          t          dz  t          t          z  z              S r   )r   r6   rD   r1  s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    fQTAaCZc:: r8   c                  B    t           t          g d                    S N)r)   r*   r.   r,   )r   r   r   s   r9   r:   z*test_Series_construction.<locals>.<lambda>  s    fS&*>*>?? r8   )r   rI   r6   rJ   rK   rL   rD   rM   rR   r   r   r   r   rH   varr   r(   rS   rT   )inpouts0s1tf3_rZ   s2s3s4s6s7rU   rW   rX   rY   s              @@@@r9   test_Series_constructionrB    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????@@@@@r8   c                    	
 t          t          t          dz  z  t          t          dz  z  z   t          t          z  z
  t
          t          dz  z  t          t          dz  z  z   t          t          z  t          z  z
  t                    t          t          t          z  t          z
  t          t          z  t          z   t                    } t          dt          dz  dt          z  t          z  t          z  z   t          dz  z   t                    }t          | |g| |  gg          t          |  g|  g| gg          t          | gg          	t          t          gt          gt           gg          }t          j        t!          dt          z  g          t                    
t#                    }|j        fk    sJ |j        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t#          	          }|j        	fk    sJ |j        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t#          	t/           |                     }|j        	t/           |           fk    sJ |j        |j        |j        fcxk    rdk    sn J t1          t2          d            t1          t4          fd           t1          t2          fd           t1          t2          	
fd	           t1          t4          	fd
           t1          t4          	fd           t1          t4          	fd           d S )Nr.   r*   r,   r)   )r*   r)   c                      t                      S rv   r   r7   r8   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>  s
    z|| r8   c                  $    t                     S rv   rE  )tf_1tfm_1s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>  s    j55 r8   c                  (    t                       S rv   rE  rH  tfm_2s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>  s    z%?? r8   c                  $    t                     S rv   rE  )tfm_3tfm_5s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>   s    z%77 r8   c                  &    t          d           S r   rE  rK  rM  s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>#  s    jE599 r8   c                  X    t          t          dz  t          t          z  z               S r   )r   r6   rD   rP  s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>$  s!    jA!eVUCC r8   c                  P    t          t          dt          z  g                     S r   )r   r   rD   rM  s   r9   r:   z.test_MIMOSeries_construction.<locals>.<lambda>%  s    j1>> r8   )r   rI   r6   rJ   rK   rL   rD   rM   rR   r   r   r   TF3TF2TF1from_Matrixr   r   rH   r7  shapenum_outputs
num_inputsr   r(   rS   rT   )tf_2tf_3tfm_4s8s9s11rG  rH  rK  rM  rN  s         @@@@@r9   test_MIMOSeries_constructionra    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>>>>?????r8   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*   rr   c                       z  z  S rv   r7   rV   rW   rY   s   r9   r:   z'test_Series_functions.<locals>.<lambda><  s    s3ws{ r8   c                       z
  z  S rv   r7   rd  s   r9   r:   z'test_Series_functions.<locals>.<lambda>=  s    sC#I r8   c                  ,     t          g d          z  S r@   r   r   s   r9   r:   z'test_Series_functions.<locals>.<lambda>>  s    s6)))#4#44 r8   Trs   F)r   r6   r   r   r   rK   rD   rI   rJ   r   r   r(   rS   r   rewriter  r#  r&  )r[   S1S2S3rV   rW   rX   rY   s       @@@@r9   test_Series_functionsrk  (  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<    ~r8   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 rv   rV  tfm1tfm2s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>u  s    tDy3 r8   c                       z  t           z   S rv   )rI   ro  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>v  s    d4i"n r8   c                  $     z  t           dz
  z
  S r   r   tfm4tfm6s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>w  s    d4i1q51 r8   c                        z  dz
  S r   r7   rt  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>x  s    dD5j1n r8   c                  *    dt           dz  z    z  z   S )Nrr   r-   r   ro  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>y  s    rAqDyDI5 r8   c                        z  z   S rv   r7   rp  rq  ru  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>}  s    teDj4/ r8   c                       z  z
  z   S rv   r7   rp  rq  ru  tfm5s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>~  s    d4i$.5 r8   c                       z  z  z
  S rv   r7   r|  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i$t)3 r8   c                       z  t           z  S rv   rn  ru  r}  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    tDy} r8   c                       z  t           z  S rv   rJ   r  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4il r8   c                  &      z  t           dz
  z  S r   r   r  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    dD5j!a%0 r8   c                       z  dz  S r  r7   r  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4ik r8   c                  ,    t           dz   dz   z   z  S )Nr.   r)   r   r  s   r9   r:   z+test_MIMOSeries_functions.<locals>.<lambda>  s    1uqy$.t3 r8   Trs   r*   r)   r.   )r   rV  rU  rT  r   r   r(   rS   rT   r   r   r   rK   r6   rD   r   r   r   rW  r   rg  )tfm3tfm7mat_1mat_2tm_1tm_2rp  rq  ru  r}  rv  s         @@@@@r9   test_MIMOSeries_functionsr  f  s;   !Cc?cTC44E"FGGD!SD6SD6SD6":;;D!SD6(++D!SD3$<3$"=>>D!C#;#t"=>>D!SD6C5/22D!C5C4&/22D9t|JtT,B,BDIIIIII9td"l:dD3I3I4QU&V&VVVVV9td"l:dD3I3ID5SWRW&X&XXXXX9t$Zd5K5KTTXSX(Y(YYYYY:$t$Zt5L5LjY]`d_dNeNe(f(fffff
:.....///
9,,,,,---
911111222
9,,,,,---
955555666 9//////000
95555555666
933333334449dU?j$d;;;;;;$J
4$ = ===== :,,,,,---
9*****+++
900000111
9)))))***
933333444 tTD111Zd5K5K5P5P5R5R > > > >!$4adUBqD1Hq=5H!Q$QRSTQTUWQWX\Q\J\_acd_dJdghIh5hmolopqlqtuluxz{|x|  @A  yA  lB  DE  GH  DH  KL  MN  KN  OQ  KQ  RV  KV  DV  Y[  ]^  Y^  D^  ab  Cb  lb  6b  fh  ij  fj  mn  fn  qr  er  6r	AAq!tac"fTk)BE1A55q%: %: $<	!Q$1q1},adQqSVD[.@2q5.H1-LLQSPSTUPUXYPY\^_`\`cd\dOeghjkgknopqnqrtntuynygy|~  AB  }B  hB  PC  C  GI  JK  GK  NO  GO  RT  UV  RV  YZ  RZ  F[  ]^  `a  ]a  de  fg  dg  hj  dj  ko  do  ]o  rt  vw  rw  ]w  Fx  x	AAq!tac"fTk)BE1A55q
: 
: 	<#= > >> > > > > > Q!WqsQq!tVAaCZ!O34566EacGqAvaczAoqs34566E'3E1==?U?abgij?k?k$DtT""''))!$4QAz\1a4!A#:PQ>TUBU5UXY\]X]`aWacdfgcgjklmjmcmpqcqtubuWuwx$y$y#{"}~~   dD!!&&((11337MP`abdeghPiPiOkNm7n7nnnnn uteTD999tedUD))..00> > > >!$4QT2a4!8a-5GAPQRSPSTVPVW[P[I[^`bc^cIcfgHg5gkmnokorsksvwjwyz|}y}  AB  CD  AD  EG  AG  HL  AL  zL  OQ  ST  OT  zT  WX  yX  kX  6X  \^  _`  \`  cd  \d  gh  [h  6h	AAq!tac"fTk)BE1A55q%: %: $<	1a4%AA-q!tac"fTk/ABE/IA.MMRTQTUVQVYZQZ]_`a]ade]ePfhiklhlopqrorsuouvzozhz}  BC  ~C  iC  QD  D  HJ  KL  HL  OP  HP  SU  VW  SW  Z[  S[  G\  ^_  ab  ^b  ef  gh  eh  ik  ek  lp  ep  ^p  su  wx  sx  ^x  Gy  y	AAq!tac"fTk)BE1A55q
: 
: 	<#= > >> > > > > > |D$//EEEl4..55::<<h h h h!$4aR"Qrc!eaiRSUVRVYZ[\Y\]_Y_`dYdRdgiklglRlEm9m5nqstuquxyqy|}  @A  }A  DE  FG  DG  HJ  DJ  KO  DO  }O  RT  VW  RW  }W  qX  Z[  %\  %\  ^n  op  su  ru  vw  rwr!taxLrr o!!tax^, ^, $-/?RCEAIRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxDx@y|~  @A  }A  DE  }E  HI  KL  HL  OP  QR  OR  SU  OU  VZ  OZ  HZ  ]_  ab  ]b  Hb  |c  ef  0g  0grc!eai2#a%!RTAX,*>*BCbdQhQR]TUVV/X#Y Z Zh h h h ^hhtuy{  iA  iA  CG  ^H  ^H  ^P  ^P  Qg  ^h  ^h	h h h h h h h hr8   c                     t          t          t          dz  z  t          t          dz  z  z   t          t          z  z
  t
          t          dz  z  t          t          dz  z  z   t          t          z  t          z  z
  t                    t          t          t          z  t          z
  t          t          z  t          z   t                    t          t          t          z  t          t          z  z   t          z
  t          t                    t          dt          dz  dt          z  t          z  t          z  z   t          dz  z   t                     t          d          t                    }  t          d          t                    }t                    }|j        fk    sJ |j        t          k    sJ t          t                               }|j        t                     fk    sJ |j        t          k    sJ t          | dt                    }t          | dt                    }t          t          ||                     }|j        t          ||           fk    sJ t                    }|j        fk    sJ t          ||          }|j        ||fk    sJ |j        t          k    sJ t                    }	||	k    sJ ||k    rJ t          t                               }
|
j        t                     fk    sJ t          t                               }|j        t                     fk    sJ t!          t"          fd           t!          t"          fd           t!          t"          fd	           t!          t$          fd
           t!          t$          fd           t!          t$          fd           d S )Nr.   r*   r,   r)   r)  r*  c                  $    t                     S rv   r   r-  s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    xC00 r8   c                  (    t                     S rv   r  r/  s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    xCc:: r8   c                  &    t                      S rv   r  r   s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    xc22 r8   c                  &    t          d           S r   r  r3  s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    hq"c22 r8   c                  V    t          t          dz  t          t          z  z              S r   )r   r6   rD   r1  s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    hq!tacz3<< r8   c                  B    t           t          g d                    S r6  )r   r   r   s   r9   r:   z,test_Parallel_construction.<locals>.<lambda>  s    hsF<<<,@,@AA r8   )r   rI   r6   rJ   rK   rL   rD   rM   rR   r   r   r   r   rH   r7  r   r(   rS   rT   )r8  r9  p0r   r<  rZ   r   r   r   p5p6p7rU   rW   rX   rY   s               @@@@r9   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Br8   c                  |  	
 t          t          gt          gt          gg          t          t           gt          gt          gg          	t          t          gg          
t          t          gt          gt          gg          t          t          t          gt          t          gg          } t          t          t          gt          t          gg          }t          j        t          dt          z  gg          t                    t          	          }|j        	fk    sJ |j	        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t          t          
          	          }|j        t          
          	fk    sJ |j	        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t          t          
          	          }|j        t          
          	fk    sJ |j	        t          k    sJ |j        |j        |j        fcxk    rdk    sn J t          	          }|j        	fk    sJ |j        |j        |j        fcxk    rdk    sn J t          ||           }|j        || fk    sJ |j        |j        |j        fcxk    rdk    sn J t          	t          
                      }|j        	t          
            fk    sJ |j        |j        |j        fcxk    rdk    sn J t          t           d            t          t           	fd           t          t           
fd           t          t"          
fd           t          t           fd           t          t           	fd	           d S )
Nr)   )r.   r)   r*   r*   c                       t          d          S )Nr7   r   r7   r8   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l2.. r8   c                  0    t           t                    S rv   )r   rV  ro  s   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l4s;; r8   c                  &    t                     S rv   r  )rp  r  ru  s   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l4t<< r8   c                  $    t                     S rv   r  )r  r  s   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>  s    |D$77 r8   c                  &    t          d           S r   r  )rp  ru  s   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>  s    l1dD99 r8   c                  X    t          t          dz  t          t          z  z               S r   )r   r6   rD   )rq  ru  s   r9   r:   z0test_MIMOParallel_construction.<locals>.<lambda>	  s!    l1a4!A#:udCC r8   )r   rV  rU  rT  rW  r   rD   r   rH   r7  r6   rX  rY  rZ  r   r(   rT   rS   )r}  rv  p8p9p10p11p12p13rp  rq  r  ru  r  s           @@@@@r9   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Dr8   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*   rr   c                       z   z   S rv   r7   rd  s   r9   r:   z)test_Parallel_functions.<locals>.<lambda>   s    sSy3 r8   c                       z  z
  S rv   r7   rd  s   r9   r:   z)test_Parallel_functions.<locals>.<lambda>!  s    sSW} r8   c                  ,     t          g d          z   S r@   r   r   s   r9   r:   z)test_Parallel_functions.<locals>.<lambda>"  r   r8   Trs   F)r   r6   r   r   r   rK   rD   rI   rJ   r   r   r(   rS   r   rg  r  r#  r&  )r[   P1P2P3rV   rW   rX   rY   s       @@@@r9   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<$$$$>r8   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 rv   )rU  ro  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>f  s    td{S0 r8   c                       z
  t           z
  S rv   r  ro  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>g  s    dTkB. r8   c                  $     z
  t           dz
  z
  S r   r   rq  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>h  s    dTkQU3 r8   c                        z
  dz
  S r  r7   r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>i  s    tedlQ. r8   c                  *    dt           dz  z
  z
   z
  S r   r   r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>j  s    q1a4x4/$6 r8   c                       z
  z
  S rv   r7   )rq  r  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>l      td{T1 r8   c                       z
  z   S rv   r7   )rp  rq  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>m  r  r8   c                       z   z   S rv   r7   rz  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>o  s    dTkD0 r8   c                       z
  z
  S rv   r7   rz  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>p  s    td{d2 r8   c                       z   t           z  S rv   rn  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>u  s    tS0 r8   c                       z
  t           z  S rv   )rK   r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>v  s    td{B. r8   c                  $     z   t           dz
  z  S )Nr0   r   r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>w  s    td{QU3 r8   c                       z   z   dz  S r=   r7   )rp  rq  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>x  s    td{T114 r8   c                  *    dt           dz  z
   z   z  S r   r   )rp  r  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>y  s    q1a4x$+6 r8   c                       z
  z  z  S rv   r7   )rq  r  ru  r}  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>|  s    tT1$6 r8   c                       z
  z  S rv   r7   )rp  rq  r}  s   r9   r:   z-test_MIMOParallel_functions.<locals>.<lambda>~  s    tT1 r8   Trs   r)   )r   rI   rD   rJ   r6   rK   r   rV  rU  rT  r   r   r(   rS   rT   r   rg  r   r   r   )	rY   r[   rv  rp  rq  r  ru  r}  r  s	      @@@@@@r9   test_MIMOParallel_functionsr  T  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r8   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*   rr   c                  *    t           z             S rv   r   rV   rW   rX   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    hsC#I66 r8   c                  B    t           t          g d                    S r@   )r   r   r   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    hsF999,=,=>> r8   c                  Z    t          t          ddt                    t          dz
            S r   )r   r   r6   r7   r8   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s!    h'71a'@'@!a%HH r8   c                  "    t          dd          S r   r  r7   r8   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    hq!nn r8   c                  *    t           z            S rv   r  )rW   rY   r[   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    xSW55 r8   c                  &    t           d          S )N      ?r  rV   rW   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    xS#66 r8   c                  ,    t            dz             S )Nrr   r  r   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    xc2gX66 r8   c                  $    t                     S rv   r  r   s   r9   r:   z,test_Feedback_construction.<locals>.<lambda>  s    xS11 r8   )r   r6   r   r   r   rK   rD   rI   rJ   r   rH   r   sys1sys2r7  r(   rT   rS   )r]   f1f2f3f4f5f6f7rV   rW   rX   rY   r[   s           @@@@@r9   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2r8   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*   rr   c                  ,     z  z  d z  z  z   z  S r   r7   r  s   r9   r:   z)test_Feedback_functions.<locals>.<lambda>  s     c#gckQS_= r8   c                  &    z   z  z  z   z  S rv   r7   r/  s   r9   r:   z)test_Feedback_functions.<locals>.<lambda>  s    s3w"s3ws{*:; r8   )r   r6   r   r   r   rK   rD   rI   rJ   r   r   r   r   r(   rT   rS   sensitivityrg  )r[   r]   rU   rV   rW   rX   rY   s     @@@@@r9   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 5r8   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*   rr   )	r   r6   r   
isinstancerF   rG   r   r   r   )	rV   rW   fd1fd2unitr;  r   fd3rX   s	            r9   !test_Feedback_as_TransferFunctionr    s   
1Q31
%
%C
1Q31
%
%C
3R
 
 C
3Q

CAq!$$D c+,,,,,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r8   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)   r.   r   )r   rP   r   r6   r   r   r   rF   rG   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                         r9   test_issue_26161r    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4r8   c                      t          dt          t                    } t          t          t          dz  dz
  t                    }t          t          t          dz   t                    }t          t          t          dz  dz   t                    }t          | |g||gg          }t          ||g|| gg          }t          ||g| |gg          }t          ||          }|j        ||dfk    sJ |j        |k    sJ |j        |k    sJ |j        t          k    sJ |j        dk    sJ |  |k    sJ t          ||d          }|j        ||dfk    sJ |j        |k    sJ |j        |k    sJ |j        t          k    sJ |j        dk    sJ t          |t          ||                    }	|	j        |t          ||          dfk    sJ |	j        |k    sJ |	j        t          ||          k    sJ |	j        t          k    sJ |	j        dk    sJ t          ddt          z  gddgg          }
t          j        |
t                    x}}t          ||          }|j        ||dfk    sJ |j        |j        cxk    r|k    sn J d S )Nr)   r.   r*   rr   r   )r   r6   r   r    rH   r  r  r7  signr   r   rW  )rV   rW   rX   rY   rH  rK  rM  r  r  r  matr  
controllerr  s                 r9   test_MIMOFeedback_constructionr  6  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%%%%%%%%%%%%r8   c                    	
 t          dt          t                    t          t          t          dz  dz
  t                    t          t          t          dz
  t                    } t          t          t          dz  dz   t                    }t          ddt                    }t          dt          dz
  t                    }t          g| |gg          t          | g|gg          t          j        t	          d          t                    t          |g||gg          	t          |  | g| |gg          
t          |  gg          t          | |gg          t          t          fd           t          t          fd           t          t          fd           t          t          fd	           t          t          fd
           t          t          	
fd           t          t          	
fd           t          t          fd           t          j        t	          d          t                    t          t          fd           d S )Nr)   r.   r*   rr   r7  c                  $    t                     S rv   r    r  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>o  s    l344 r8   c                  @    t          t                               S rv   )r    r   )rH  rK  rM  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>p  s    l<u+E+EuMM r8   c                  &    t           d          S r   r  )rH  tfm_6s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>r      |E5!<< r8   c                  $    t                      S rv   r  )tfm_7s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>s  s    |E599 r8   c                  &    t           d          S )Nr   r  rJ  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>u  s    |E5"== r8   c                  &    t           d          S r   r  r]  rN  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>w  r  r8   c                  &    t                      S rv   r  r  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>x  s    |EE6:: r8   c                  &    t            d          S r   r  rS  s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>y  r  r8   c                  &    t           d          S r   r  )rH  tfm_8s   r9   r:   z*test_MIMOFeedback_errors.<locals>.<lambda>|  r  r8   )	r   r6   r   rW  r   r(   rT   rS   rD   )rX   rY   r[   r]   rV   rW   rH  rK  rM  r]  rN  r  r  r  s       @@@@@@@@@@r9   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
:<<<<<=====r8   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)   rr   r*   r	  r   r   r,   r.   FT)cancelr   r-   )r  )r   )r   r6   r   rW  r   r    r   r  r   r   Halfr   rg  )
rV   rW   rX   rY   rH  rK  rM  r]  F_1F_2s
             r9   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))))))r8   c                     t          t          t          dz  z  t          t          z  z   t          z
  t          t          z   t                    t          t          t
          z  t
          t          z  z   t          z
  t
          t
                    t          t           gg          } | j        | j	        | j
        fcxk    rdk    sn J | j        t          t          t          t                                         k    sJ | j        t          k    sJ t          t          t           gt          gg          }|j        |j	        |j
        fcxk    rdk    sn J |j        t          t          t          t          t                     t          t                                        k    sJ |j        t          k    sJ t          t          t          gt           g t          gg          }|j        |j	        |j
        fcxk    rdk    sn J |j        t          t          t          t          t                    t          t                     t           t                                        k    sJ |j        t          k    sJ t!          t"          fd           t!          t"          fd           t!          t"          fd           t!          t"          fd           t!          t$          d	            t!          t$          d
            t!          t"          fd           t!          t"          d            d S )Nr*   )r)   r)   r  )r.   r*   c                  B    t          t          gt          g gg          S rv   r   rV  rU  r   s   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KLL r8   c                  B    t          t           gt          gg          S rv   r   rV  rT  r   s   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC:6NOO r8   c                  @    t          t          gt           gg          S rv   r$  r   s   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usCj6IJJ r8   c                  @    t          t          t          g gg          S rv   r$  r   s   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC56IJJ r8   c                  h    t          t          t          gt          t	          ddg          gg          S Nr)   r*   )r   rV  rU  rT  r   r7   r8   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s)    4sCj3PQSTvBW5XYY r8   c                  h    t          t          t          ddg          gt          t          gg          S r(  )r   rV  r   rT  rU  r7   r8   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s(    4sFAq6NN6KcSVZ5XYY r8   c                  <    t          t          t           g          S rv   r"  r   s   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5sCoFF r8   c                  ,    t          t          g          S rv   )r   rV  r7   r8   r9   r:   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5se<< r8   )r   rJ   r6   rK   rI   rD   r   rT  rX  rY  rZ  rH   r   r7  rV  rU  r(   rS   rT   )tfm3_r}  r  rY   r[   s      @@r9   (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
:<<=====r8   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)   r.   r,   r/   r   r-   r   )rr   r   r.   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @) r   rJ   r6   rK   rI   r   rD   r   rW  rV  rU  rT  rN   r   r   r   r   r   r   	transpose
elem_polesr   r   r   
elem_zerosr   r   r   _flatr   r   r   )r[   r  r  mat_3rp  rq  H_1H_2H_3H_4H_5s              r9   %test_TransferFunctionMatrix_functionsr9    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r8   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)   r1   r   r*   g333333?r.   r   r3   )
r   rN   r6   rO   r"   Tr   Zeror   rF   )rU   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r9   test_TransferFunction_gbtrD  2  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Vr8   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   rN   r6   rO   r#   r;  r   r<  r   rF   )rU   r=  r>  r?  r@  s        r9   test_TransferFunction_bilinearrF  X  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[[[[[[[r8   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   rN   r6   rO   r$   r;  r   r<  r   rF   )rU   r=  r>  rA  r@  s        r9   "test_TransferFunction_forward_diffrI  c  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Zr8   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 rH  )
r   rN   r6   rO   r%   r;  r   r<  r   rF   )rU   r=  r>  rB  r@  s        r9   #test_TransferFunction_backward_diffrK  n  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[[[[[[[r8   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   r.   r)   r*   iL      r   c                  "    t                     S rv   r&   r   s   r9   r:   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    S(9(9 r8   c                  "    t                     S rv   rP  r   s   r9   r:   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |C00 r8   c                  <    t          t                               S rv   )r&   r   tf_ms   r9   r:   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |Jt,<,<== r8   )r   rD   r6   rN   rO   r   r   r   r&   r   r   r   r(   r   rS   rV   rW   rX   rY   rT  s     @@@r9   "test_TransferFunction_phase_marginrV  y  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
:====>>>>>r8   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*   r-   r)   r   ir3   i  c                  "    t                     S rv   r'   r   s   r9   r:   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    C(8(8 r8   c                  "    t                     S rv   rY  r   s   r9   r:   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {3// r8   c                  <    t          t                               S rv   )r'   r   rS  s   r9   r:   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {:d+;+;<< r8   )r   r6   rN   rO   r   r   r   r'   r   r   r	   r(   r   rS   rU  s     @@@r9   !test_TransferFunction_gain_marginr\    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
:<<<<=====r8   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   r1   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 r(  r!   r   r6   r7   r8   r9   r:   z.test_StateSpace_construction.<locals>.<lambda>  sY    z&!acAX*?*?1*0!Q$(*<*<facUmm M  M r8   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)   r.   r*   r`  r7   r8   r9   r:   z.test_StateSpace_construction.<locals>.<lambda>  sY    z&!++vqsAqD1Ho7N7N*0!Q$(*<*<facUmm M  M r8   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 r(  r`  r7   r8   r9   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 r8   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*   r`  r7   r8   r9   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 r8   c                  V    t          t          dz  t          dz   dt          z  d          S r   )r!   r6   r7   r8   r9   r:   z.test_StateSpace_construction.<locals>.<lambda>  s     jAqsAaC;; r8   c                  |    t          t          ddg          t          dg          t          dg          d          S )Nr*   r1   rr   r)   r   )r!   r   r7   r8   r9   r:   z.test_StateSpace_construction.<locals>.<lambda>  s5    jC)9)962$<<)/a9 9 r8   )r   r!   state_matrixinput_matrixoutput_matrixfeedforward_matrixrH   rI   rJ   rK   a3rL   rM   rR   b3c0r   c2c3r   r   r   d3is_SISOr(   r   rT   )A1B1C1D1ss1ss2ss3A4B4C4D4ss4ss5A6B6ss6s                   r9   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 : : : : :r8   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 )+Nr,   r)   r*   r   r-   r   r.   rr   )r   r,   r*   )rr   r   r   )r*   r-   r.   r   )r,   r*   r   )r)   r,   r.   )r,   r)   r   r   r   )r*   r   r   r   r   )r   r   r   r,   r*   )r   r   rr   r   r   )r   r   r*   r-   r.   )r*   r  r,   r*   r   )r   r)   r)   r,   r.   r0   )r   r,   r*   r   r   )rr   r   r   r   r   )r*   r-   r.   r   r   )      ir,   r)   )ir   r*   r   ir  r  )r   r   r   r*   r  )r.   r   r   r)   r  r   r1   r        @g      @r   c                       z   S rv   r7   )ru  rw  s   r9   r:   z%test_StateSpace_add.<locals>.<lambda>B  r   r8   c                       z  S rv   r7   )rv  r|  s   r9   r:   z%test_StateSpace_add.<locals>.<lambda>C  s    s3w r8   )r   r!   r(   r   )rq  rr  rs  rt  A2B2C2D2expected_addexpected_mulru  rv  rw  r|  s             @@@@r9   test_StateSpace_addr    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_``````
:((((()))
:'''''r8   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 )Nrr   r)   )r   rI   rJ   rK   rj  rL   rM   rR   rk  rl  r   rm  rn  r   r   r   ro  r!   )ABCDSSSS_neg	state_mat	input_mat
output_matfeedforward_matsystems              r9   test_StateSpace_negationr  E  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%%%%%%r8   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*   r.   r-   $      r   r   r,   r   r   r   r   r   )r!   r   r6   rD   r   r   rN   rO   rJ   rI   rR   rM   rL   r   )ru  rv  r   r   Gexpectexpect_s          r9   !test_SymPy_substitution_functionsr  g  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$$$$$$r8   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         }|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          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   rr   r.   r*   r-   r)   r   r   ;   r0   r2   )r^  r   r.   )r)   r   r)   )r*   r)   r)   )r1   r   r)   )r   r)   r*   )r*   r*   r.   )r   r)   r   )r   r*   r)   )r)   r   r*   )r*   r*   r   )r)   r)   r)   )r.   r*   r)   r   r   g      %@r  r1   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   rO   r6   rD   rN   rg  r!   r7   r8   r9   r:   z!test_conversion.<locals>.<lambda>  sJ    /!Q$A!0Ca0GQPQTSTUU]]^hii r8   )r   r!   rg  r   r6   rF   rG   rV  r   r   r(   rS   )rq  rr  rs  rt  r   tm1tm2rV   rW   r  r  r  r  r   tm3r  s                   r9   test_conversionr    s   	"bAr7#	$	$B	AB	!Q		B	B	BB	#	#B
**%
&
&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 
Z	 	 B6Q/UFBrE$J/1 2 2A33  ! !Aq6(##A3%==	" 	"" " " " ::&''*1-4444 :iijjjjjr8   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                    }|                                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 |                                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          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 d S )Nr^  r   r)   r   r1   r,   r*   rr   TFr.   r   g      )r)   rr   r*   r   )r   r)   r   r   )r)   r   r   r   )r   r   r)   r   )r   r   r   r)   )r   r!   is_observableobservability_matrixobservable_subspaceis_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesrZ  rY  rf  rg  rh  ri  )A_matB_matC_matD_matSS1SS2SS3rq  rr  rs  rt  ru  rv  rw  s                 r9   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 $&&&&%''''##%%!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   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*+=+=*>>>>> 
!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^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,<%=%=======r8   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.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   r   sympy.physics.controlr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   sympy.testing.pytestr(   rN   r   rO   r   r6   rP   rQ   rD   r   r   r   r   r;  rI   rJ   rK   rj  rL   rM   rR   rk  rl  r   rm  rn  r   r   r   ro  rV  rU  rT  rp   r   r   r  r!  r$  r'  rB  ra  rk  r  r  r  r  r  r  r  r  r  r  r  r  r-  r9  rD  rF  rI  rK  rV  r\  r  r  r  r  r  r  r7   r8   r9   <module>r     st         ( ( ( ( ( (       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 ( ' ' ' ' '.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 ^8@1 1 1D(6 (6 (6V	 	 		& 	& 	&	 	 	(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# # #J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Z*> *> *> *> *>r8   