
    g!&hk                    *   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) d dlm*Z*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>  ed      \  Z?Z@ZAZBZCZDZEZFZGZHZIZJZK ed      \  ZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ[ e-deCdz  deIz  eJz  eCz  z   eJdz  z   eC      Z\ e-eGdeC      Z] e-eNeFz  eCz
  eNeCz  eFz   eC      Z^d Z_d Z`d Zad Zbd Zcd Zdd  Zed! Zfd" Zgd# Zhd$ Zid% Zjd& Zkd' Zld( Zmd) Znd* Zod+ Zpd, Zqd- Zrd. Zsd/ Ztd0 Zud1 Zvd2 Zwd3 Zxd4 Zyd5 Zzd6 Z{d7 Z|d8 Z}d9 Z~d: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZyC)D    )Add)Function)Mul)IpiRationaloo)Pow)S)symbols)explog)	Heaviside)sqrt)atan)eye)SISOLinearTimeInvariant)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix
ShapeError)sincos)TransferFunctionPIDControllerSeriesParallelFeedbackTransferFunctionMatrix
MIMOSeriesMIMOParallelMIMOFeedback
StateSpacegbtbilinearforward_diffbackward_diffphase_margingain_margin)raisesz.a, x, b, c, s, g, d, p, k,    tau, zeta, wn, Tza0:4,    b0:4, c0:4, d0:4      c                  z   t        t        dz   t        dz  t        z   dz   t              } | j                  t        dz   k(  sJ | j                  t        dz  t        z   dz   k(  sJ | j                  t        dz   t        dz  t        z   dz   t        fk(  sJ t        t        dz   t        dz
  t              }|j                  t        dz   k(  sJ |j                  t        dz
  k(  sJ |j                  t        dz   t        dz
  t        fk(  sJ t        t
        dz   t
        dz  dz
  t
              }|j                  t
        dz   k(  sJ |j                  t
        dz  dz
  k(  sJ |j                  t
        dz   t
        dz  dz
  t
        fk(  sJ t        t
        dz  dt
        dz  z  z   dz   t
        dz  dt
        z  z   dz   t
              }|j                  t
        dz  dt
        dz  z  z   dz   t
        dz  dt
        z  z   dz   t
        fk(  sJ t        t        dz   t        dz
  z  t        dz
  t        dz   z  t              }|j                  t        dz
  t        dz   z  k(  sJ |j                  t        dz   t        dz
  z  t        dz
  t        dz   z  t        fk(  sJ t        t
        dz   t
        dz   t
              }|j                  t
        dz   t
        dz   t
        fk(  sJ t        t        dz
  dt
        z
  t              }|j                  t        dz
  dt
        z
  t        fk(  sJ t        t        dz
  t        dz
  t              }|j                  t        dz
  t        dz
  t        fk(  sJ t        ddt              }|j                  dk(  sJ |j                  dk(  sJ |j                  ddt        fk(  sJ t        ddt              }	|	j                  dk(  sJ |	j                  dk(  sJ |	j                  ddt        fk(  sJ t        dt        dz  z  dt
        z  z   dt        z  z   d	t
        dz  z  d
t        z  z   t              }
t        dt        dz  z  dt
        z  z   dt        z  z   d	t
        dz  z  d
t        z  z   t
              }|
|k(  rJ t        t        t        z  t        t        dz  z  z   t        t        dz  z  z   t        t
        z  t        t        z  z
  t              }t        t        t        z  t        t        dz  z  z   t        t        dz  z  z   t        t
        z  t        t        z  z
  t              }||k(  sJ |  |cxk(  r
|    k(  sJ  J t        t        t        dz  z  t        t        dz  z  z   t        t        z  z   t        z   t        t
        z  t        t
        dz  z  z   t        t        z  z   t              }|j                  t        t        dz  z  t        t        dz  z  z   t        z   t        t        z  z   t        t
        z  t        t
        dz  z  z   t        t        z  z   t        fk(  sJ t        t
        dz  t        z   t        t        dz  z  t        t        z  z   t        z   t
              }t        t
        dz  t        z   t        t        dz  z  t        t        z  z   t        z   t
              }|j                  t        t
        dz  z   t        t        t        z  z   t        t        dz  z  z   t
        fk(  sJ ||k(  sJ t        t        t        z  t        z   t        t        dz  z  t        t        z  z   t        z   t              }|j                  t        t        t        z  z   k(  sJ |j                  t        t        t        z  z   t        t        dz  z  z   k(  sJ |j                  t        t        t        z  z   t        t        t        z  z   t        t        dz  z  z   t        fk(  sJ t        dt
        dz  t
        z
  dz   t
              }|j                  dt
        dz  t
        z
  dz   t
        fk(  sJ t        ddt              }|j                  ddt        fk(  sJ t        t        t        dz  z  t        t        dz  z  z   t        z
  t        t
        dz  z  t              }|j                  t        t        dz  z  t        z
  t        t        dz  z  z   t        t
        dz  z  t        fk(  sJ t        t        dz  t
        dz  z  t        t        dz  z  z   t        t        z  t
        z
  t
              }|j                  t        t        dz  z  t        dz  t
        dz  z  z   t        t        z  t
        z
  t
        fk(  sJ t!        d      \  }}}}t        ||t        z  z   |t        z  z   t        dz  d|z  t        z  z   |dz  z   t              }|j                  |t        z  |t        z  z   |z   k(  sJ |j                  |t        z  |t        z  z   |z   |dz  d|z  t        z  z   t        dz  z   t        fk(  sJ t#        t$        d        t#        t$        d        t#        t$        d        t#        t&        d        t#        t&        d        t#        t&        d        t#        t&        d        y )Nr.   r/            	            ?      r   g333333?gffffff!g      ?gzomega_o, k_p, k_o, k_ic                  $    t        ddt              S )Nr1   r   r   s     z/var/www/pru.catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/sympy/physics/control/tests/test_lti.py<lambda>z4test_TransferFunction_construction.<locals>.<lambda>x       /1a8 r=   c                  ,    t        t        dt              S Nr   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>y   s    /1a8 r=   c                  $    t        ddt              S rB   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>z   r@   r=   c                  B    t        t        g d      t        t              S Nr.   r/   r3   )r   r   r;   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>|   s    .vi/@!QG r=   c                  R    t        t        dz  dt        z  z   dz
  t        dz   d      S )Nr/   r.   r3   r:   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>~   s$    .q!taczA~q1uaH r=   c                  8    t        t        dz   dt        z
  d      S )Nr.   r2   r1   )r   pr<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>   s    .q1ua!eQ? r=   c                      t        ddd      S )Nr3   r1   r7   )r   r<   r=   r>   r?   z4test_TransferFunction_construction.<locals>.<lambda>   s    .q!Q7 r=   )r   r;   numdenargsrI   a0a1a2b0b1abgdb2r   r-   
ValueError	TypeError)tftf1tf2tf3tf4tf4_tf5tf5_tf6tf6_tf7tf8tf7_tf8_tf9tf10tf10_tf11tf12tf13tf14tf15omega_ok_pk_ok_itf18s                              r>   "test_TransferFunction_constructionru   "   s   	!a%AAq	1B66a!e66adQhl###77q1uadQhlA....
1q5!a%
+C77q1u77q1u88Aq1ua(((( 1q5!Q$(A
.C77q1u77q!tax   88Aq!tax++++
1a4!AqD&=1,adQqSj1na
@C881qAv)1a4!A#:>1==== AEAE?QUQUOQ
?C77q1uq1uo%%%88QQ!a%!a%!<<<<AE1q5!,D99QAq))))
1q5!a%
+C88Aq1ua((((AE1q5!,D99QAq))))
1a
#C77a<<77a<<881ay   CA&D88s??88q==99*Aq1111
1QT6AaC<!A#-qAv!|Q
?C
1QT6AaC<!A#-qAv!|Q
?Ccz>BqD2ad7NR1W4bdRTk1EDBqD2ad7NR1W4bdRTk1ED4<<U8t-dU8~-----
1QT6AadF?QqS014acAadFlQqS6H!
LC88!Q$1a4!+ac11Q31a4<!A#3EqIIIIAqD1Ha1fqslQ&6:DQTAXqAv!|a'7;E99QT1qs7Qq!tV#3Q7777D==BqD2Ir!Q$wA~':A>D88RT	"""88RT	Bq!tG+,,,99bdBAI1a4$7;;;; Aq!tax!|Q/D99AqD1HqL!,,,,Aq!$D99Aq	!!! Bq#vI1c6	1B61t9aHD99AsFR"QV)3RD	\1EEEEBE!c(NRD	\92a4!8QGD99AIAag5r!taxCCCC$%=>GS#sS3q5[3q501a4!G)A+3EQR
3RTUVD88s1us1u}s****99QQ,gqj1W9Q;.FA.MqQQQQ :89
:89
:89
9GH
9HI
9?@
978r=   c                  C  ?@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        }||j                         z  }t	        j                  |t              }t	        t        dz   t        dz  dz   t        t        t        z        z  t              }t        ddt        z  t        dz  dz   z  d      }t	        j                  |       t	        dt        t              k(  sJ t        t        @fd       t        t        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              }|j!                         t!        |      cxk(  r|k(  sJ  J t	        t        dz   t        dz
  z  t        dz
  t        dz   z  t              }	t	        t        dz   t        dz   t              }|	j!                         t!        |	      cxk(  r|k(  sJ  J t	        dt        z
  dz  t        dz  dz   dz  t              }t	        ddt              }t"        t        t        z  z  t$        t        t        z  z  z   t&        t        t        z  z  z   t        t        z  t        t        z  z   z  }t(        t        t        z  z  t*        t        t        z  z  z   t,        t        z  t        z  t        t        z  z   z  }t&        t        t        z  z  t        t        z  z  t&        t        t        z  z  t        t        z  z  z   t$        t        t        z  z  t        t        z  z  z   t$        t        t        z  z  t        t        z  z  z   t"        t        t        z  z  t        t        z  z  z   t"        t        dt        z  z  z  z   }t(        t,        z  t        z  t        z  t        t        z  z  t(        t        t        z  z  t        t        z  z  z   t*        t,        z  t        z  t        t        z  z  t        z  z   t*        t        t        z  z  t        t        z  z  z   }t$        t"        z  t        z  t        t        z  z  t$        t        z  t        z  z   t"        t*        z  t        z  t        z  t        t        z  z  z   t*        t        dz  z  t        z  z   }t	        ||t              }t	        t&        t        t        z  z  t(        t        t        z  z  z
  t$        t        z  t*        t        z  t        z  z   t"        t        t        z  z  t        z   z  t              }|j/                         t	        t        dz  dt        z  z
  dz   t        dz  dt        dz  z  z   dz   t              k(  sJ |	j/                         t	        t        dz  dt        z  z   dz
  t        dz  dt        z  z   dz
  t              k(  sJ |j/                         |k(  sJ |j/                         t	        ||t              k(  sJ |j/                         t	        t&        t        t        z  z  t(        t        t        z  z  z
  |t              k(  sJ t$        t        z  t&        z   }t,        t        dz  z  t*        t        z  z   t(        z   }t	        ||t              }t	        dt        z  dz   dt        dz  z  dt        z  z   dz   t              }t	        dt        z  dz   dt        dz  z  dt        z  z   dz   t              } |j1                  t&        dt$        dt(        dt*        dt,        di      | k(  sJ |j1                  t&        dt$        dt(        dt*        dt,        di      j3                         |k(  sJ | j3                         |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              })|'j1                  |!d|"d|#d|$di      |)k(  sJ |'j1                  |!d|"d|#d|$di      j3                         |(k(  sJ |)j3                         |(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              },|*j1                  t&        dt$        dt(        dt*        di      |,k(  sJ |*j1                  t&        dt$        dt(        dt*        di      j3                         |+k(  sJ |,j3                         |+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              }/|-j1                  t&        dt$        di      |/k(  sJ |-j1                  t&        dt$        di      j3                         |.k(  sJ |/j3                         |.k(  sJ |	j7                  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 |j7                  dt        z         t;        d      d z  t;        d      t        z  d z  z   k(  sJ |j7                  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 |j=                         dk(  sJ |	j=                         t?        dd      k(  sJ |'j=                         dk(  sJ |.j=                         dk(  sJ |)j=                         dk(  sJ t	        dt        t              j=                         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|jG                         t        t        t         t         gk(  sJ |jG                         g k(  sJ |	jG                         d#dgk(  sJ |/jG                         t        gk(  sJ |-jG                         t&         t        z  gk(  sJ |+jG                         d$t        z  gk(  sJ tI        |(jG                               tI        d%d&d't        z  z
  d&d't        z  z   g      k(  sJ tI        |jG                               tI        d(d)t        z  z
  d(d)t        z  z   g      k(  sJ |1jG                         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 |2jG                         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|jO                         du sJ |jO                         d,u sJ |	jO                         du sJ |(jO                         du sJ |jO                         d,u sJ |7jO                         d,u sJ |8jO                         d,u sJ |2jO                         du sJ |/jO                         J |-jO                         J |jQ                         ddgk(  sJ |jQ                         g k(  sJ |	jQ                         ddgk(  sJ |/jQ                         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 |-jQ                         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        |+jQ                               tI        d1d2tS        d3t        dz  z  dz
        z  z
  d2tS        d3t        dz  z  dz
        z  d1z   g      k(  sJ |0jQ                         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 |3jQ                         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  jU                         Edz  cxk(  rtW        Ed      cxk(  r|k(  sJ  J FFz  Fz  jU                         Fdz  cxk(  rtW        Fd      cxk(  r|(k(  sJ  J Fdz  tW        Fd      cxk(  rt	        ddt              k(  sJ  J tY        E      jU                         dz  Edz  cxk(  r3tW        Ed      cxk(  r#t	        t        dz
  t        dz   t              k(  sJ  J FFz  jU                         dz  Fd5z  cxk(  r<tW        Fd5      cxk(  r,t	        dt        z
  dz  t        dz  dz   dz  t              k(  sJ  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\                  j1                  t        d      |j^                  j1                  t        d      cxk(  rdk(  sJ  J |j1                  t        d      t	        t        dz
  t        dz  dt        z  z
  dz   t              k(  sJ |9j1                  t        d      t	        t        dz   dt              k(  sJ Dja                  t        t        i      t	        dt        z  dz   dt        z
  t              k(  sJ t        tb        Dfd9       Dj1                  t        t        d            Dk(  sJ t	        t&        t        t        z  z  t$        t        t        z  z  z   t"        t        z  t        z
  t              }:|:ja                  t        tD        i      t	        t&        tD        t        z  z  t$        t        tD        z  z  z   t"        t        z  tD        z
  tD              k(  sJ |:j1                  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              }>|;j                         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 |<j                         t        t        dz   t        dt        z   d	t        z   z  dd      d      k(  sJ |=j                         t        t;        d      t        ddd      d      k(  sJ |>j                         t        ddd      k(  sJ y ):Nr   Fevaluater/   r2   r.   r3   r5   r4   r1   r7   c                  .    t        j                         S Nr   from_rational_expression)expr_2s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&O&OPV&W r=   c                  .    t        j                         S r{   r|   )expr_3s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>       /HHP r=   c                  .    t        j                         S r{   r|   )expr_4s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   r   r=   )r3   r1   r2   rF   c                  :    t        j                   t              S r{   )r   from_coeff_listsr;   )den3num3s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>   s    &6&G&GdTU&V r=   y             @y                      ?       @      @      @      @zc1, d0:3g      @r8         
   g      пgS?g3pUcgH8?gٿg%1C9?c                      t        t        dz  t        t        dz  z  t        z   t        dz  z   t              j                         S )Nr/   r   )r   xrN   polesr<   r=   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>  s4    (8Ar!R%x!|aQRd?RTU(V(\(\(^ r=   zq, rT)negativet)positive   g      ?gv-k?g3ٿc                      t        t        t        dz  z  t        z   t        dz  z   t        dz  t              j                         S )Nr   r/   )r   rN   r   zerosr<   r=   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>2  s4    (8ArEA19LaQRdTU(V(\(\(^ r=   c                  0     t         dz  t         z   dz
  z  S Nr/   r.   r;   r^   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>E  s    sQTAX\2 r=   c                       t         z  S r{   r   r`   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>F  s    sAv r=   c                       z  S r{   r<   r^   r`   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>G  s    sCx r=   c                  D     j                  t        t        d      i      S Nr/   )xreplacerI   r   r]   s   r>   r?   z1test_TransferFunction_functions.<locals>.<lambda>R  s    cllAs1v;7 r=   )2r   r
   r;   rI   r   r   tauto_exprr}   r   r-   ZeroDivisionErrorrX   r   from_zpkr   r   rP   rO   rN   rQ   rR   rW   expandsubsevalfr   eval_frequencywnr   dc_gainr   r	   r   kr   strr   NotImplementedError	is_stabler   r   doitpowr   r   rK   rL   r   rY   )Gexpr_1expr_5expr_6rZ   delayexpr_7H1H2expr_8r[   num2den2r\   r   r   gaintf0rS   rT   G1G2crV   efrU   G3G4p1p2SP1expect1expect1_c1d0d1d2p3p4SP2expect2expect2_SP3expect3expect3_SP4expect4expect4_tf__tfTF__TFqrr   	stable_tf
stable_tf_rb   rd   re   rh   ri   rk   r   r~   r   r   r   r]   r^   r`   sG                                                                  @@@@@@@@r>   test_TransferFunction_functionsr      s   C2.?FqSF1fqslQUQJ&FF1Q3wQqS!Q1Wq1QT6z$:;F1fqAvo!QUQUO4F	!a%A1	-B3KE2::<F		2	261	=B	!a%!Q$(C#J!6	:BQqS!Q$(^e4F44V<@PQRTUWX@YYYY
WX
:PQ44VQ?CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrrrr44VQ?CSUVWXZ[W[U[^_`a^aUaefijejmndnpqCrrrr
:PQ44VQ?CSTUWXZ[C\\\\44VQ?!ac'A!G,q1Q3wQq!tV.DaHI I I44VQ?!AqD&1QT6/A-QQCD D D8O844VQ?1a4!A#)1a4!8Q78 8 8 
+
+QFIq
ACqD!A#;DqD!a%D

+
+D$
:CDq6D"1q5!AqD&1Q3,*:A>>>>"1a46AaC<AadQAY1F1JANNNN
VW CEENED

#
#E5$
:C"1Q38a#gAoC#a%-PRSTTTT 1a4!Q$;?A1Ha
8C1a4!Q$;?+QUA6A<<>Xc]/a/////
AEAE?QUQUOQ
?CQAq)A<<>Xc]/a///// 
1q51*q!tax!mQ	7B	!R	#B	AqD2ad7	R1W	$q!tad{3A	AqD2ad7	RT!Vad]+A
1a41r!Q$wq!t|#bAgadl2R1WQT\ABq!tGAqDLPSUVWZ[\]Z]V^S^^A
2a	!Q$AqDA%2a1Q6AqDAEA
2a1r!tAv2a	!Q$.AqD:A	!Q	"B	"QT'Bq!tG+bdRT!VmbAgk-JA	NB99;*1a4!A#:>1a4!AqD&=1;LaPPPP::<+AqD1Q3JNAqD1Q3JNANNNN99;"99;*1a333399;*2ad7R1W+<aCCCC 
AB	AqD2a4"	B
2r1
%Cs1us{C1Hs1u,<s,BAFG!a1a4!A#)91=H88RB2q"aQ78HDDD88RB2q"aQ78>>@GKKK>>w&&&Z(NBBT2ad7R1W$r)B
2r1
%Cs1uc!Q$hQT&9C&?CG!Qq!tVa1f_q%8!<H88RB2q"a01X===88RB2q"a01779WDDD>>w&&&
2ad7R1W,r!t3b8"Q$(A
FCs1a4x#ad(2Q6<a#a%iKG!Q$1a4! 3a 7QqS!DH88RB2q"a01X===88RB2q"a01779WDDD>>w&&&
1r!Q$w;1q!
4Cs1a4x!|QUA6G!Q$
AE15H88RR$%11188RR$%++-888>>w&&& b!RUBEAbDL1,<%="b!eaPRdlUVFV@W%WZ[]_ab]befgiei]ilm]mZn%nnnnQU#qtBw1a'::::QqT!V$
1a4Bq1Q46{"QqT"WQYq[01R471qtAv;3Fq3HH1R5QS8TU:VW<WX[\]^abcdaefgag]h[hijmnopmqrsmsit[tuw[wyz{}y}  A  zA  BC  FG  HI  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  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 ;;=A;;=HQN***;;=A??""""""Aq!$,,."444 1a4!8Q
*C
1adQh
*C
1a4BQT!11
5C
1b519q!t+QT1
5C88:!QQB'''88:99;2q'!!!>>s"""99;B3q5'!!!==?uQwi'''w}}3(9;MPabcPc;cew  {L  MN  {N  fN  (O  $P  P  P  Pw}}3/?/A(A4JZ[\J\C\']#^^^^99;1x1~.Xa^1D0DaHUVXYNH[F[^_]_`adlmnpqdr`s]stttt99;71a4!8a<3Q1q1a8PRYZ[]^Z^abZbefZfhiRj1q1a '!Q$(Q,":GAqD1HqLRS<TV]^_ab^bef^fij^jlmVn1q1a '!Q$(Q,":< < < <  ^_ 6D)DAqd#A
1a4"9r!t+QqS1Wa
8C ART!11Q37A>I!!Q$)bd"2AaC!GQ?J<<>U"""<<>T!!!==?e###%'''$&&& D(((!T)))==?e###'''==?""" 88:!Q88:99;2q'!!!>>HQN 3aR8Aq>4J J1 LqS[\]_`SaObNbefdfjrstvwjxcyNyz|N|QHQN##A%rXa^&<<R?O@BChqRSnBUAUXYWY]efgij]kVlAlmoAorvwxryz{  G  HI  KL  M  {N  sN  OP  sP  ST  RT  X`  ab  de  Xf  Qg  sg  hj  sj  Bj k k k k99;AbDHQN3qtx1~6N5Nq5PSWXYSZ[\S\^_`b^bfnoprsft]uSuvwSw5w
B$(1a.	!!!#d1gai2!Q0H&H&JJL L L Lw}}30@FXYZ\]Y]F]`cFcAd0d(d0A5;<<uD(F $G G G G99;1x1~.Xa^1D0DQ0FaQRSTW_`acdWeSfIfghIh0h	
Xa^	Qa1x1~+>!>q!@@B B B B99;71a4!8a<3Q1q1a8PRYZ[]^Z^abZbefZfhiRj1q1a '!Q$(Q,":GAqD1HqLRS<TV]^_ab^bef^fij^jlmVn1q1a '!Q$(Q,":< < < <  ^_ 1q5!Q$A+/1
5C
2a4!8QUA
.C4#QBFAqD1a4K!OQ????4#AaC!GQUA6666 1q5!a%
+C
1a4!8QUA
.C1q1}q1uqj!<GAzAEA:q9GG>>sAv?S!??????GCK36CSa[CGCCCCC6Sa[=$4Q1$======#;r!S"WaCa@PQRUVQVXY\]X]_`@aaaaaaG>>R37lc#rll>NPQTUPUXYz\]_`\`cd\dgh[hjk>llllll
:23
:~&
:'( 
!a%A!a	3B
1q5!Q$(A
.C":)!a%!a%!Q????66;;q!Aq 16Q66666771a=,QUAqD1Q3JNAFFFF88Aq>-a!eQ::::<<A#3BqD1Ha!eQ#GGGG
97888As1v#%%%
2ad7R1W,bdQh
:C<<A#3Bq!tGbAg4Er!taxQR#SSSS88Aq>-bAg1a4.?A1MMMM 2ad7Qq!tV+a/A1
=C
AEQUQUOQ
7CAq!$DAq!$D;;=CAqD1QT6!1A!5QTAXUZ8[fkllll;;=CQa!ea!e_b5)Q\abbbb<<>S1s1b5'AERRRR<<>SB7777r=   c                  d    t        t        dz   t        dz
  t              t        t        dz   t        dz   t              t        t        dz   t        dz  t        z   dz   t              t        t        dt        z
  t              z   t              k(  sJ z   t              k(  sJ  z   z   t               k(  sJ z   z   t              k(  sJ t	        dd       t        t        fd	       t        t         fd
       t        t        fd       t        t        fd       t        t        fd       t        t        fd       z
  t               k(  sJ z
  t               k(  sJ  z
  t                k(  sJ z
  z   t               k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       y )Nr5   r2   r3   r.   r/   r   Fcommutativec                  $     t        g d      z   S rE   r   r[   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>q      sVI%66 r=   c                       z   S r{   r<   )r   r\   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>r      sQw r=   c                       z   S r{   r<   r]   r^   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>s      sSy r=   c                       t         dz
  z   S Nr.   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>t      sa!e} r=   c                       dz   S Nr7   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>u  r   r=   c                  "    dt         dz  z
   z   S Nr.   r3   rI   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>v      AqDC/ r=   c                  $     t        g d      z
  S rE   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>~  r   r=   c                       z
  S r{   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                       t         dz
  z
  S r   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                       dz
  S r   r<   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   c                      t         dz    z
  S )Nr2   r   )r\   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  s    A} r=   c                  "    dt         dz  z    z
  S )Nr.   r1   r   r   s   r>   r?   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>  r   r=   )r   r;   rI   r    r   r-   rX   )r   r[   r\   r]   r^   s   @@@@@r>   .test_TransferFunction_addition_and_subtractionr  d  s   
1q5!a%
+C
1q5!a%
+C
1q5!Q$(Q,
2C
1a!eQ
'C 9c****9c****4#:xc37777#)c3 7777'A
:67
:'
:()
:,-
:'
:/0 9sd++++9sd++++4#:3$----9s?hsSD#6666
:67
:()
:,-
:'
:,-
:/0r=   c            
          t        t        dz   t        dz   dz   t               t        t        dz   t        dz
  t              t        t        t        dz  dz
  t              t        t        dz   t        dz
  t              t        t        dz   t        dz
  t              t        t        dz   t        dz   t              t        ddt               z  t               k(  sJ   z  t                k(  sJ  z   z  t                k(  sJ    z   z   z  t                   k(  sJ z  t              k(  sJ  z  z   z  t         t        ddt              t                    k(  sJ  z  z   z  t         t	                    k(  sJ 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       y )Nr3   r4   r.   r2   r1   r5   rw   r   Fr   c                  $     t        g d      z  S rE   r   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF9$55 r=   c                       z  S r{   r<   )r   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rAv r=   c                       z  S r{   r<   r   G5s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rBw r=   c                       t         dz
  z  S r   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQU| r=   c                      d z  S Nr4   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>      q2v r=   c                  $     t        g d      z  S rE   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r	  r=   c                       dz  S rB   r<   )G6s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       z  S r{   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       dz  S r   r<   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                       t         dz  z  S r   r   r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rAqDy r=   c                  0    t         dt         dz  z  z
   z  S )Nr1   r/   r   )r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    AadF
b0 r=   c                      d z  S rB   r<   )r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  r  r=   c                      d z   z  S r   r<   )r  G7s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rQV} r=   c                       z  z  S r{   r<   r  r  r  s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR"W~ r=   c                       z   z   z  S r{   r<   r   s   r>   r?   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>  s    rR27^4 r=   )	r   r;   rI   r   r    r   r   r-   rX   )r   r   r   r   r  r  r  r   s   @@@@@@@@r>   1test_TransferFunction_multiplication_and_divisionr"    s   	!a%!Q$A	.B	!a%Q	*B	!QTAXq	)B	!a%Q	*B	!a%Q	*B	!a%Q	*B	!Q	"B b5F2rN"""3r6VRC_$$$3r62#:R"----3s7B3;s?fbS2#sRC8888b5F2rN"""rERU8r2'Aq16"b>BC C Cb5"r'?fRXb"-=>>>> b5F2s2r{++++3r6VRCR----rE2:BB4444'A
:56
:~&
:'
:+,
:~&
:56
:~&
:'
:~&
:()
:01
:~&
:,-
:-.
:45r=   c                     t        d      \  } }}t        | dz  t        dz  t        | z  |z  t        z  z   | dz  z   |       }t        |t        dz  z
  |t        dz  z   |      }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  sJ |j                  sJ |j                  sJ |j                  rJ y Nzomega_o, zeta, taur/   r3   r1   )r   r   r;   rI   rS   rT   	is_proper)rp   zetar   r   r   r   r   s          r>   test_TransferFunction_is_properr'    s    !56GT3	'1*adQwYt^A-=&=
&JG	TB	#1*cAqDj#	6B	!A#ad(QT/AaC/!3Q1a4Z	CB	!AqD&1a4-!A#-11q!t8Q	?B<<<<<<<<<|||r=   c                     t        d      \  } }}t        | dz  t        dz  t        | z  |z  t        z  z   | dz  z   |       }t        |t        dz  z
  |t        dz  z   |      }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  rJ |j                  rJ |j                  sJ |j                  rJ y r$  )r   r   r;   rI   rS   rT   is_strictly_proper)rp   r&  r   r[   r\   r]   r^   s          r>   (test_TransferFunction_is_strictly_properr*    s    !56GT3
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C%%%%%%%%!!!!%%%%%r=   c                     t        d      \  } }}t        |dz  t        dz  t        |z  |z  t        z  z   |dz  z   |      }t        | t        dz  z
  | t        dz  z   |       }t        t        t
        z  t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        t        dz  z  z
  t              }t        t
        t        dz  z  t        dz  z   t        t        z  z
  t        z   t
        t        dz  z
  t              }|j                  sJ |j                  sJ |j                  rJ |j                  rJ y )Nztau, omega_o, zetar/   r3   r1   )r   r   r;   rI   rS   rT   is_biproper)r   rp   r&  r[   r\   r]   r^   s          r>   !test_TransferFunction_is_biproperr-    s    !56C$
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C??????r=   c            
      
   t        d      \  } }}}t        | |||      }t               }t        |t              sJ t        |t              sJ |t        | |||t              k(  sJ |t        | ||dt              k(  sJ |j
                  |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   k(  sJ |j                  t        dz  |z  t        z   k(  sJ |j                  t        k(  sJ |j                  | k(  sJ |j                  |k(  sJ |j                  |k(  sJ |j                  |k(  sJ |j                         t        |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   t        dz  |z  t        z   t              k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                         t        |t        dz  z  |z   | t        z  z   t        t              k(  sJ t        t        t        dz   t              }t!        ||      }t#        ||      }t%        ||      }	|t!        t        | |||t              t        t        t        dz   t                    k(  sJ |t#        t        | |||t              t        t        t        dz   t                    k(  sJ |	t%        t        | |||t              t        t        t        dz   t                    k(  sJ |j                         t        t        t        dz  |z  t        z   z  t        dz   |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   z  z   t        dz   t        dz  |z  t        z   z  t              k(  sJ |j                         t        t        |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   z  t        dz   t        dz  |z  t        z   z  t              k(  sJ |	j                         t        t        dz   t        dz  |z  t        z   z  |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   z  t        |t        dz  z  |t        z  |z  z   |z   | t        dz  z  |z  z   | t        z  z   z  t        dz   t        dz  |z  t        z   z  z   t        dz  |z  t        z   z  t              k(  sJ y )Nzkp ki kd tfr   r/   TFr.   )r   r   
isinstancer   r;   rK   rL   varkpkikdrZ   r   r%  r,  r)  r    r   r!   )
r1  r2  r3  rZ   r   r   r[   par1ser1fed1s
             r>   test_PIDControllerr7    s   ]+NBB	r2r2	&B	B b-(((b*+++ r2r2q1111r2r1a000066R1Wr!tBw&+bAgbj82a4????66QT"Wq[   66Q;;55B;;55B;;55B;;55B;; 779(AqD2a47):R)?"QT'"*)LrRSt)SUVXYUYZ\U\_`U`bcdddd<<4>>T!!!  E)))779(AqD21)<aCCCC 1a!eQ
'CBD"c?DBD8M"b"b!<>NqRSVWRWYZ>[\\\\6-BB:<LQPQTUPUWX<YZZZZ8M"b"b!<>NqRSVWRWYZ>[\\\\99;*1ad2gk?a!ebAgPRSTPTUWPWFWZ\F\_abcefbf_fgi_iFilnoplpFp=q+q,-EAqDGaK+@!E E E E99;*1bAg1R.?".Dr!Q$wrz.QTVWXTX.X+Y,-EAqDGaK+@!E E E E99;*AEAqDGaK+@"QT'BqDQSGBSVXBX[]^_ab^b[bce[eBehjklhlBl+m,-r!Q$wAb/@2/E1a4PR
/RUWXYUY/Y,Z^_bc^cfgijfjkmfmpqfq]r,ruvxyuyz|u|  @A  vA  ,B  DEF F F Fr=   c                  z   t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t               t        d      t              }  t        d      t              }t              }|j                  fk(  sJ |j                  t        k(  sJ t        t                     }|j                  t               fk(  sJ |j                  t        k(  sJ t        | dt              }t        | dt              }t        t        ||            }|j                  t        ||      fk(  sJ t              }|j                  fk(  sJ t        ||      }|j                  ||fk(  sJ |j                  t        k(  sJ t        t                     }	|	j                  t               fk(  sJ t              }
||
k(  sJ ||k(  rJ t!        t"        fd       t!        t"        fd       t!        t"        fd	       t!        t$        fd
       t!        t$        fd       t!        t$        fd       y )Nr3   r/   r1   r.   X_dXc                      t               S r{   r   rZ   r]   s   r>   r?   z*test_Series_construction.<locals>.<lambda>#  s    vb# r=   c                       t               S r{   r<  rZ   r\   r]   r^   s   r>   r?   z*test_Series_construction.<locals>.<lambda>$  s    vb#sC8 r=   c                      t                S r{   r<  r\   r]   s   r>   r?   z*test_Series_construction.<locals>.<lambda>%  s    vsdC0 r=   c                      t        d       S r   r<  rZ   r^   s   r>   r?   z*test_Series_construction.<locals>.<lambda>&  s    fQC0 r=   c                  H    t        t        dz  t        t        z  z          S r   )r   r;   rI   rA  s   r>   r?   z*test_Series_construction.<locals>.<lambda>'  s    fQTAaCZc: r=   c                  2    t         t        g d            S N)r.   r/   r3   r1   )r   r   r   s   r>   r?   z*test_Series_construction.<locals>.<lambda>(  s    fS&*>? r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r   r   rM   r0  r    r-   rX   rY   )inpouts0s1tf3_r_   s2s3s4s6s7rZ   r\   r]   r^   s              @@@@r>   test_Series_constructionrQ     s   	"QT'Bq!tG+bd2Bq!tGbAg4E1Q4NPQ	RB
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
1adQtVBYq[02q58!
<C
(5/!
C
(3-
C	CB77r3i66Q;;	cT"C	(B77xSD)3////66Q;;CA&DSD!Q'D	HT4(#	.B77r8D$/5555	C	B77r3n$$$	d	B77tTl"""66Q;;	S(3,c	2B77sC#s!3S9999	CB8O8Rx<
:./
:89
:01
901
9:;
9?@r=   c                  F  	
 t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              } t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              }t        | |g| |  gg      t        |  g|  g| gg      t        | gg      	t        t        gt        gt         gg      }t        j                  t!        dt        z  g      t              
t#              }|j$                  fk(  sJ |j&                  t        k(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t#        	      }|j$                  	fk(  sJ |j&                  t        k(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t#        	t/         |             }|j$                  	t/         |       fk(  sJ |j(                  |j*                  |j,                  fcxk(  rdk(  sJ  J t1        t2        d        t1        t4        fd       t1        t2        fd       t1        t2        	
fd	       t1        t4        	fd
       t1        t4        	fd       t1        t4        	fd       y )Nr3   r/   r1   r.   )r/   r.   c                      t               S r{   r#   r<   r=   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>E  s    z| r=   c                      t               S r{   rT  )tf_1tfm_1s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>H  s    j5 r=   c                       t                 S r{   rT  rW  tfm_2s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>L  s    z%? r=   c                      t               S r{   rT  )tfm_3tfm_5s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>O  s    z%7 r=   c                      t        d       S r   rT  rZ  r\  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>R  s    jE59 r=   c                  J    t        t        dz  t        t        z  z           S r   )r#   r;   rI   r_  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>S  s    jA!eVUC r=   c                  >    t        t        dt        z  g             S r   )r#   r   rI   r\  s   r>   r?   z.test_MIMOSeries_construction.<locals>.<lambda>T  s    j1> r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r"   TF3TF2TF1from_Matrixr   r#   rM   r0  shapenum_outputs
num_inputsr$   r-   rX   rY   )tf_2tf_3tfm_4s8s9s11rV  rW  rZ  r\  r]  s         @@@@@r>   test_MIMOSeries_constructionrp  +  s   Bq!tGbAg-14bAg1a46G"Q$q&6PRSTDBqD1HbdQh2DAq!tafRik1BE91=D"T4$6$t8L#MNE"dUGteWug#>?E"dUG9-E"SEC5C4&#9:E"..vqse}a@E	E5	!B77uen$$$66Q;;886@&@@@@@	E5%	(B77ueU++++66Q;;886@&@@@@@
UL%%8%
@C88|UFUF;UCCCC99#..9CVCCCCC :+, 956 :?@ :78 99:
9CD
9>?r=   c                     t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              } z  z  t              cxk(  r4t        t                    cxk(  rt        t                    k(  sJ  J z   z  t        t                    k(  sJ z  | z   t        t              |       k(  sJ z  | z
  t        t              |        k(  sJ z  z   | z   t        t              |       k(  sJ z  z
  | z
  t        t               |        k(  sJ z  z
  | z   t        t               |       k(  sJ z  | z  z   t        t              t        |             k(  sJ z  | z  z
  t        t              t        t        ddt              t        |                   k(  sJ z  z
  z  z  t        t                     k(  sJ  z  t               k(  sJ z   t        t        ddt              t                    k(  sJ t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rBt        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ  J t        t               d      t        t                     j                         cxk(  rt        t        t
        t        z  t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t              k(  sJ  J t         d      t               j                         cxk(  rmt        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ  J t         d	      t               j                         k(  rJ t        t              t                     j                         t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t
         t        z  t        t
        t        z  t        z   z  z   t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t                 j                         t        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                          t        t         t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                     j                         t        t        t
        t        z  t        z
  dz  z  t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz
  z  t
        t        z  t        z   dz  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                  t               t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ t               j                  t               t        t        t
         t        z  t        z   z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t              t                     }|j                  sJ |j                   rJ |j"                  sJ t              }|j                  sJ |j                   sJ |j"                  rJ t         t                     }|j                  sJ |j                   sJ |j"                  rJ y )
Nr.   r/   rw   c                       z  z  S r{   r<   r[   r\   r^   s   r>   r?   z'test_Series_functions.<locals>.<lambda>k  s    s3ws{ r=   c                       z
  z  S r{   r<   rs  s   r>   r?   z'test_Series_functions.<locals>.<lambda>l  s    sC#I r=   c                  $     t        g d      z  S rE   r   r   s   r>   r?   z'test_Series_functions.<locals>.<lambda>m  s    s6)#44 r=   Trx   F)r   r;   r&  r   r   rP   rI   rN   rO   r   r    r-   rX   r   rewriter%  r)  r,  )r`   S1S2S3r[   r\   r]   r^   s       @@@@r>   test_Series_functionsrz  W  s	   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:Cs73;&c3/ )6&c:JC3P )#vc3'() ) ) ) )c	?fS(3*<====s7S=HVC%5s;;;;s7S=HVC%5t<<<<s7S=3(6#s+;S#"FFFFs7S=3(6#s+;cTC4"HHHHs7S=3(6#s+;cT3"GGGGs7SWS)96#s;K LLLLs7SWS)96BRSUWXZ[B\^dehjm^n;o pppps7C#Is"fS#xcT7JC&PPPP48vsdC((((W: 0Q :F3<LMMMM
:*+
:./
:45 #sT*fS#.>.C.C.E ;AqD1Q3r6$;.Q6:; ; ; ; ;#sHS3$/$?6#sT\]`cfbfTgChCmCmCo ABqD1HA	AqD1Q3r6$;4FQ4N'OOPSUVWSWZ[S[^_ab^befghehikeklpep^psuwxsx^x{|]|R|~  	AA A A A A#sSD40F3cT4J4O4O4Q TRCEAIAAqD1Q3r6$;4FQ4N(OQRST T T T TcC4%0F34E4J4J4LLLL(3$hsSD&9:??A!QTAaCF4K/"a%781<s1uq"Q$QR(|?SVW?WX[]^_[_bc[cfgijfjmnopmpqsmstxmxfx{}  @A  |A  gA  [B  DE  	FF F F3$sd#((*RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T3S!&&((!RTAXAAqD1Q3r6$;4FQ4N(OQRST T T#sHS3$/5::<BqD1Hq=!QTAaCF4K-?"a%-G*H1*LMPRSTPTWXPX[\}^_ab^befghehikeklpep^psuwxsx^xOy{|}~ ~ ~ #s##$459I!QPQTTUVWTWXZTZ[_T_M_bdfgbgMgij9kkkk#sSD!))*:;RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T 
c"HS3$$7	8B<<<$$$$>>>	S#	B<<<    ~~	cT8C#.	/B<<<    ~~~r=   c                  F  	
 t        t        t        t        gt         t         t        gg      t        t         gt         gt         gg      t        t         gg      } t        t         t         gt         t        gg      t        t        t         gt         t         gg      	t        t         gt        gg      
t        t        gt         gg      }z  
z   t	        t              
      k(  sJ z  |z   
z   t	        t              |
      k(  sJ z  
z
  |z
  t	        t              
 |       k(  sJ 	z  	z
  z   t	        t        	      	       k(  sJ 
 z   
z  z   t	        t        
       t        
             k(  sJ t        t        fd       t        t        fd       t        t        
fd       t        t        
fd       t        t        fd       t        t        fd       t        t        	fd       t        t        	fd       z  |  z  t        |        k(  sJ  z  | z  t        |        k(  sJ t        t        	fd	       t        t        	fd
       t        t        	fd       t        t        	fd       t        t        	fd       t        d      t              j                         cxk(  rut        t        t        dz   t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z
  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  z   t        t        z  t        z   dz  z
  t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ft        t        dz  t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z
  t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ff      k(  sJ  J t#        ddt        z   z  dt        z   dt        dz  z   dt        z  z   dz  z  gg      }t#        dt        z   gdt        dz  z   dt        z  z   dz  dt        z   z  gg      }t        j$                  |t              t        j$                  |t              }}t        ||      j                         t        t        dt        dz   dz  z  t        dz  dt        z  z   dz   dz  z  t        dz   dz  t        dz  dt        z  z   dz   dz  z  t              ff      k(  sJ t        ||      j                         j'                         t        t        ddt              ff      k(  sJ t        |   d      t        |         j                         cxk(  rbt        t        t        dz  t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t        t        z  t        z
  dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  z   t        t        z  t        z   dz  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ft        t        dz   t        t        z  t        z   dz  z  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t         t        z  t        z   t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z
  t        t        z  t        z   z  t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   t        t        z  t        z   dz  t        dz  dt        z  t        z  t         z  z   t        dz  z   dz  z  t              ff      k(  sJ  J t        t	        	      	d      t        t	        	      	      j                         cxk(  rVt        t        t         t         t        z  t        z
  t         t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   z  t        t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  t              t        t        t         t        z  t        t        t        z  t        z   z  z
  t        z   z  t        t        z  t        z   t              ft        t         t         t        z  t        z
  t         t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  z   z  t        t        z  t        z   t        dz  dt        z  t        z  t         z  z   t        dz  z   z  t              t        t         t        z  t        z   t         t        z  t        t        t        z  t        z   z  z
  t        z   z  t        t        z  t        z   dz  t              ff      cxk(  r-t        t	        	      	      j)                  t               k(  sJ  J y )Nc                       z  t         z   S r{   re  tfm1tfm2s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    tDy3 r=   c                       z  t         z   S r{   )rN   r~  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i"n r=   c                  "     z  t         dz
  z
  S r   r   tfm4tfm6s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i1q51 r=   c                        z  dz
  S r   r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    dD5j1n r=   c                  (    dt         dz  z    z  z   S )Nrw   r2   r   r~  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    rAqDyDI5 r=   c                        z  z   S r{   r<   r  r  r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    teDj4/ r=   c                       z  z
  z   S r{   r<   r  r  r  tfm5s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i$.5 r=   c                       z  z  z
  S r{   r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4i$t)3 r=   c                       z  t         z  S r{   r}  r  r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    tDy} r=   c                       z  t         z  S r{   rO   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4il r=   c                  $      z  t         dz
  z  S r   r   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    dD5j!a%0 r=   c                       z  dz  S r  r<   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    d4ik r=   c                  *    t         dz   dz   z   z  S )Nr3   r.   r   r  s   r>   r?   z+test_MIMOSeries_functions.<locals>.<lambda>  s    1uqy$.t3 r=   Trx   r/   r.   r3   )r"   re  rd  rc  r$   r#   r-   rX   rY   r   r   r   rP   r;   rI   r   r&  r   rf  r   rv  )tfm3tfm7mat_1mat_2tm_1tm_2r  r  r  r  r  s         @@@@@r>   test_MIMOSeries_functionsr    s   !Cc?cTC44E"FGD!SD6SD6SD6":;D!SD6(+D!SD3$<3$"=>D!C#;#t"=>D!SD6C5/2D!C5C4&/2D9t|JtT,BDIIII9td"l:dD3I4QU&VVVV9td"l:dD3ID5SWRW&XXXX9t$Zd5KTTXSX(YYYY:$t$Zt5LjY]`d_dNe(ffff
:./
9,-
912
9,-
956 9/0
956
9349dU?j$d;;;;$J
4$ ==== :,-
9*+
901
9)*
934 tTD1Zd5K5P5P5R >!$4adUBqD1Hq=5H!Q$QRSTQTUWQWX\Q\J\_acd_dJdghIh5hmolopqlqtuluxz{|x|  @A  yA  lB  DE  GH  DH  KL  MN  KN  OQ  KQ  RV  KV  DV  Y[  ]^  Y^  D^  ab  Cb  lb  6b  fh  ij  fj  mn  fn  qr  er  6r	AAq!tac"fTk)BE1A55q%: $<	!Q$1q1},adQqSVD[.@2q5.H1-LLQSPSTUPUXYPY\^_`\`cd\dOeghjkgknopqnqrtntuynygy|~  AB  }B  hB  PC  C  GI  JK  GK  NO  GO  RT  UV  RV  YZ  RZ  F[  ]^  `a  ]a  de  fg  dg  hj  dj  ko  do  ]o  rt  vw  rw  ]w  Fx  x	AAq!tac"fTk)BE1A55q
: 	<#= >> ? > ? > Q!WqsQq!tVAaCZ!O3456EacGqAvaczAoqs3456E'33E1=?U?a?abgij?k$DtT"'')!$4QAz\1a4!A#:PQ>TUBU5UXY\]X]`aWacdfgcgjklmjmcmpqcqtubuWuwx$y#{"}~ @ dD!&&(1137MP`abdeghPiOkNm7nnnn uteTD9tedUD)..0>!$4QT2a4!8a-5GAPQRSPSTVPVW[P[I[^`bc^cIcfgHg5gkmnokorsksvwjwyz|}y}  AB  CD  AD  EG  AG  HL  AL  zL  OQ  ST  OT  zT  WX  yX  kX  6X  \^  _`  \`  cd  \d  gh  [h  6h	AAq!tac"fTk)BE1A55q%: $<	1a4%AA-q!tac"fTk/ABE/IA.MMRTQTUVQVYZQZ]_`a]ade]ePfhiklhlopqrorsuouvzozhz}  BC  ~C  iC  QD  D  HJ  KL  HL  OP  HP  SU  VW  SW  Z[  S[  G\  ^_  ab  ^b  ef  gh  eh  ik  ek  lp  ep  ^p  su  wx  sx  ^x  Gy  y	AAq!tac"fTk)BE1A55q
: 	<#= >> ? > ? > |D$/El4.5::<h!$4aR"Qrc!eaiRSUVRVYZ[\Y\]_Y_`dYdRdgiklglRlEm9m5nqstuquxyqy|}  @A  }A  DE  FG  DG  HJ  DJ  KO  DO  }O  RT  VW  RW  }W  qX  Z[  %\  ^n  op  su  ru  vw  rwr!taxLrr o!!tax^, $-/?RCEAIRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxDx@y|~  @A  }A  DE  }E  HI  KL  HL  OP  QR  OR  SU  OU  VZ  OZ  HZ  ]_  ab  ]b  Hb  |c  ef  0grc!eai2#a%!RTAX,*>*BCbdQhQR]TUV/X#Y Zh ^hhtuy{  iA  CG  ^H  ^P  ^P  Qg  ^h	h i h i hr=   c                     t        t        t        dz  z  t        t        dz  z  z   t        t        z  z
  t
        t        dz  z  t        t        dz  z  z   t        t        z  t        z  z
  t              t        t        t        z  t        z
  t        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t               t        d      t              }  t        d      t              }t              }|j                  fk(  sJ |j                  t        k(  sJ t        t                     }|j                  t               fk(  sJ |j                  t        k(  sJ t        | dt              }t        | dt              }t        t        ||             }|j                  t        ||       fk(  sJ t              }|j                  fk(  sJ t        ||      }|j                  ||fk(  sJ |j                  t        k(  sJ t              }	||	k(  sJ ||k(  rJ t        t                     }
|
j                  t               fk(  sJ t        t                     }|j                  t               fk(  sJ t!        t"        fd       t!        t"        fd       t!        t"        fd	       t!        t$        fd
       t!        t$        fd       t!        t$        fd       y )Nr3   r/   r1   r.   r9  r:  c                      t               S r{   r    r=  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    xC0 r=   c                       t               S r{   r  r?  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    xCc: r=   c                      t                S r{   r  r   s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>   s    xc2 r=   c                      t        d       S r   r  rC  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    hq"c2 r=   c                  H    t        t        dz  t        t        z  z          S r   )r    r;   rI   rA  s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    hq!tacz3< r=   c                  2    t         t        g d            S rF  )r    r   r   s   r>   r?   z,test_Parallel_construction.<locals>.<lambda>  s    hsF<,@A r=   )r   rN   r;   rO   rP   rQ   rI   rR   rW   r&  r   r   r    rM   r0  r   r-   rX   rY   )rG  rH  p0r   rK  r_   r   r   r   p5p6p7rZ   r\   r]   r^   s               @@@@r>   test_Parallel_constructionr    s   	"QT'Bq!tG+bd2Bq!tGbAg4E1Q4NPQ	RB
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
1adQtVBYq[02q58!
<C
(5/!
C
(3-
C	"c	B77r3i66Q;;	&cT"C	(B77vb3$'----66Q;;CA&DSD!Q'D	"fTD5)3	/B77r6$.4444	"c3	B77r3n$$$	$	B77tTl"""66Q;;	"c	B8O8Rx<	#sF3-	.B77sCcT!23333	#sF3,c	2B77sCbS!137777
:01
::;
:23
923
9<=
9ABr=   c                  j  	
 t        t        gt        gt        gg      t        t         gt        gt        gg      	t        t        gg      
t        t        gt        gt        gg      t        t        t        gt        t        gg      } t        t        t        gt        t        gg      }t        j                  t        dt        z  gg      t              t        	      }|j                  	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t        
      	      }|j                  t        
      	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t        
      	      }|j                  t        
      	fk(  sJ |j                  t        k(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        	      }|j                  	fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        ||       }|j                  || fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        	t        
              }|j                  	t        
        fk(  sJ |j                  |j                  |j                  fcxk(  rdk(  sJ  J t        t         d        t        t         	fd       t        t         
fd       t        t"        
fd       t        t         fd       t        t         	fd	       y )
Nr.   )r3   r.   r/   r/   c                      t        d      S )Nr<   r$   r<   r=   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>+  s    l2. r=   c                  &    t         t              S r{   )r$   re  r~  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>.  s    l4s; r=   c                      t               S r{   r  )r  r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>1  s    l4t< r=   c                      t               S r{   r  )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>4  s    |D$7 r=   c                      t        d       S r   r  )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>7  s    l1dD9 r=   c                  J    t        t        dz  t        t        z  z           S r   )r$   r;   rI   )r  r  s   r>   r?   z0test_MIMOParallel_construction.<locals>.<lambda>8  s    l1a4!A#:udC r=   )r"   re  rd  rc  rf  r   rI   r$   rM   r0  r;   rg  rh  ri  r#   r-   rY   rX   )r  r  p8p9p10p11p12p13r  r  r  r  r  s           @@@@@r>   test_MIMOParallel_constructionr    s.   !C53%#"78D!SD6C53%"89D!C5'*D!C53%#"78D!C:Sz":;D!C:Sz":;D!--fqseWoqAD	dD	!B77tTl"""66Q;;886@&@@@@@	jt,d	3B77z$-t444466Q;;886@&@@@@@
tZd3T
:C88jt4d;;;;77a<<99#..9CVCCCCC
tT4
(C88dD))))99#..9CVCCCCC
tT
"C88d|###99#..9CVCCCCC
tT:teT#:TE
BC88dJud$;dUCCCC99#..9CVCCCCC 9./ 9;< 9<= :78 99:
9CDr=   c            	      P   t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              } z   z   t              k(  sJ z   z   | z   t        |       k(  sJ z   z
  | z
  t         |        k(  sJ z  z   t        t                    k(  sJ z  z
  t        t                     k(  sJ  z
  t                k(  sJ z    t        t        ddt              t                    k(  sJ z   z  t        t                    k(  sJ z   | z  z  t        t              |       k(  sJ z    |  z  t        t        ddt              t              |        k(  sJ z   z  z   | z   t        t              |       k(  sJ z   z  z   z
  t        t                     k(  sJ z   | z   | z   z  t        t        |       t        |             k(  sJ t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rqt        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ  J t        t               d      t        t                     j                         cxk(  r!t        t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   dz  z  t              k(  sJ  J t         d      t               j                         cxk(  rt        t
        t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ  J t         d	      t               j                         k(  rJ t        t              t                    j                         t        t        t
        t        z  t        z
  z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t                 j                         t        t
         t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t        z
  t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                          t        t
         t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t        z
  t
        t        z  t        z
  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z
  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                     j                         t        t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z   z  z
  dt
        z  t        z  dt        z  z
  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t              j                  t               t        t        t        dz  dt        z  t        z  t        z  z   t        dz  z   z  dz   t        dz  dt        z  t        z  t        z  z   t        dz  z   t              k(  sJ t               j                  t               t        t
        t        z  t        t
        t        z  t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        z   t
         t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t                    t              cxk(  rt        t                    k(  sJ  J t        t              t                    }|j                  sJ |j                   rJ |j"                  sJ t                }|j                  sJ |j                   rJ |j"                  sJ t         t                    }|j                  sJ |j                   rJ |j"                  sJ y )
Nr.   r/   rw   c                       z   z   S r{   r<   rs  s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>O  s    sSy3 r=   c                       z  z
  S r{   r<   rs  s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>P  s    sSW} r=   c                  $     t        g d      z   S rE   r   r   s   r>   r?   z)test_Parallel_functions.<locals>.<lambda>Q  r   r=   Trx   F)r   r;   r&  r   r   rP   rI   rN   rO   r    r   r-   rX   r   rv  r%  r)  r,  )r`   P1P2P3r[   r\   r]   r^   s       @@@@r>   test_Parallel_functionsr  ;  s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C9s?hsC55559s?S HS#sC$@@@@9s?S HS#tcT$BBBBS=HS&c*:;;;;S=HS6#c?*:;;;;4#:3$----3Y<6"22q!"<hsC>PQQQQ#Is?fXc3%7====#IC F8C+=sC$HHHH3Y<'7Aq'A8CQTCUX[W[ \\\\9s3w$c6#s;KS(QQQQ9s3w$c6#s;KcT(RRRR#IOcCi(F8Cc3JHUXZ]L^,____
:./
:,-
:67 Ct,c0B0G0G0I \AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \ \ \CfcT3/$?c63$,-224,8HBqDSTHWXZ[W[^_`a^abd^dei^iWilnpqlqWqtuVuIuSUQYA!Bt+b!e34J58:1q1a4!A#b&QU+CUXZ\]X]C]7^J_acdeaehiailmoplp!Btm !em$&'l( a()*9,, , , , , CsdT2hsC#6N6S6S6U :A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxx!tax!Q$1R,r1u45q	:: : : : : cTE2hsSD6I6N6N6PPPPF3$fS#&67<<>BqD1Hq!tac"fTk'9BE'ABQ1q\QTVWXTX[\T\_`bc_cfghifijlflmqfq_qtvxyty_ySz|}~  SD3$%**,"QBqD1Hq!tac"fTk/ABE/I!JJQNSURUVWRWZ[R[^_ab^befghehikeklpep^psuwxsx^xQyyTAX1qs2vd{*RU23Q	88 8 8 S#s#((**"QBqD1Hq!tac"fTk/ABE/I!JJQNRTUVRVYZRZ]^`a]adefgdghjdjkodo]ortvwrw]wQxxTAX1qs2vd{*RU23Q	88 8 8 CfS3$/5::<BqD1Hq!tac"fTk'9BE'ABQ1q\QUVWYUYZ[U[^_`a^aUadeghdhklmnknoqkqrvkvdv!ee U !tax!Q$1R"4r1u"<=q	BB B B C%%&67AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \Csd#++,<=A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]oU^ Q dQhA!Bt!3b!e!;<a	AA A A C#s+,c30Gl8T\]`beTfhkKllllll	&c"F3$4	5B<<<$$$$>>>	#tcT	"B<<<$$$$>>>	#tVC-	.B<<<$$$$>>>r=   c                  (   t        t        t        z  t        t        z  z   t        z
  t        t              } t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              }t        t        gt        gt        gg      t        t         g|gt         gg      t        |g| gt        gg      t        t        | gt        |gg      t        t        t        gt        | gg      t        t         gg      }t        | g|  g| gg      z   z   t              cxk(  rt        t                    k(  sJ  J z
  z
  t                k(  sJ z
   |z  | z  z   t         t        | |             k(  sJ z    |z  z
  t        t        |              k(  sJ z
  z
  z   t                k(  sJ z   z
  z
  t                k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       z   |z  t        |t                    k(  sJ z
  |z  | z  t        | |t                     k(  sJ z
  z
  ||z   z  t        t        ||      t                      k(  sJ t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        t        fd       t        d      t              j                         cxk(  rt              j!                  t              cxk(  rut        t        t"         t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  dz   t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   t              ft        t         t        t        dz  z  z   t
        t        z  z   t"        t        t        z   z  z   t        t        z   t              ft        t
         t        z  t        z
  t
        t        z  t        z
  t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  z   t
        t        z  t        z   t        dz  dt        z  t$        z  t&        z  z   t$        dz  z   z  t              ff      k(  sJ  J y )Nr/   c                       z   t         z   S r{   )rd  r~  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{S0 r=   c                       z
  t         z
  S r{   r  r~  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkB. r=   c                  "     z
  t         dz
  z
  S r   r   r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkQU3 r=   c                        z
  dz
  S r  r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tedlQ. r=   c                  (    dt         dz  z
  z
   z
  S r   r   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    q1a4x4/$6 r=   c                       z
  z
  S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>      td{T1 r=   c                       z
  z   S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  r  r=   c                       z   z   S r{   r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    dTkD0 r=   c                       z
  z
  S r{   r<   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{d2 r=   c                       z   t         z  S r{   r}  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tS0 r=   c                       z
  t         z  S r{   )rP   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{B. r=   c                  "     z   t         dz
  z  S )Nr5   r   r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{QU3 r=   c                       z   z   dz  S rB   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    td{T114 r=   c                  (    dt         dz  z
   z   z  S r   r   )r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    q1a4x$+6 r=   c                       z
  z  z  S r{   r<   )r  r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tT1$6 r=   c                       z
  z  S r{   r<   )r  r  r  s   r>   r?   z-test_MIMOParallel_functions.<locals>.<lambda>  s    tT1 r=   Trx   r.   )r   rN   rI   rO   r;   rP   r"   re  rd  rc  r$   r#   r-   rX   rY   r   rv  r   r   r&  )	r^   r`   r  r  r  r  r  r  r  s	      @@@@@@r>   test_MIMOParallel_functionsr    s   
2a4!R%<!+Q
2C
2ad7RT>B.B
:C!C53%#"78D!SD6C5C4&"9:D!C5C4&3%"89D!C#;c
";<D!C:cT{";<D!SD6(+D!C5C4&3%"89D$;dD$!?o<P\]acgPhjnCoooooo$;dTED5!AAAA$;4%*dU*+|D4%UYTY[_bfafIg/hhhh$;4%*%dD:dUYTYCZBZ)[[[[$;$TD54%(NNNN$;$T4$(NNNN
:01
9./
934
9./
967
:12
:12
901
9234KD,tT2J!KKKK4Kte#z4%|DSWRW?X'YYYY4K$-Lt<TVbcgjninqupuVv1wwww
:01
9./
934
945
967 :67
:12 td3|D$7O7T7T7V VD$''(>?V 0!QTAaCF4K5G"a%5O1PST1TVWYZVZ]^_`]`ac]cdh]hVhkmopkpVprs tv	2#1a4-"Q$.BF;R!VQ	GIL\^`]`ab]bef]fjlmnjnqrjr	
A!Bt	b!e	#j% ^%')!tax!Q$1R2Dr1u2L&MqMR LTU VV W V W Vr=   c                  X	  	
 t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              	t        t
        t        z  t        z
  t
        t        z  t        z   t              
t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              t        t        t        z
  t        t        z   t              } t        t        ddt              	z  
z        }|j                  t        ddt              t        	
      dfk(  sJ |j                  t        ddt              k(  sJ |j                  t        	
      k(  sJ |j                  t        k(  sJ t        	
z        }|j                  t        	
      dfk(  sJ |j                  k(  sJ |j                  t        	
      k(  sJ |j                  t        k(  sJ t        	z        }|j                  t        	      dfk(  sJ |j                  t        	      k(  sJ t        |       }|j                  | dfk(  sJ |j                  k(  sJ |j                  t        k(  sJ t        t        ddt                    }|j                  t        ddt              dfk(  sJ |j                  t        k(  sJ |t              k(  sJ t        t        ddt                    }|j                  t        ddt              dfk(  sJ |j                  t        k(  sJ t        | z  t        ddt                     }|j                  t        t        ddt              t        |             t        ddt               dfk(  sJ |j                  t        t        ddt              t        |             k(  sJ t        t         	
fd       t        t         fd       t        t         d        t        t         d        t        t"        	fd       t        t"        	fd	       t        t"        fd
       t        t"        fd       y )Nr.   r/   rw   c                  "    t         z         S r{   r!   r[   r\   r]   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    hsC#I6 r=   c                  2    t         t        g d            S rE   )r!   r   r   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    hsF9,=> r=   c                  F    t        t        ddt              t        dz
        S r   )r!   r   r;   r<   r=   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    h'71a'@!a%H r=   c                      t        dd      S r   r  r<   r=   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    hq!n r=   c                  "    t         z        S r{   r  )r\   r^   r`   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xSW5 r=   c                      t         d      S )N      ?r  r[   r\   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xS#6 r=   c                  $    t          dz         S )Nrw   r  r   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xc2gX6 r=   c                      t               S r{   r  r   s   r>   r?   z,test_Feedback_construction.<locals>.<lambda>  s    xS1 r=   )r   r;   r&  r   r   rP   rI   rN   rO   r!   rM   r   sys1sys2r0  r-   rY   rX   )rb   f1f2f3f4f5f6f7r[   r\   r]   r^   r`   s           @@@@@r>   test_Feedback_constructionr    s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+C	"1a+SWS[	9B77'1a0&c32GLLLL77&q!Q////77fS#s++++66Q;;	#s3w	B77sF3,b111177c>>77fS#&&&&66Q;;	#c'3	B77vc3'b111177fS#&&&&	#s	B77sCn$$$77c>>66Q;;	#'1a0	1B77s,Q15r::::66Q;;#	"1a+S	1B77'1a0#r::::66Q;;
3s7,Q15
6	6B77v.r1a8&c:JKN^_`bcefNgMgikllll77f-b!Q7S9IJJJJ 967
9>?
9HI
9,-
:56
:67
:67
:12r=   c            
         t        ddt              t        dt        dz  dt        z  t        z  t        z  z   t        dz  z   t              t        t        dt              t        t
        t        z  t        z
  t
        t        z  t        z   t              t        t        t        z  t        t        z  z   t        z
  t        t              t        t        t        dz  z  t
        t        z  z   t        z
  t        t        z   t              } t        t        t        z
  t        t        z   t              }z  z  z  | z  t        t        d      |       k(  sJ z  z  | z  z  t        z  z  j                         t        | z  j                         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        j                         t        t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t              k(  sJ t        z  z        j                   dt        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        z        j                         t        t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        z        j                   dt        t
        t        z  t        z
  z  t
        t        z  t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        z  |       j                         t        t        t        t        z   z  t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        z  | d      j                   dt         t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z  dz   z  k(  sJ t        |      j                         t        t        t        t        z   z  t        t        z  t        t        z  z   t        z
  z  t        t        t        t        z   z  t         t        z   t        t        z  t        t        z  z   t        z
  z  z   z  t              k(  sJ t        |z  t        ddt                    j                          t        t         t         t        z   z  t        t        z   z  t        t        z  t        t        z  z   t        z
  z  t        t        t        z   z  t        t        t        z   z  t         t        z   t        t        z  t        t        z  z   t        z
  z  z   z  t              k(  sJ t              j                         t        ddt              k(  sJ t        | z        j#                  t               t        t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t        t         t        t        dz  z  z   t
        t        z  z   z  t        t        z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  z   t        dz  dt        z  t        z  t        z  z   t        dz  z   z  t              k(  sJ t        t        ddt                    j#                  t               t        t        t        t        z  t        z   t        t        z  z   t        z
  t              k(  sJ y )Nr.   r/   rw   c                  ,     z  z  d z  z  z   z  S r   r<   r  s   r>   r?   z)test_Feedback_functions.<locals>.<lambda>  s     c#gckQS_= r=   c                  &    z   z  z  z   z  S r{   r<   r?  s   r>   r?   z)test_Feedback_functions.<locals>.<lambda>  s    s3w"s3ws{*:; r=   )r   r;   r&  r   r   rP   rI   rN   rO   r   r   r   r!   r-   rY   rX   sensitivityrv  )r`   rb   rZ   r[   r\   r]   r^   s     @@@@@r>   test_Feedback_functionsr    s	   	!Q	"B
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+CGCK#c!fS#sCRL#&NNNNGCKCG$C/A/A/CS#c'IYZ\E](^^^^c?hr3////c#gck!"hr3s73;&????"s3ws{"#xSW'====GSW%#c'2)>>>>GSWS[()Xc#gs-CCCCGSWS[_,-(3s7CG2LhWZ[^W^`cdg`gNh1iiii"1a+c#g56(3:LLLL"s(xR0000
9=>
:;<BC$))+"Q$(QTAaCF4K%7"a%%?@!RTAX,	AAqD1Q3r6$;&Q./C012	44 4 4 BC$00	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCS!&&("Q$(QTAaCF4K%7"a%%?@1bdQh<	AAqD1Q3r6$;&Q./D023Q$1R2Dr1u2LCNOP	RR R R CS!--	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCGS!&&(BFQTAaCF4K%7"a%%?@1rcBqRStGmVXYZVZFZC[	a!Q$1R$r1u,-D.011qs2vd{0BRU0JCLMN	PP P P CGS!$00	A2sR1W}r!t#$rAv1qs2vd{0BRU0J&KLqPQR R RC""$AEBqD1b5L1$45q!QU)rAvPRSTPTWXZ\W\P\_`P`Fa:a7bdefg g gSW.q!Q78==??!aR!Va!e,bdQUlQ.>?AEAqSTuIZ[Y[^_Y_bdefbfijlninbnqrbrXsLsAtvwxy y yB  "&6q!Q&????CS!))*:;"q&1a4!A#b&+#5A#=>RC"QPQT'MTVWXTXDXAY	a!Q$1R$r1u,-B.011qs2vd{0BRU0JALMN	PP P P $Q1-s3;;<LMBqD1Hq"u,q0!45 5 5r=   c                     t        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 |j                         t        t        dz   dz  t        dz   t        dz   z  dz   t              k(  sJ |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 y )Nr.   r/   rw   )
r   r;   r!   r/  r   rK   rL   r    r   r   )	r[   r\   fd1fd2unitrJ  r   fd3r]   s	            r>   test_Feedback_with_Seriesr     s[   
1Q31
%C
1Q31
%C
3R
 C
3Q
CAq!$D c2333c8$$$ 77c>>77c>>77htVC%5666677htfS#&6%67777 
S	B	#s	B9??9??779(!a%!a!ea!e_q5H!LLLL779(a!eq1uq1uo6I-J)JQ)NQRUVQVYZ]^Y^P_bcPcefgggg 3s7C
$C(6#s+S111177cCi77htVCS1A%BCCCC 3s7C
+C"6#s#3S!<<<<77c#gr=   c                     t        ddd      \  } }}}}}t        dd      \  }}}| ||dz  z  z   |z  t        z  |z  }	||z  }
|||z   z  }|dz  t        z  ||z   z  }t        | |
t        z  dz   z  |	t        dz  z  dz
  t              }t        d|t        dz  z  t        t        z  z   t              }t        d|t        z  t              }t        |t        z  dt              }t        |t        t              }t        ddt              }t        ||z  |      }t        ||z  |z  |      }|t        t        |t        ||            |      k(  sJ |j                  t        |t        ||            k(  sJ |j                  t        |t        |t        |t        ||                        k(  sJ ||z  t        z  t        dz  z  |dz  z  ||z   z  |t        dz  z  t        t        z  z   dz  z  t         |z  |z  t        dz  | |dz  |z  z   z  z   z  | t        z  |z  |z  t        z  |dz  z  |t        z  |z   z  t        |z  ||z   z  |t        dz  z  t        t        z  z   z  t         |z  |z  t        dz  | |dz  |z  z   z  z   z  z   z  t        dz  |z  |t        dz  z  t        t        z  z   z  | t        z  |z  |z  t        z  |dz  z  |t        z  |z   z  t        |z  ||z   z  |t        dz  z  t        t        z  z   z  t         |z  |z  t        dz  | |dz  |z  z   z  z   z  z   z  ||z  t        z  t        z  |z  ||z   dz  z  |t        dz  z  t        t        z  z   z  t         |z  |z  t        dz  | |dz  |z  z   z  z   z  t        dz  |z  |t        dz  z  t        t        z  z   z  | t        z  |z  |z  t        z  |dz  z  |t        z  |z   z  t        |z  ||z   z  |t        dz  z  t        t        z  z   z  t         |z  |z  t        dz  | |dz  |z  z   z  z   z  z   z  z   z  ||z   z  z  }|j                         |z
  j                         d	k(  sJ y )
NzI_b, I_s, m, h, l2, l1T)realnonnegativezK_D, K_P, v)r  r/   r.   r3   r   )r   rU   r   r;   r   r!   r   rK   rL   r    r   r   )IbIsmhl2l1KDKPvtau1_sqtau2tau3KGthetaGdeltaGpsiDcontPIcontGunityGinnerGouterexprs                         r>   test_issue_26161r  F  s   "#;154IBAq"bD1IBAAQJ!#a'!+G6DR=D	Q
b2gAqbD1HqL17Q!V3Ca3GKFaa1fq1u!4a8FAtax+DR!VQ*Eb!Q'FaA&Fefnf-Ffvo,f5FXfVVFD-ABFKKKK::vt(<====::&&vW[H\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4r=   c                     t        dt        t              } t        t        t        dz  dz
  t              }t        t        t        dz   t              }t        t        t        dz  dz   t              }t        | |g||gg      }t        ||g|| gg      }t        ||g| |gg      }t        ||      }|j                  ||dfk(  sJ |j
                  |k(  sJ |j                  |k(  sJ |j                  t        k(  sJ |j                  dk(  sJ |  |k(  sJ t        ||d      }|j                  ||dfk(  sJ |j
                  |k(  sJ |j                  |k(  sJ |j                  t        k(  sJ |j                  dk(  sJ t        |t        ||            }	|	j                  |t        ||      dfk(  sJ |	j
                  |k(  sJ |	j                  t        ||      k(  sJ |	j                  t        k(  sJ |	j                  dk(  sJ t        ddt        z  gddgg      }
t        j                  |
t              x}}t        ||      }|j                  ||dfk(  sJ |j
                  |j                  cxk(  r|k(  sJ  J y )Nr.   r3   r/   rw   r   )r   r;   r"   r%   rM   r  r  r0  signr#   r   rf  )r[   r\   r]   r^   rW  rZ  r\  r  r  r  matr  
controllerr  s                 r>   test_MIMOFeedback_constructionr  f  sm   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C"S#Jc
#;<E"S#Jc
#;<E"S#Jc
#;<E	eU	#B77ueR((((77e77e66Q;;77b==S6R<<	eUA	&B77ueQ''''77e77e66Q;;77a<<	eZu5	6B77uj6;;;;77e77j....66Q;;77b==
1ac(QF#
$C.::3BBD:	dJ	'B77tZ,,,,77bgg%%%%%%r=   c                     	
 t        dt        t              t        t        t        dz  dz
  t              t        t        t        dz
  t              } t        t        t        dz  dz   t              }t        ddt              }t        dt        dz
  t              }t        g| |gg      t        | g|gg      t        j                  t	        d      t              t        |g||gg      	t        |  | g| |gg      
t        |  gg      t        | |gg      t        t        fd       t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       t        t        	
fd       t        t        	
fd       t        t        fd       t        j                  t	        d      t              t        t        fd       y )Nr.   r3   r/   rw   r0  c                      t               S r{   r%   r  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    l34 r=   c                  0    t        t                     S r{   )r%   r$   )rW  rZ  r\  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    l<u+EuM r=   c                      t         d      S r   r  )rW  tfm_6s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>      |E5!< r=   c                      t                S r{   r  )tfm_7s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E59 r=   c                      t         d      S )Nr   r  rY  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |E5"= r=   c                      t         d      S r   r  rl  r]  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   c                      t                S r{   r  r"  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  s    |EE6: r=   c                      t          d      S r   r  rb  s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   c                      t         d      S r   r  )rW  tfm_8s   r>   r?   z*test_MIMOFeedback_errors.<locals>.<lambda>  r  r=   )	r   r;   r"   rf  r   r-   rY   rX   rI   )r]   r^   r`   rb   r[   r\   rW  rZ  r\  rl  r]  r  r  r&  s       @@@@@@@@@@r>   test_MIMOFeedback_errorsr'    s   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C
1a
#C
2q1ua
(C"S#Jc
#;<E"S#Jc
#;<E"..s1v1=E"S#Jc
#;<E"cT3K#s#<=E"cTF8,E"S#J<0E 945
9MN
:<=
:9:
:=>
:<=
::;
:<="..s1v1=E
:<=r=   c            
         t        dt        t              } t        t        t        dz
  t              }t        ddt              }t        dt        dz
  t              }t        j                  t	        d      t              }t        | |g||gg      }t        | |g||gg      }t        | |g| | gg      }t        ||      }t        |t        ||       d      }	|j                  t        t        j                  dgdt        j                  gg      k(  sJ |	j                  t        dt        dz  z  t        dz  z   t        dz  t        z
  dz   z  dt        dz  z  t        dz  z
  t        dz  t        z
  dz   z  gt        dz   t        gg      k(  sJ |j                         t        t        ddt        z  t              t        ddt              ft        ddt              t        ddt              ff      cxk(  r|j                  t              k(  sJ  J |	j                  d	d
      t        t        t        dz   dt        dz  z  z   dt        dz  z  z
  t        dz  z   t        dz  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  t        z   t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |	j                  d	      t        t        t        dt        dz  z  t        dz  z
  z  t        dz  t        z
  dz   z  dt        dz  z  t        dz  z   t        dz  t        z
  dz   z  z   t        t        dz  t        z
  dz   dz  z  t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |	j                         t        t        t        dt        dz  z  t        dt        z  dz
  z  z   dz   z  t        dz  t        z
  dz   t              t        dt        dz  z  t        dz
  z  t        dz  t        z
  dz   t              ft        ddt              t        t        dt        z
  z  dt              ff      k(  sJ |	j                  d
      t        t        t        dz   t        z   t        dz  t        z
  dz   t              t        dt        dz  z  dt        dz  z  z   t        dz  t        z
  dz   t              ft        ddt              t        t        dz   t        z   dt              ff      k(  sJ |j                          | j                         k(  sJ y )Nr.   rw   r/   r  r   r   r1   r3   FT)cancelr   r2   )r)  )r   )r   r;   r"   rf  r   r%   r#   r  r   r   Halfr   rv  )
r[   r\   r]   r^   rW  rZ  r\  rl  F_1F_2s
             r>   test_MIMOFeedback_functionsr-    s   
1a
#C
1a!eQ
'C
1a
#C
2q1ua
(C"..s1v1=E"S#Jc
#;<E"cT3K#s#<=E"S#J#s#<=E ue
$C
uj7
;C??fqvvqkAqvv;%?@@@@??f1a4!Q$AA'F	
1a4!Q$AA&'(+,a4%&5 6 6 6 6 88:!1!QqS!!<Aq!!#%5aA%>Aq!%# $ 	%L ),4J(KL L L L L 8858.!11a4%!AqD&.1QT62IAqD2PRSUVRVYZ[\^_[_Y_R_bcdeghdhbhRhklmnpqmqkqRqtuRuwx!yAqD1QT6)1a4!8a<;!=?OPQSTVW?XZjlmoplpkpstktvwyzZ{>| ~ 	   8858!!1!Qq!tVad]2CQTAXPQ\2R	AqD1a4!Q$(Q,'3()*AqD1HqL1+<)<a"ABRSUVWYZVZSZ]^_`bc_c]cScefhieilmempqeqstBu!w	!Q	"$4adUQY1$EF H 	II I I 88:!1!R1Wq!A#'{5JQ5N2OQRTUQUXYQY\]Q]_`!aAqD!a%!Q$(Q,:!<>NqRSUV>WYijkmnqrmrjsuvxyYz={ } 	~~ ~ ~ 8848 !11a4%!)QTAX\1!MO_`bcdfgcg`gjklmoplpjp`prsuvrvyzrz}~r~  AB  PC  !D	!Q	"$4adUQY1$EF H 	II I I XXZ=cTKKM)))r=   c                     t        t        t        dz  z  t        t        z  z   t        z
  t        t        z   t              t        t        t
        z  t
        t        z  z   t        z
  t
        t
              t        t         gg      } | j                  | j                  | j                  fcxk(  rdk(  sJ  J | j                  t        t        t        t                           k(  sJ | j                  t        k(  sJ t        t        t         gt        gg      }|j                  |j                  |j                  fcxk(  rdk(  sJ  J |j                  t        t        t        t        t               t        t                          k(  sJ |j                  t        k(  sJ t        t        t        gt         g t        gg      }|j                  |j                  |j                  fcxk(  rdk(  sJ  J |j                  t        t        t        t        t              t        t               t         t                          k(  sJ |j                  t        k(  sJ t!        t"        fd       t!        t"        fd       t!        t"        fd       t!        t"        fd       t!        t$        d	        t!        t$        d
        t!        t"        fd       t!        t"        d        y )Nr/   )r.   r.   r  )r3   r/   c                  6    t        t        gt        g gg      S r{   r"   re  rd  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KL r=   c                  6    t        t         gt        gg      S r{   r"   re  rc  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC:6NO r=   c                  4    t        t        gt         gg      S r{   r2  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usCj6IJ r=   c                  4    t        t        t        g gg      S r{   r2  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5SzC56IJ r=   c                  R    t        t        t        gt        t	        ddg      gg      S Nr.   r/   )r"   re  rd  rc  r   r<   r=   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s$    4sCj3PQSTvBW5XY r=   c                  R    t        t        t        ddg      gt        t        gg      S r6  )r"   re  r   rc  rd  r<   r=   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s#    4sFAq6N6KcSVZ5XY r=   c                  0    t        t        t         g      S r{   r0  r   s   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5sCoF r=   c                  "    t        t        g      S r{   )r"   re  r<   r=   r>   r?   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5se< r=   )r   rO   r;   rP   rN   rI   r"   rc  rg  rh  ri  rM   r   r0  re  rd  r-   rX   rY   )tfm3_r  r  r^   r`   s      @@r>   (test_TransferFunctionMatrix_constructionr;    s1   
2ad7RT>B.B
:C
2a4!R%<!+Q
2C"cTF8,E;;5,,e.>.>?I6IIIII::uUC4[1222299>>!C#;c
";<D::$**DOO<FFFFFF99eE#t$4eCoFGGGG88q==!C:cT{cT3K"HID::$**DOO<FFFFFF99eE#sOU35EucTSVGWXYYYY88q== :LM
:OP :JK
:JK 9YZ
9YZ :FG
:<=r=   c                  $   t        t        t        dz  z  t        t        z  z   t        z
  t        t        z   t              } t        t        t        dz   z  t        dz
  z  t        dz  dz   z  dgt        t        t        dz   z  t        t        dz  dz   z  z  gg      }t        dt        z  dz   t        dz  dz
  z  gg      }t        ddgddgg      }t        j                  |t              t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        t        dt              t        t        t        t              gg      k(  sJ t        j                  |t              t        t        dt        z  dz   t        dz  dz
  t              gg      k(  sJ t        j                  |t              t        t        ddt              t        ddt              gt        ddt              t        ddt              gg      k(  sJ t        t        gt        gg      }| t        t         gt         gg      k(  sJ t        t        t        t        g| t         t         gg      }| t        t         t         t         g|  t        t        gg      k(  sJ t        j                  |t              }t        t        t        t        z  t        z  t        t        dz  z  t              t        t        t        z  t        t        dz  t        z
  z  t              gg      }|j                  t        d      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        di      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        dt        di      t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        ddt              gt        ddt              t        dt        t              gg      k(  sJ |j                  t        d      t        t        dt        z  t        z  t        t        dz  z  t              t        dt        z  t        t         t        dz  z   z  t              gg      k(  sJ |j                  t        d      t        t        t        t        z  t        z  t        dz  t              t        t        t        z  t         t        dz  z   t              gg      k(  sJ |j                  t        d      t        t        dt        t        dz  z  t              t        t        t        z  t        t        dz  z  t              gg      k(  sJ |j                  t        dt        dt        t        i      t        t        t        t        z  t        dz  t              t        t        t         t        dz  z   t              gg      k(  sJ |j                  t!        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 |j'                         t        t        t        t        dz
  z  t        dz   z  t        dz  dz   t              t        t        dt              gt        ddt              t        t        t        t              gg      k(  sJ |j'                         t        t        t        t        z  t        z  t        t        dz  z  t              gt        t        t        z  t        t         t        dz  z   z  t              gg      k(  sJ |j'                         j'                         |k(  sJ |j'                         j'                         |k(  sJ |j)                         t+        d       dz  t+        d      t"        z  dz  z
  t+        d       dz  t+        d      t"        z  dz  z   t+        d      dz  t+        d      t"        z  dz  z
  t+        d      dz  t+        d      t"        z  dz  z   gg gg dgggk(  sJ |j)                         ddgt+        t              t+        t               gggk(  sJ |j)                         t,        t.         t+        t.        dz
  t.        dz   z        z   z  t,        t.         t+        t.        dz
  t.        dz   z        z
  z  gg t         t        z  ggt         gt,        t.         t+        t.        dz
  t.        dz   z        z   z  t,        t.         t+        t.        dz
  t.        dz   z        z
  z  gt         t        z  gggk(  sJ |j1                         g d	g gg g ggk(  sJ |j1                         dgdgggk(  sJ |j1                         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      }	|j7                         t        t        t        dz  dt        z  z
  dz   t        t        dz  dz
  z  t              gg      k(  sJ |	j7                         t        t        ddt        dz  z  t        dz  z
  dt        z  z
  dz   t              gg      k(  sJ |j9                         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 |j9                         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 |j9                         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 |	j9                         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 |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 |j                  t        dt        dt        di      j;                         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      }
|
j=                         t=        |
      cxk(  rZt        t        t        dz   t        dz  z
  dz
  t        dz
  t              t        t        dz   t        dz   t              ff      k(  sJ  J |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 |
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 y )Nr/   r.   r3   r1   r4   r   r2   r   )rw   r   r3   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @) r   rO   r;   rP   rN   r   rI   r"   rf  re  rd  rc  rS   r   r   r   r   r   r   	transpose
elem_polesr   r   r&  
elem_zerosr   r    r   _flatr   r   r   )r`   r  r  mat_3r  r  H_1H_2H_3H_4H_5s              r>   %test_TransferFunctionMatrix_functionsrG    s3   
2ad7RT>B.B
:C 	
AEAE	AqD1H	%q)	
Aq1uIq!Q$(|$%
 E qsQwA2345EaVaV,-E!--eQ7!1!QU)QU2CQTAXq!QScdeghjkSl m	!Q	"$4Q1$=> @ 	AA A A "--eQ7!1!A#'1a4!8Q!G HIJK K K!--eQ7!1!Q!:<LQPQST<U V	!Q	"$4Q1$=> @ 	AA A A "C53%.1D5*cTFcTF+;<<<<!Cc?S3$4E"FGD5*cTC4#,>#sC@P+QRRRR !
,
,UA
6C
 #3AaCE1QT61#EGWXYZ[X[]^`acd`dgh`h]iklGm"n!o
pC88Aq>36Fq!a%yRSVWRWGXZ[]^Z^abZbde6fhxyz|}  @A  iB  6C  FV  WX  Z[  ]^  F_  aq  rs  uv  xy  az  E{  5|  }  }  }  }88QF58HAPQETUXYTYIZ\]_`\`cd\dfg8hjz{|~  BC  kD  8E  HX  YZ  \]  _`  Ha  cs  tu  wx  z{  c|  G}  7~         88Q1aL!%;>NqRSVWRWyZ[^_Z_O`bcefbfijbjlm>n  qA  BC  EF  HI  qJ  >K  N^  _`  bc  ef  Ng  iy  z{  }~  @A  iB  MC  =D  &E  E  E  E88Aq>36Fqs1uaPQSTPTfVW6XZjklmnknpqtusuxy{|x|s|p}  @A  [B  6C  5D  E  E  E  E88Aq>36Fqs1uaQRdTU6VXhijklilopnpstvwswnwyzX{5|4}~~~~88Aq>36Fq!AqD&RS6TVfghijgjlmnoqrnrlrtuVv5w4xyyyy88Q1aB'(,BEUVXYZVZ\]_`\`bcEdfvwx{}z}  AB  DE  AE  {E  GH  gI  EJ  DK  -L  L  L  L ad1fqj)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 ==?47G1q5	STWXSXHY[\^_[_bc[cef7giyz{}~  AB  jC  7D  GW  XY  [\  ^_  G`  br  st  vw  yz  b{  F|  6}  ~  ~  ~  ~==?47G!AqQRTUQUvWX7Y6Z]mnopqnqstwxvx{|~{v  tA  CD  ^E  ]F  6G  H  H  H  H==?$$&#---==?$$&#--- >>47(1*tAwqy{":T!WHQJaQRST<TVZ[\V]^_V_bfghbijkbklmbmVmostuovwxox{  AB  |C  DE  |E  FG  |G  pG  "H  JL  !M	aS	    >>!Q$q'DG8)< =>>>>??2utTAXq4I/J'J#KRRVQVY]_cfg_gjnqrjr^sYtQtMu"vxz~}  AC  ~C  }D  "E#dUT4!8dQh"78892utTTUXX\_`X`LaGb?b;cdhigijlglfmn!p p p p
 >>R 02r(;;;;>>!qc
|+++??"b2a4&!1#qt*tAbDGb!eO,ad3
3bS!B$Z$qtBwQSUVQVBWYZ[]Y]B^5^	_acfhijfjekl!n n n n
 !6*:1adQh*JL\]^`a]adefgdg]gjk]kmnpqLr  uE  FG  IJ  LM  uN  $O  #P  "Q  RC
 8,<QTAXqAvPQSTPT}WXYZWZGZ]^G^`a,bdtuvyz|}y}u}  @A  BC  EF  BF  @F  IJ  LM  IM  @M  PQ  RS  PS  @S  VW  @W  YZ  e[  $\  #]  "^  _C88:/2B1a4!A#:PQ>STVWYZVZ]^V^S_ab2c1d0effff88:/2B1a1fqRStmVWXYVYFY\]F]_`2a1b0cdddd 99;+Aq1uIq1u,=q!taxKM]^_abdeMfhxyz|}  @A  iB  DT  UV  XY  [\  D]  ^  ^  ^  ^99;+AaCE1QT61=?OPQRSPSUVYZXZ]^`a]aXaUbde?fgggg99;6"21adQh"BDTUVXYUY\]^_\_U_bcUcefhiDjl|}~  AB  DE  mF  G  H  H  H  H99;8$4QTAXqAv1}qQRs?RUV?VXY$Z\lmnqrtuqumuwxyz|}y}w}  AB  DE  AE  xE  HI  JK  HK  xK  NO  xO  QR  ]S  T  U  U  U  U 99;!1!QW+q3w2GAPSUV!WYijmoprsYt u  yI  JM  NO  JO  QR  TU  yV  Xh  ij  lm  op  Xq  xr   s  	tt t t88Quaa*+113!12eghjk!lMaOQTUVXYUYQY  ]O  RO  QR  	S!T  V 	WW W W !#3AqD1a4K!OQAXq#Q!a%!a%1q51q5/1=#? "@ AC <<>Xc] u!11a4%!Q$,2BAE1!MO_`ade`eghklglnoOp qstu u u u u
 JJL%(8A!Q$19LaQRdUVhXY(Z\lmnpqst\u'vaA&(8Aq(AB'D EE F E ::<!1!Q$A+/AqD519a!PRbcdfgcgjklmjmcmpqcqstvwswz{|}z}s}  AB  tB  DE  SF  !G   I  	JJ J Jr=   c                     t        dt        t        z  t        z   t              } t	        | t
        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                  |j                         |j                         z
  j                         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                  |j                         |j                         z
  j                         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                  |j                         |j                         z
  j                         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                  |j                         |j                         z
  j                         j                  k(  sJ y )	Nr.   r6   r   r/   g333333?r3   r   r8   )
r   rS   r;   rT   r'   Tr   Zeror   rK   )rZ   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r>   test_TransferFunction_gbtrR  b  s   	!QqSUA	&BRCJD$'DGd1g(=q47{TRSW?TVWX%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqN66&//1.2I2I2KKUUW[[[[[	!QqSUA	&BRAJD$&tAw$q'	$q'0A1EO%ac1QqS!|+;Q?N66o..01H1H1JJTTVZZZZZ	!QqSUA	&BRAJD$'$q'	1T!W9T!W3DaH%a!eQ1Woq1a!A#g;JN66&//1.2I2I2KKUUW[[[[[	!QqSUA	&BRCJD$"1T!W9T!W#4aQiQ6GKK%ac!eRQqSU2X->&?!A#r1qQRsSTuUWx<GXBY&Y[\ab`befghehijejkmem`mpqtuvwtwxytyz|t|p|_}[}  @A  BN66k**,^-D-D-FFPPRVVVVVr=   c                     t        dt        t        z  t        z   t              } t	        | t
              \  }}t        t        |d   z  |d   z   t        |d   z  |d   z   t              }t        t        t
        z  dt        t        t
        z  dz  z   z  z  t
        dt        t        t
        z  dz  z   z  z  z   t        t         t        t
        z  dz  z   t        t        t
        z  dz  z   z  z   t              }t        j                  |j                         |j                         z
  j                         j                  k(  sJ y )Nr.   r   r/   )
r   rS   r;   rT   r(   rI  r   rJ  r   rK   )rZ   rK  rL  rM  rN  s        r>   test_TransferFunction_bilinearrT    s   	!QqSUA	&B"aJD$'$q'	$q'(91T!W9T!W;LaP%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqN66&//1.2I2I2KKUUW[[[[[r=   c                     t        dt        t        z  t        z   t              } t	        | t
              \  }}t        |d   t        |d   z  |d   z   t              }t        t
        t        z  t        t         t        t
        z  z   t        z  z   t              }t        j                  |j                         |j                         z
  j                         j                  k(  sJ y Nr.   r   )
r   rS   r;   rT   r)   rI  r   rJ  r   rK   )rZ   rK  rL  rO  rN  s        r>   "test_TransferFunction_forward_diffrW    s    	!QqSUA	&Bb!$JD$&tAw$q'	$q'0A1EO%ac1QqS!|+;Q?N66o..01H1H1JJTTVZZZZZr=   c                     t        dt        t        z  t        z   t              } t	        | t
              \  }}t        t        |d   z  |d   z   t        |d   z  |d   z   t              }t        t        t
        z  t        t        t
        z  z   z  t        t        t        t        t
        z  z   z  z
  t              }t        j                  |j                         |j                         z
  j                         j                  k(  sJ y rV  )
r   rS   r;   rT   r*   rI  r   rJ  r   rK   )rZ   rK  rL  rP  rN  s        r>   #test_TransferFunction_backward_diffrY    s    	!QqSUA	&Br1%JD$'$q'	$q'(91T!W9T!W;LaP%a!eQ1Woq1a!A#g;JN66&//1.2I2I2KKUUW[[[[[r=   c            	      <   t        dt        dz  dz   t              } t        t        dz  dt              }t        dt        t        z  t        z   t              t        t        dz   t        t        t        z        z  t        dz  dz   t              t        |ggg      t        |       ddt        dt        d      z        z  t        z  z   k(  sJ t        |      dk(  sJ t        t        fd	       t        t        fd
       t        t        fd       y )Nr   r3   r.   r/   iL      r   c                      t               S r{   r+   r   s   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    S(9 r=   c                      t               S r{   r^  r   s   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |C0 r=   c                  ,    t        t                     S r{   )r+   r#   tf_ms   r>   r?   z4test_TransferFunction_phase_margin.<locals>.<lambda>  s    |Jt,<= r=   )r   rI   r;   rS   rT   r   r   r"   r+   r   r   r   r-   r   rX   r[   r\   r]   r^   rb  s     @@@r>   "test_TransferFunction_phase_marginrd    s    
2q!tax
+C
1a4Q
'C
1ac!eQ
'C
AE3qu:-q!tax
;C!C5#-0Ds4$r(
+;';B'> >>>>!!!
 9:
:01
:=>r=   c                     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
       y )Nr/   r2   r.   r   ir8   i  c                      t               S r{   r,   r   s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    C(8 r=   c                      t               S r{   rg  r   s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {3/ r=   c                  ,    t        t                     S r{   )r,   r#   ra  s   r>   r?   z3test_TransferFunction_gain_margin.<locals>.<lambda>  s    {:d+;< r=   )r   r;   rS   rT   r   r   r"   r,   r   r   r	   r-   r   rX   rc  s     @@@r>   !test_TransferFunction_gain_marginrj    s    
1a4AaC!A#"!5q
9C
1a4!A#:>1a
0C
1ac!eQ
'C
AE3qu:-q!tax
;C!C5#-0Dss3qtCx=0R8888sr!!!
 89
:/0
:<=r=   c            
      .   t        ddgddgg      } t        ddg      }t        ddgg      }t        dg      }t        | |||      }|j                  t        ddgddgg      k(  sJ |j                  t        ddg      k(  sJ |j                  t        ddgg      k(  sJ |j
                  t        dg      k(  sJ |j                  t        ddgddgg      t        dgdgg      t        ddgg      t        dgg      fk(  sJ t        t        t        g      t        t        g      t        t        g      t        t        g            }|j                  t        t        gg      k(  sJ |j                  t        t        gg      k(  sJ |j                  t        t        gg      k(  sJ |j
                  t        t        gg      k(  sJ |j                  t        t        gg      t        t        gg      t        t        gg      t        t        gg      fk(  sJ t        t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg            }|j                  t        ddgddgg      k(  sJ |j                  t        ddgddgg      k(  sJ |j                  t        ddgddgg      k(  sJ |j
                  t        ddgddgg      k(  sJ |j                  t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg      fk(  sJ t        t        t        gt        t        gg      }t        t        t        gt        t        gg      }t        t        t         gt"        t$        gg      }	t        t&        t(        gt*        t,        gg      }
t        |||	|
      }|j                  t        t        t        gt        t        gg      k(  sJ |j                  t        t        t        gt        t        gg      k(  sJ |j                  t        t        t         gt"        t$        gg      k(  sJ |j
                  t        t&        t(        gt*        t,        gg      k(  sJ |j                  t        t        t        gt        t        gg      t        t        t        gt        t        gg      t        t        t         gt"        t$        gg      t        t&        t(        gt*        t,        gg      fk(  sJ t               }|j                  t        dgg      t        dgg      t        dgg      t        dgg      fk(  sJ t        ddgddgg      }t        ddg      }t        ||      }|j                  t        ddgddgg      k(  sJ |j                  t        ddg      k(  sJ |j                  t        ddgg      k(  sJ |j
                  t        dgg      k(  sJ |j                  t        ddgddgg      t        dgdgg      t        ddgg      t        dgg      fk(  sJ |j.                  dk(  sJ |j.                  dk(  sJ |j.                  dk(  sJ |j.                  dk(  sJ |j.                  dk(  sJ |j.                  dk(  sJ t1        t2        d	        t1        t2        d
        t1        t2        d        t1        t2        d        t1        t4        d        t1        t4        d        y )Nr   r.         r   r6   r/   TFc            	          t        t        t        t        dz   dz  g      t        t        dz   g      t        t        dz  dz
  g      t        dt        z  g            S r6  r&   r   r;   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>%  sI    z&!acAX*?1*0!Q$(*<facUm M r=   c            	          t        t        t        g      t        t        dz   t        dz  dz   g      t        t        dz  dz
  g      t        dt        z  g            S )Nr.   r3   r/   rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>'  sI    z&!+vqsAqD1Ho7N*0!Q$(*<facUm M r=   c            
          t        t        t        g      t        t        dz   g      t        t        dz  dz
  gt        dz  dt        z  z   dz   gg      t        dt        z  g            S r6  rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>)  s\    z&!+vqse}*01a4!8*q!taczA~>N1O*PRXZ[\]Z]Y^R_ a r=   c            
          t        t        t         t         gt        dgg      t        t        dz  dgdt        gg      t        dt        gg      t        dt        z  dt        z  gt        t        gg            S )Nr   r/   rn  r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>+  sh    z&A2r(QF1C*D061a1a&7I0J06Ax0@061ac
QF7K0L N r=   c                  H    t        t        dz  t        dz   dt        z  d      S r   )r&   r;   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>1  s    jAqsAaC; r=   c                  \    t        t        ddg      t        dg      t        dg      d      S )Nr/   r6   rw   r.   r   )r&   r   r<   r=   r>   r?   z.test_StateSpace_construction.<locals>.<lambda>2  s)    jC)962$<)/a9 r=   )r   r&   state_matrixinput_matrixoutput_matrixfeedforward_matrixrM   rN   rO   rP   a3rQ   rR   rW   b3c0r   c2c3r   r   r   d3is_SISOr-   r   rY   )A1B1C1D1ss1ss2ss3A4B4C4D4ss4ss5A6B6ss6s                   r>   test_StateSpace_constructionr    s"   	!Q!Q 	!B	AB	!Q	B	B
RR
$Cv1v1v&67777vq!f~---Ax 0000!!VQC[00088AA/0&1#s2DfqRSfXFVX^ab`c_dXeffff VRD\62$<B4L&",0C vtf~---vtf~---v...!!VbTF^33388vvvQSPTvWWWW VdBZ!Q01S!Hq!f-.QFQF+,QFQF+,.C
 vbzA7&;<<<<vQx!Q&89999AA'7 8888!!VaVaV,<%====88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88R!#R * +R!#R * +R!#R * +R!#R * +, , , , ,C88uvse}fqcUmVaSE]SSSS	!Q!Q 	!B	AB
R
Cv1v1v&677771v...Ax 0000!!VaSE]22288A!"A ( )!" % &Ax(u' ' ' ' ;;$;;$;;%;;%;;$;;$ : M N
: M N
: a b
: N O 9;<
9 9 :r=   c                  T  
 t        ddgddgg      } t        ddgddgg      }t        ddgddgg      }t        ddgdd	gg      }t        | |||      
t        g d
g dg dg      }t        ddgddgddgg      }t        g dg dg      }t        ddgddgg      }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*       y )+Nr1   r.   r/   r   r2   r   r3   rw   r   r1   r/   rw   r   r   r/   r2   r3   r   r1   r/   r   r.   r1   r3   r1   r.   r   r   r   r/   r   r   r   r   r   r   r   r1   r/   r   r   rw   r   r   r   r   r/   r2   r3   r/   r  r1   r/   r   r   r.   r.   r1   r3   r5   )r   r1   r/   r   r   )rw   r   r   r   r   )r/   r2   r3   r   r   )      r1   r.   )r   r/   r   r  r  )r   r   r   r/   r  )r3   r   r   r.   r  r   r6   r        @g      @r   c                       z   S r{   r<   )r  r  s   r>   r?   z%test_StateSpace_add.<locals>.<lambda>r  r   r=   c                       z  S r{   r<   )r  r  s   r>   r?   z%test_StateSpace_add.<locals>.<lambda>s  s    s3w r=   )r   r&   r-   r   )r  r  r  r  A2B2C2D2expected_addexpected_mulr  r  r  r  s             @@@@r>   test_StateSpace_addr  4  s!   	!QB 	!B	!QR!	"B	!R!Q 	!B	!QB 	!B
RR
$C	K	2	3B	!QR"a)	*B	I&	'B	"a!Q 	!B
RR
$C
,C
VQC[&!+vqc{FA3K
HC 	 	 	
a	R
a	R	a 	 	 	 		
A	
A 	!	 , 	 	  	

r


	r
c
 	 	 	 		R	a 	!	 * 9$$$s7l"""9
6A3%=&1#-!PVY\X]W^P_````s7j!uvugPVY\X]W^P_````s7j!w!PVY\X]W^P_````
:()
:'r=   c                     t        t        t        gt        t        gg      } t        t
        t        gt        t        gg      }t        t        t        gt        t        gt        t        gg      }t        t        t        gt        t        gt        t         gg      }t#        | |||      }| }t        ddgddgg      }t        ddg      }t        ddgg      }t        dg      }	t#        ||||	      }
|t#        t        t        t        gt        t        gg      t        t
        t        gt        t        gg      t        t         t         gt         t         gt         t         gg      t        t         t         gt         t         gt         t          gg            k(  sJ |
 t#        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            k(  sJ | |k(  sJ |
    |
k(  sJ y )Nrw   r.   )r   rN   rO   rP   rx  rQ   rR   rW   ry  rz  r   r{  r|  r   r   r   r}  r&   )ABCDSSSS_neg	state_mat	input_mat
output_matfeedforward_matsystems              r>   test_StateSpace_negationr  u  s    R2r(#$AR2r(#$AR2r(RH-.AR2r(RH-.A	Aq!Q	BSFQ!R)*I2wI"a	"JaSkO	9j/JF6B88% &B88% &RC":C":C":' ( RC":C":C":' (		)
) 
) 
) 76B88% &Q4+&Ar7)$B4&>		## # # 7b==z]v%%%r=   c                  b   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            }| j	                  t        di      t        t        dgg      t        dgg      t        dgg      t        dgg            k(  sJ |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 | 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 |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            }|j	                  t        dt        dt        dt        d	t        di      |k(  sJ |j	                  t        dt        dt        dt        d	t        di      j                         |k(  sJ |j                         |k(  sJ y )Nr.   r/   r3   r2   $      r   r   r1   r   r   r   r   r   )r&   r   r;   rI   r   r   rS   rT   rO   rN   rW   rR   rQ   r   )r  r  r   r   Gexpectexpect_s          r>   !test_SymPy_substitution_functionsr    s   
VQC[&1q51*"61qz8JFTUVWTWSXM
ZC
VQUG_fq1uq1uo->&?APQSTPTAVX^`ade`e_fXg
hC88QqE?j!vQSPTvX^ac`d_eXfgggg88QqE?j!a%	):FQC5M6TUXY[\X\T\S]R^K_agjknojoiphqarssss <<16A3%=&AEA:,"8&1a4!8*:NPVYZ[\Y\X]W^P_`a a a<<1a
#6AE7)$fAA.?-@&A6QPQTETUWXTXL>JZC[]cfgjkfkeldm]nop p p 
AB	AqD2a4"	B62$<.A1q	{+Va1fqslQ6F5G4H-I6TUSVRW=Z`cdbeafZghF#a%#+0&3q!t8c!e;Kc;Q:R9S2TV\_`^a]bVceknomplqersG662q"aQAr156&@@@662q"aQAr156<<>'III<<>W$$$r=   c            	         t        ddgddgg      } t        ddg      }t        ddgg      }t        dg      }t        | |||      }t        t        t        t        gt        t
        gg      t        t        gt        gg      t        t        t        gg            }|j                  t              }| j                  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        |
|||      }|j                  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 |j                  t              t        t         t        t        z  t
        t        z  z
  t        t        z  z   z  t        t         t        z  t        t        z  z   t        t        z  z   z  z
  t         t
        z  t        t        z  z   t        t        z  z   t
        t        z  z   t        dz  z
  t              ggk(  sJ t        j                  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 |j                  t              d   d   t        k(  sJ t%        t&        d#        y )$Nr   rw   r3   r/   r2   r.   r   )r  r  r   ;   r5   r7   )rl  r   r3   )r.   r   r.   )r/   r.   r.   )r6   r   r.   )r   r.   r/   )r/   r/   r3   r   r.   r   )r   r/   r.   )r.   r   r/   )r/   r/   r   )r.   r.   r.   )r3   r/   r.   r   r   g      %@r  r6   g      @g      @g      @r   r   c                      t        t        t        dz  z  t        dz  z   t        t        z  z
  t        z   t        t        dz  z
  t              j                  t              S r   )r   rT   r;   rI   rS   rv  r&   r<   r=   r>   r?   z!test_conversion.<locals>.<lambda>  sD    /!Q$A!0Ca0GQPQTSTU]]^hi r=   )r   r&   rN   rO   rP   rx  rR   rW   r   r{  rv  r   r;   rK   rL   re  r   r&  r-   rX   )r  r  r  r  r   H3tm1tm2r[   r\   r  r  r  r  r   tm3r  s                    r>   test_conversionr    s?   	"bAr7#	$B	AB	!Q	B	B	BB	#B	FRHr2h/0frdRD\6JPVY[]_X`WaPb	cB
**%
&C3--(
)C
a&)C
a&)C"2a4"9adQqSj1na@@@@77swwh77cgg 
	95	6B	i3	4B	Iy1	2B	Iy1	2B	BB	#B
**%
&C q6!9(QTC1H)<tAv)E)KSQRTUQUXX[\]_`\`X`M`cfghchMhknMnpqrrrrq6!9(QTC1H)<tAv)E)KSQRTUQUXX[\]_`\`X`M`cfghchMhknMnpqrrrrq6!9(QTCE)9C)?QTCPQSTPTHATWZ[\W\A\_bAbdeffff::&'-=rc2b52b5=SUVWSWCW>X[]`b_bce_ehjkmhm_mprstpt_t[u>u?Ac"fr!tmbQSe>SVXYZVZ>Z]^`a]a>acd.f -g ,h h h h 
Z	 B6Q/UFBrE$J/1 2A33  !Aq6(#A3%=	"" " " ::&'*1-444 :ijr=   c                  d
   t        ddgddgg      } t        dgdgg      }t        ddgg      }t        dg      }t        dgdgg      }t        d      }t        | |||      }|j                         t        dgg      k(  sJ |j                  |      t        d	t	        |       z  d
t	        d|z        z  z
  gg      k(  sJ t        ddgddgg      }t        dd      }t        ddg      }	t        ||      }
|
j                  |	      t        dt	        d|z        z  gdt	        |       z  dt	        d|z        z  z
  gg      k(  sJ t        ddgddgg      }t        dgdgg      }t        ddgg      }t        dg      }t        dg      }t        ||||      }|j                  ||      }t        |j                         j                         j                         d         t        ddt	        d|z  dz        z  t        t        d      |z  dz        z  z   dt	        d|z  dz        z  t        t        d      |z  dz        z  z
        k(  sJ t        ddgddgg      }t        dgdgg      }t        ddgg      }t        dt        |      z  gg      }t        |||      }t        |j                  ||      d   j                         j                         j                               }|t        dt        |      z  dt	        d|z  dz        z  t        t        d      |z  dz        z  t        |      z  z   dt	        d|z  dz        z  t        t        d      |z  dz        z  t        |      z  z
        k(  sJ t        d      \  }}}t        ddgddgg      }t        dgd|z  gg      }t        ddgg      }t        |gdgg      }t        t	        | |z        gg      }t        |||      } | j                  |||      j                         }!|!d   j                  d   d   ||||z  z  z   d|dz  |z  z  z
  t	        | |z        |dz  |z  z  z   k(  sJ t        d      \
  }"}#}$}%}&}'}(})}*}+t        |"|#g|$|%gg      },t        |&|'g      }-t        |(|)gg      }.t        |*|+g      }/t        |,|-|.      }0|0j                  |/      d   }1|1j                  |"df|#df|$df|%df|&df|'df|(df|)df|*df|+dfg
      }1|1d	t	        |       z  d
t	        d|z        z  z
  k(  sJ y )Nr   r.   r   r   rw   r/   r   )initial_conditionsr7   r4   r3   )r  r  r2   r  r1   r   )input_vectorr0  r   gY8b4@r   r8   )r0  r  zm a x_0)r  r  r0  z+a_11 a_12 a_21 a_22 b_1 b_2 c_1 c_2 i_1 i_2)r   r   r&   dsolver   r   r   r   r   r   r   r   r   r   rM   r   )2r  r  r  r  I1r   r  r  r  I2r  A3B3C3D3U3r  opr  r  r  U4r  op4r  rS   x0A5B5C5I5U5r  op5a11a12a21a22rR   rW   r   r{  i1i2r  r  C6I6r  expr6s2                                                     r>   test_StateSpace_dsolver    s    
!Q"b"	#B	!qc
	B	!R		B	B	!qc
	BA
RR
$C ::<6A3%=(((:::,3r7Qs2a4y[9P8Q7R0SSSS	"a1b'"	#B	QqB	AB
rR
 C:::,3r!t9#qb'	TUVYZ\]^Z^V_T_H_G`7a0bbbb	"a2r(#	$B	!qc
	B	!Q	B	B	B
RR
$C		+Br{{}##%++-a01S?OPSTVWXTXYZTZP[?[\_`def`ghi`ijk`k\l?l9l.1#bd1f+oc$q'!)A+>N.N:O 6P P P P 
"a2r(#	$B	!qc
	B	!Q	B	"Yq\/"#	$B
RR
 C
cjjQRj03<<>EEGMMO
PC#c)A,&)9#bd1f+)Ec$q'RS)TU+FV)VW`abWc)cc.1#bd1f+oc$q'!)A+>N.NyYZ|.[\ ] ] ] ] y!HAq"	!Q!Q 	!B	!q1ug	B	!Q	B	"s	B	#qb1f+	 B
RR
 C
***
C
L
L
NCq6;;q>!Q!Wq!Q$q&z 9C1Iq!tAv<N NNNN189f1g.Cc3BBB	#sc3Z(	)B	R	B	"b
	B	R	B
RR
 CJJ"J-a0EJJa3(S"IRy2q'BPQ7UWYZT[^`bd]ehjlmgnqsuvpwxyEAc1"gI#bd)++++r=   c            	      4   t        ddgddgg      } t        ddg      }t        ddgg      }t        dg      }t        | |||      }t        t        ddgddgg      t        ddgddgg      t        ddgddgg            }t        t        ddgddgg      t        ddgddgg            }t        t        t        t        gt        t
        gg      t        t        gt        gg      t        t        t        gg            }|j                         d	k(  sJ |j                         d
k(  sJ |j                         t        ddgddgg      k(  sJ |j                         t        ddgddgddgddgg      k(  sJ |j                         t        dgdgg      t        dgdgg      gk(  sJ |j                         t        dgdgdgdgg      gk(  sJ |j                         j                  t        dft        dft        dft
        dft        dft        dfg      }|t        ddgddgg      k(  sJ |j                         d	k(  sJ |j                         d
k(  sJ |j                         t        ddgddgg      k(  sJ |j                         t        g dg dg      k(  sJ |j!                         t        dgdgg      t        dgdgg      gk(  sJ |j!                         t        dgdgg      gk(  sJ |j!                         t        t        gt        gg      t        t        t        z  t        t        z  z   gt        t        z  t
        t        z  z   gg      gk(  sJ |j                         j                  t        dft        dft        dft
        dft        dft        dfg      }	|	t        ddgddgg      k(  sJ t        ddgddgg      }
t        dgdgg      }t        ddgg      }t        dgg      }t        |
|||      }t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            }|j#                  |      }|j#                  |      }|j$                  |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 |j0                  t        ddgddgg      k(  sJ |j$                  |j$                  |j$                  z   k(  sJ |j&                  |j&                  |j&                  z   k(  sJ |j(                  |j(                  |j(                  z   k(  sJ |j*                  t        t        t        ddgt        t
        ddgg dg dg      k(  sJ |j,                  t        t        dgt        dgddgddgg      k(  sJ |j.                  t        t        t        ddgg dg      k(  sJ |j0                  t        ddgddgg      k(  sJ y )Nrl  r   r.   r   r6   r1   r/   rw   TFr3   r   r  r   g      )r.   rw   r/   r   r   r.   r   r   r.   r   r   r   r   r   r.   r   r   r   r   r.   )r   r&   rN   rO   rP   rx  rR   rW   r   r{  is_observableobservability_matrixobservable_subspacer   is_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesri  rh  rt  ru  rv  rw  )A_matB_matC_matD_matSS1SS2SS3SS4QoQcr  r  r  r  r  r  r  r  s                     r>   test_StateSpace_functionsr    s    T2JA'(EC8EQF8EA3KE
UE5%
0C
VaVaW-.v1v1v6F/GQSUVPWZ[]_Y`OaHb
cC
VaVaW-.v2wB6H/I
JC
Vb"XBx016B4",3GRTVXQYPZI[
\C $&&&%'''##%!Q!Q0@)AAAA##%"qQ8q"XPRUVx0X)YYYY""$!qc
);VaS1#J=O(PPPP""$"tqTB40H)I(JJJJ		!	!	#	(	(2q'B8b!Wr2hQSUVPWZ\^_Y`)a	bB!Q!R)****  D((( E)))%%'FS%LQ#,3O,PPPP%%'6>>2R+SSSS$$&6C5Q%.+A6E7WZT[J\C]*^^^^$$&6A3*+=*>>>>$$&6+-$+-$30 ,128+-b52b5=/+-b52b5=/:; 3<+= = = =
 
	#	#	%	*	*RGb!Wr2hRSUWXRY\^`a[b+c	dB!Q!R)**** 
!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
VaVaV,-vsQCj/A6Aq6(CSU[^_]`\aUb
cC
**S/C
**S/C>>S^^cnn<<<<>>S^^cnn<<<<??coo????v|\<Q]&^____v1v1v1v1v&FGGGGl'C DDDD!!VaVaV,<%==== >>S^^cnn<<<<>>S^^cnn<<<<??coo????vB1~B1~|Ua&bccccvAwQ!Q!Q&HIIIIRA'E FFFF!!VaVaV,<%====r=   c                     t        ddgddgg      } t        dgdgg      }t        ddgg      }t        dgg      }t        ddgddgg      }t        dgdgg      }t        ddgg      }t        dgg      }t        | |||      }t        ||||      }	t        t        t        dz   t              }
t	        ||	      }|t	        t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg                  k(  sJ |j                         t        t        g dg dg dg dg      t        dgdgdgdgg      t        g dg      t        dgg            k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  t              t        t        dz  t        dz  t        dz  z
  t        z
  dz   t              k(  sJ t	        |      }t	        ||	      }|j                         |j                         k(  sJ t	        |
|      }|t	        t        t        t        dz   t              t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg                  k(  sJ |j                         t        t        g d	g d
g dg      t        dgdgdgg      t        g d
g      t        dgg            k(  sJ |j                  t              t        t        dz  t        dz  t        dz  z   t        z
  dz
  t              k(  sJ t        ddgddgg      }t        ddgddgg      }t        ddgddgg      }t        ddgddgg      }t        g dg dg dg      }t        ddgddgddgg      }t        g dg dg      }t        ddgddgg      }t        ||||      }t        ||||      }t        ||      }|t        t        t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg            t        t        g dg dg dg      t        ddgddgddgg      t        g dg dg      t        ddgddgg                  k(  sJ |j                         t        t        g dg dg dg dg dg      t        ddgddgddgddgddgg      t        g dg d g      t        dd!gddgg            k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t        |      }t        ||      }|j                         |j                         k(  sJ |j                  t              |j                  t              k(  sJ t        dt        t              }t        dt        dz   t              }t        t        t        dz   t              }t        |
|g||gg      }t        ||      }|t        t        t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg            t        t        t        t        dz   t              t        dt        t              ft        dt        dz   t              t        t        t        dz   t              ff            k(  sJ y )"Nr   r.   r  r  r   r.   r.   r   r  r/   r3   )rw   r   r   )r   r   r.   )rw   r.   r   r1   r   r2   r  rw   r  r  r  r   r  r  r  r  )r/   r   r   r1   r/   )r  r4   rw   r   r   )r  r4   r/   r2   r3   r8   r   )r  r   r1   r/   r   r  )r   r&   r   r;   r   r   ri  rh  rv  r#   r"   ) rO   rR   r   r   rP   rW   r{  r   r  r  r[   r5  ser2ser3ser_tfrx  ry  r|  r}  a4b4c4d4r  r  ser4ser5ser6r\   r]   r^   tfms                                    r>   test_StateSpace_seriesr  ]  s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$C
1ac1
%C#sD6*VFF-$ &%&,CC.! '"#)Aq6(#3VaSE]	D FPPVFFX$ Q%&,CC.! '"#)Aq6(#3VaSE]	FD	E E E E 99;*"((((	$* +
 #CCCC	$! "
 #L>2"QC5M+ + + + ??aq   <<()-=adAqD1a4KRSOVWDWYZ-[[[[#;D$D99;$))+%%% CFV,QAq9:fFFN$ G%&,CC.! '"#)Aq6(#3VaSE]	<D E E E E
 ;;=J"'&&$( ) #CCC$! " #I;/"QC5M
+ 
+ 
+ 
+ >>*+/?1adQPQTkTUoXYFY[\/]]]] 
!Q!R!	"B	!Q"b"	#B	!R1a&!	"B	!Q!R!	"B	[)4	5B	!Q"bB7+	,B	Y'	(B	"a1a&!	"B
RR
$C
RR
$Cc3D:jGG1 *%!HH'   &GG( !%GG'   !+63! ," $*!HH!H+ $ !'(  !!"(GG* #
!       & 99;*++,,) + , ab	b	r
R " # *' ) * RB ! "!# # # #& ??cnn,,,s...c?DdC D99;$))+%%%<<./4<<@V3WWWW
1a
#C
1ac1
%C
1ac1
%C
 3*sCj!9
:Cc3D:jQB1! *"#)aR+" $#$*BQ,! %"#)QB+! $"# %;)!QUA68HAq8QR)!QUA68HAPQEST8UV<X %Y
Z 
Z 
Z 
Zr=   c                     t        ddgddgg      } t        dgdgg      }t        ddgg      }t        dgg      }t        ddgddgg      }t        dgdgg      }t        ddgg      }t        dgg      }t        | |||      }t        ||||      }	t        ||	      }
|
t        t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg                  k(  sJ |
j                         t        t        g dg dg dg dg      t        dgdgdgdgg      t        g dg      t        dgg            k(  sJ |
j	                  t
              t        t        t        dz   z  t        dz  dz
  t              k(  sJ t        t        t        dz   t              }t        ||      }|t        t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            t        t        t        dz   t                    k(  sJ |j                         t        t        g d	g d
g dg      t        dgdgdgg      t        g dg      t        dgg            k(  sJ |j	                  t
              t        t        dz  t        dz  dz
  t              k(  sJ t        ddgddgg      }t        ddgddgg      }t        ddgddgg      }t        ddgddgg      }t        g dg dg dg      }t        ddgddgddgg      }t        g dg dg      }t        ddgddgg      }t        ||||      }t        ||||      }t        ||      }|t        t        t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg            t        t        g dg dg dg      t        ddgddgddgg      t        g dg dg      t        ddgddgg                  k(  sJ |j                         t        t        g dg dg dg dg dg      t        ddgddgddgddgddgg      t        g dg dg      t        dd gddgg            k(  sJ t        dt        t              }t        dt        dz   t              }t        t        t        dz   t              }t        ||g||gg      }t        ||      }|t        t        t        t        t        dz   t              t        dt        t              ft        dt        dz   t              t        t        t        dz   t              ff      t        t        ddgddgg      t        ddgddgg      t        ddgddgg      t        ddgddgg                  k(  sJ y )!Nr   r.   r  r  r  r  r  r/   r  )r.   r   r   )r   r   rw   r   r.   rw   r1   r   r2   r  r3   rw   r  r  r  r   r  r  r  r  r  r  r  r  r  r5   )	r   r&   r    r   rv  r   r;   r$   r"   )rO   rR   r   r   rP   rW   r{  r   r  r  r   r[   r   rx  ry  r|  r}  r
  r  r  r  r  r  r   r\   r]   r^   r  r   s                                r>   test_StateSpace_parallelr    s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$C	#s	B*VaVaV,<%=vsQCj?QSY\]_`[aZbSceknomplqers$VaVQFO%<fqc1#Y>OQWZ[]^Y_X`Qacilmknjocpqs s s s779
6$$$$	+& $'
 	  
 ~.u' ' ' ' ::&'+;Aq1uIq!taxQR+SSSS 1ac1
%C	#s	B*VAA-  &!"(* #%1vh/!	@ BRRSUVYZUZ\]A^	` ` ` `
 779
""" $ %    
|,u
' 
' 
' 
' ::&'+;AqD!Q$(A+NNNN 
!Q!R!	"B	!Q"b"	#B	!R1a&!	"B	!Q!R!	"B	[)4	5B	!Q"bB7+	,B	Y'	(B	"a1a&!	"B
RR
$C
RR
$C	c3	BjQB1! *"#)aR+" $#$*BQ,! %"#)QB+! $"# %/v###7% 0& (.aRa/" (# %+"",$ %%&,QQ.! '"
%#$ $ $ $& 779
6'(()'+) $* ARARQ ! " )' ) * AA   !" " " "( 1a
#C
1a!eQ
'C
1a!eQ
'C
 3*sCj!9
:C	c3	B4)!QUA68HAq8QR)!QUA68HAPQEST8UV6X Y #6AB+! $"#)AR+" $#$*BA,  %!"(AB*! #"#$ $ $ $r=   c                  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        ddgddgg      }t        dgdgg      }t        ddgg      }t        dgg      }t        | |||      }t        ||||      }	t        ||	      }
|
t        t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            d      k(  sJ |
j                         t        t        g dg dg dg dg      t        dgdgdgdgg      t        g dg      t        dgg            k(  sJ |
j	                  t
              t        t        t        dz
  z  t        dz  t        z
  dz   t              k(  sJ t        ||	d      }|j                         t        t        g dg d	g dg dg      t        dgdgdgdgg      t        g dg      t        dgg            k(  sJ |j	                  t
              t        t        t        dz
  z  t        dz  d
t        d
z  z  z
  t        z
  dz   t              k(  sJ t        t        t        dz   t              }t        ||      }|t        t        t        ddgddgg      t        dgdgg      t        ddgg      t        dgg            t        t        t        dz   t              d      k(  sJ |j                         t        t        g dg dg dg      t        dgdgdgg      t        g dg      t        dgg            k(  sJ t        ddgd
dgg      }t        dd
gddgg      }t        d
dgddgg      }t        dd
gddgg      }t        g dg dg dg      }t        ddgddgddgg      }t        g dg dg      }t        ddgddgg      }t        ||||      }t        ||||      }t        ||      }|t        t        t        ddgd
dgg      t        dd
gddgg      t        d
dgddgg      t        dd
gddgg            t        t        g dg dg dg      t        ddgddgddgg      t        g dg dg      t        ddgddgg            d      k(  sJ |j                         t        t        t        d      t        dd      t        dd      t        dd
      t        d      gt        dd
      t        dd      t        dd      t        dd      t        d      gt        d      t        dd      t        d d      t        d!d
      t        d"      gt        d#d
      t        d$d      t        d%d      t        d&d      t        d'      gt        dd
      t        d(d      t        d)d      t        d*d      t        d+      gg      t        t        dd      t        d,d      gt        dd      t        d-d      gt        dd      t        d.d      gt        dd      t        d/d      gt        dd      t        d0d      gg      t        t        d      t        dd      t        d1d      t        d-d
      t        d#      gt        dd
      t        d2d      t        d2d      t        d"d      t        d      gg      t        t        dd      t        d3d      gt        dd      t        dd      gg            k(  sJ t        ||d      }|j                         t        t        t        dd      t        d4d      t        d      t        d5      t        d6d      gt        d7d      t        d8d9      t        dd
      t        d      t        d'd      gt        d:d      t        d;d      t        d      t        d<      t        d=d      gt        d>d      t        d?d9      t        d@d
      t        d+      t        d&d      gt        d
d      t        dAd9      t        dd
      t        dB      t        dCd      gg      t        t        dDd      t        dEd      gt        d#d9      t        dFd9      gt        dDd      t        dGd      gt        dHd9      t        dId9      gt        dd9      t        dJd9      gg      t        t        dd      t        d3d      t        d      t        d      t        dd      gt        dd      t        dFd9      t        dd
      t        d      t        dKd      gg      t        t        dd      t        d#d      gt        dd9      t        dLd9      gg            k(  sJ y )MNr   r.   rw   r  )r.   rw   rw   r   r  r  r3   )r.   r.   r.   r   r/   r  )r.   rw   r.   r  r1   r   r2   r  r  r  r  r   r  r  r  ir8   ir7   r4   '   iiiir     I      r  /      U   r     i   iir   ir\  >   r  i    iyr   r  )   r  ir   ir   ir   Q   r5   ir   iiW   r   r  i)	r   r&   r!   r   rv  r   r;   r%   r   )rO   rR   r   r   rP   rW   r{  r   r  r  r  r  r[   r  rx  ry  r|  r}  r
  r  r  r  r  r  fd4fd5s                             r>   test_StateSpace_feedbackr'  `  s
   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$C
3
C (:fq!fq!f-=&>aSz@RTZ]^`a\b[cTdflopnqmrfst$VaVQFO%<fqc1#Y>OQWZ[]^Y_X`Qacilmknjocpqsuw w w w88:F****	,, %- /5CCCC	6! /" $*)N$,-3SE.#
$ 
$ 
$ 
$ ;;'(,<QAY1qSTVW,XXXX 3Q
C88:F((((	,* %+ -3CCCC	4! -" $*)N$,-3SE.#
$ 
$ 
$ 
$ ;;'(,<QAY1qQRTUQUvXYHY\]H]_`,aaaa 1ac1
%C
3
C(:fFF.$ '%&,CC.! '"#)Aq6(#3VaSE]	D
 -QAq92? ? ? ? 88:V'''-) &* ,2CCC3! ," $*&K$)*0SE+#$ $ $ $ 
!Q!R!	"B	!Q"b"	#B	!R1a&!	"B	!Q!R!	"B	[)4	5B	!Q"bB7+	,B	Y'	(B	"a1a&!	"B
RR
$C
RR
$C sC
 C,z&GG2% +&'-!HH/& ('(.GG0% )&'-GG/% (& ' )36''';) 4* ,2!HH!H3& ,' )/&&0( ))*0GG2% +&
)' )+%, , , ,& 88:F%a[(2q/8C;KXVY[\M]_ghk_lm%a^Xc1-=x1~xXZ\]`hij`kl%a[(3*:HS!<LhWZ\]N^`hil`mn%b!_hsA.>QQYZ]_`Qacklncop%b!_hr1oxAPXY[]^P_aijlamn,p %q
 sy%b!_hr1o>%a^Xc1-=>%a^Xb!_=%a^Xc1-=>%a^Xc1-=>z@ sA
 CI%a[(3*:HROXVY[\M]_ghj_kl%a^Xc1-=xQ?OQYZ]_`QacklncopJr Cstz%b!_hr1o>%a^Xa^<|> u?@ @ @ @" sC
#C88:F%a^Xb!_hqk8TV<YabeghYij%b!_htR.@(2q/S[\]S^`hikmn`op%c1-xAhWZm]efikl]mn%b!_htR.@(2q/S[\^S_aijmopaqr%a^Xc2->QQYZ\Q]_ghjlm_no,q %r
 tz%a^Xc1-=>%b"-xB/?@%a^Xc1-=>%c2.R0@A%c2.R0@A{C tD
 FL%b!_hr1ox{HUWLZbcfhiZjk%b!_hr2.>QQYZ\Q]_ghkmn_opMr Fstz%a^Xb!_=%a_hsB.?@|B uCD D D Dr=   N)sympy.core.addr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r   r   r	   sympy.core.powerr
   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   r   'sympy.functions.special.delta_functionsr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   sympy.physics.control.ltir   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   r   r   r   sympy.physics.controlr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   sympy.testing.pytestr-   rS   r   rT   r   r;   rU   rV   rI   r   r   r&  r   rI  rN   rO   rP   rx  rQ   rR   rW   ry  rz  r   r{  r|  r   r   r   r}  re  rd  rc  ru   r   r  r"  r'  r*  r-  r7  rQ  rp  rz  r  r  r  r  r  r  r  r  r  r  r'  r-  r;  rG  rR  rT  rW  rY  rd  rj  r  r  r  r  r  r  r  r  r  r'  r<   r=   r>   <module>r<     s    (  4 4   " % = = 9 9 $ = ( + , ' > > =W W W W W (.5 7 / +1aAq!Q3b!AH J B >BBBBBBBBq!Q$41,r1u4a8q!Qr!taxA1-^9B^8B1D(6V		&	(FV(AV)@X;|@iF+C\2EjEP1Wh33l05f#L5@$&N>D%*P!>FfJP$WL	\	[	\?> k:X?(B &D%0,k^;,|>>BHZVu$pADr=   