+
    ik                       ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t# ^ RI$H%t% ^ RI&H't'H(t(H)t) ^ RIH*t*H+t+ ^ RI,H-t-H.t.H/t/H0t0H1t1H2t2H3t3H4t4H5t5H6t6H7t7H8t8H9t9H:t:H;t;H<t< ^ RI=H>t> ]! R4      w  t?t@tAtBtCtDtEtFtGtHtItJtK]! R4      w  tLtMtNtOtPtQtRtStTtUtVtWtXtYtZt[]-! ^]C^,          ^]I,          ]J,          ]C,          ,           ]J^,          ,           ]C4      t\]-! ]G^]C4      t]]-! ]N]F,          ]C,
          ]N]C,          ]F,           ]C4      t^R t_R t`R taR tbR tcR tdR teR tfR  tgR! thR" tiR# tjR$ tkR% tlR& tmR' tnR( toR) tpR* tqR+ trR, tsR- ttR. tuR/ tvR0 twR1 txR2 tyR3 tzR4 t{R5 t|R6 t}R7 t~R8 tR9 tR: tR; tR< tR= tR> tR? tR@ tRA# )B    )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:4c                     \        \        ^,           \        ^,          \        ,           ^,           \        4      p V P                  \        ^,           8X  g   Q hV P                  \        ^,          \        ,           ^,           8X  g   Q hV P                  \        ^,           \        ^,          \        ,           ^,           \        38X  g   Q h\        \        ^,           \        ^,
          \        4      pVP                  \        ^,           8X  g   Q hVP                  \        ^,
          8X  g   Q hVP                  \        ^,           \        ^,
          \        38X  g   Q h\        \
        ^,           \
        ^,          ^	,
          \
        4      pVP                  \
        ^,           8X  g   Q hVP                  \
        ^,          ^	,
          8X  g   Q hVP                  \
        ^,           \
        ^,          ^	,
          \
        38X  g   Q h\        \
        ^,          ^\
        ^,          ,          ,           ^,           \
        ^,          ^\
        ,          ,           ^,           \
        4      pVP                  \
        ^,          ^\
        ^,          ,          ,           ^,           \
        ^,          ^\
        ,          ,           ^,           \
        38X  g   Q h\        \        ^,           \        ^,
          ,          \        ^,
          \        ^,           ,          \        4      pVP                  \        ^,
          \        ^,           ,          8X  g   Q hVP                  \        ^,           \        ^,
          ,          \        ^,
          \        ^,           ,          \        38X  g   Q h\        \
        ^,           \
        ^,           \
        4      pVP                  \
        ^,           \
        ^,           \
        38X  g   Q h\        \        ^,
          ^\
        ,
          \        4      pVP                  \        ^,
          ^\
        ,
          \        38X  g   Q h\        \        ^,
          \        ^,
          \        4      pVP                  \        ^,
          \        ^,
          \        38X  g   Q h\        ^^\        4      pVP                  ^8X  g   Q hVP                  ^8X  g   Q hVP                  ^^\        38X  g   Q h\        R^\        4      p	V	P                  R8X  g   Q hV	P                  ^8X  g   Q hV	P                  R^\        38X  g   Q h\        ^\        ^,          ,          ^\
        ,          ,           ^\        ,          ,           ^\
        ^,          ,          ^\        ,          ,           \        4      p
\        ^\        ^,          ,          ^\
        ,          ,           ^\        ,          ,           ^\
        ^,          ,          ^\        ,          ,           \
        4      pW8X  d   Q h\        \        \        ,          \        \        ^,          ,          ,           \        \        ^,          ,          ,           \        \
        ,          \        \        ,          ,
          \        4      p\        \        \        ,          \        \        ^,          ,          ,           \        \        ^,          ,          ,           \        \
        ,          \        \        ,          ,
          \        4      pW8X  g   Q hV) ) Tu;8X  d   V) ) ) ) 8X  g   Q h Q h\        \        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          ,           \        ,           \        \
        ,          \        \
        ^,          ,          ,           \        \        ,          ,           \        4      pVP                  \        \        ^,          ,          \        \        ^,          ,          ,           \        ,           \        \        ,          ,           \        \
        ,          \        \
        ^,          ,          ,           \        \        ,          ,           \        38X  g   Q h\        \
        ^,          \        ,           \        \        ^,          ,          \        \        ,          ,           \        ,           \
        4      p\        \
        ^,          \        ,           \        \        ^,          ,          \        \        ,          ,           \        ,           \
        4      pVP                  \        \
        ^,          ,           \        \        \        ,          ,           \        \        ^,          ,          ,           \
        38X  g   Q hVV8X  g   Q h\        \        \        ,          \        ,           \        \        ^,          ,          \        \        ,          ,           \        ,           \        4      pVP                  \        \        \        ,          ,           8X  g   Q hVP                  \        \        \        ,          ,           \        \        ^,          ,          ,           8X  g   Q hVP                  \        \        \        ,          ,           \        \        \        ,          ,           \        \        ^,          ,          ,           \        38X  g   Q h\        ^ \
        ^,          \
        ,
          ^,           \
        4      pVP                  ^ \
        ^,          \
        ,
          ^,           \
        38X  g   Q h\        ^ ^\        4      pVP                  ^ ^\        38X  g   Q h\        \        \        R,          ,          \        \        R,          ,          ,           \        ,
          \        \
        R,          ,          \        4      pVP                  \        \        R,          ,          \        ,
          \        \        R,          ,          ,           \        \
        R,          ,          \        38X  g   Q h\        \        ^,          \
        R,          ,          \        \        R,          ,          ,           \        \        ,          \
        ,
          \
        4      pVP                  \        \        R,          ,          \        ^,          \
        R,          ,          ,           \        \        ,          \
        ,
          \
        38X  g   Q h\!        R4      w  pppp\        VV\        ,          ,           V\        ,          ,           \        ^,          ^V,          \        ,          ,           V^,          ,           \        4      pVP                  V\        ,          V\        ,          ,           V,           8X  g   Q hVP                  V\        ,          V\        ,          ,           V,           V^,          ^V,          \        ,          ,           \        ^,          ,           \        38X  g   Q h\#        \$        R 4       \#        \$        R 4       \#        \$        R 4       \#        \&        R 4       \#        \&        R	 4       \#        \&        R
 4       \#        \&        R 4       R# )         ?g333333?g      ?zomega_o, k_p, k_o, k_ic                  $    \        ^^ \        4      #    r   s     b/var/www/html/photoedit/myenv/lib/python3.14/site-packages/sympy/physics/control/tests/test_lti.py<lambda>4test_TransferFunction_construction.<locals>.<lambda>x       /1a8r7   c                  ,    \        \        ^ \        4      # r   r4   r6   r7   r8   r9   r:   y   s    /1a8r7   c                  $    \        ^ ^ \        4      # r=   r4   r6   r7   r8   r9   r:   z   r;   r7   c                  B    \        \        . RO4      \        \        4      # r/   r/         )r   r   r5   r6   r7   r8   r9   r:   |   s    .vi/@!QGr7   c                  z    \        \        ^,          ^\        ,          ,           ^,
          \        ^,           ^4      # rB   r4   r6   r7   r8   r9   r:   ~   s"    .q!taczA~q1uaHr7   c                  H    \        \        ^,           ^\        ,
          ^4      # r/   )r   pr6   r7   r8   r9   r:      s    .q1ua!eQ?r7   c                      \        ^^^4      # rC   )r   r6   r7   r8   r9   r:      s    .q!Q7r7   Ngffffff!g)r   r5   numdenargsrH   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                              r8   "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z>BqD2ad7NR1W4bdRTk1EDBqD2ad7NR1W4bdRTk1ED<<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8r7   c                  x[  a?a@aAaBaCaDaEaF \        ^ \        \        RRR7      RR7      p \        ^ ,          o@\        \        ^,          ,          ^\        ,          ,           \        ^,           ^,          ,          oA^oB^^\        ,          ,           ^^\        ,          ,           ,          ^	^\        ,          ,           ^^\        ^,          ,          ,           ,          ,          p^	\        ^,          ,          ^\        ^,          ,          ,           ^,           \        ^,           \        ^	,           ,          ,          p\	        \        ^,           \        ^,          ^,           \        4      p\        \        ) \        ,          4      pWCP                  4       ,          p\        P                  ! V\        4      p\	        \        ^,           \        ^,          ^,           \        \        \        ,          4      ,          \        4      p\        ^^\        ,          \        ^,          ^,           ,          RR7      p\        P                  ! V 4      \	        ^ \        \        4      8X  g   Q h\        \        V@3R l4       \        \        VA3R l4       \        P                  ! SA\        4      \	        \        \        ^,          ,          ^\        ,          ,           \        ^,           ^,          \        4      8X  g   Q h\        P                  ! SA\        4      \	        \        \        ^,          ,          ^\        ,          ,           \        ^,           ^,          \        4      8X  g   Q h\        \        VB3R l4       \        P                  ! SB\        4      \	        ^^\        4      8X  g   Q h\        P                  ! V\        4      \	        ^^\        ,          ,           ^^\        ,          ,           ,          ^	^\        ,          ,           ^^\        ^,          ,          ,           ,          \        4      8X  g   Q h\        P                  ! V\        4      \	        ^	\        ^,          ,          ^\        ^,          ,          ,           ^,           \        ^,           \        ^	,           ,          \        4      8X  g   Q hWg8X  g   Q h\        P                  ! V\        4      \	        ^\        ^,          ,          ^\        ,          ,           ^,           \        ^,          ^,           \        4      8X  g   Q h\        P                  ! ^^.. R O\        4      p	\        ^,          ^\        ,          .p
\        ^,          \        ^,           ^.p\        P                  ! W\        4      p. R!OoC^ ^ .o?V	\	        \        ^,           ^\        ^,          ,          ^\        ,          ,           ^,           \        4      8X  g   Q hV\	        \        ^,          \        ,          ^\        ,          ,           \        ^,          \        ^,          ,          \        \        ^,           ,          ,           ^,           \        4      8X  g   Q h\        \        V?VC3R l4       ^.pR"R#.p^p\        P                  ! WV\        4      p	V	\	        ^\        ,          ^,
          \        R,           R\        ,          ,
          \        R,           R\        ,          ,           ,          \        4      8X  g   Q h\	        \        ^,          \        ^,          ,           \        ,           \        \        ^,          ,
          \        4      p\	        \        ^,          \        ^,          ,           ^,           ) \        ^,
          \        4      pVP!                  4       \!        V4      u;8X  d	   V8X  g   Q h Q h\	        \        ^,           \        ^,
          ,          \        ^,
          \        ^,           ,          \        4      p	\	        \        ^,           \        ^,           \        4      pV	P!                  4       \!        V	4      u;8X  d	   V8X  g   Q h Q h\	        ^\        ,
          ^,          \        ^,          ^,           ^,          \        4      p\	        ^R$\        4      p\"        \        \        ,          ,          \$        \        \        ,          ,          ,           \&        \        \        ,          ,          ,           \        \        ,          \        \        ,          ,           ,          p\(        \        \        ,          ,          \*        \        \        ,          ,          ,           \,        \        ,          \        ,          \        \        ,          ,           ,          p\&        \        \        ,          ,          \        \        ,          ,          \&        \        \        ,          ,          \        \        ,          ,          ,           \$        \        \        ,          ,          \        \        ,          ,          ,           \$        \        \        ,          ,          \        \        ,          ,          ,           \"        \        \        ,          ,          \        \        ,          ,          ,           \"        \        ^\        ,          ,          ,          ,           p\(        \,        ,          \        ,          \        ,          \        \        ,          ,          \(        \        \        ,          ,          \        \        ,          ,          ,           \*        \,        ,          \        ,          \        \        ,          ,          \        ,          ,           \*        \        \        ,          ,          \        \        ,          ,          ,           p\$        \"        ,          \        ,          \        \        ,          ,          \$        \        ,          \        ,          ,           \"        \*        ,          \        ,          \        ,          \        \        ,          ,          ,           \*        \        ^,          ,          \        ,          ,           p\	        VV\        4      p\	        \&        \        \        ,          ,          \(        \        \        ,          ,          ,
          \$        \        ,          \*        \        ,          \        ,          ,           \"        \        \        ,          ,          \        ,           ,          \        4      pVP/                  4       \	        \        ^,          ^\        ,          ,
          ^,           \        ^,          ^\        ^,          ,          ,           ^,           \        4      8X  g   Q hV	P/                  4       \	        \        ^,          ^\        ,          ,           ^,
          \        ^,          ^\        ,          ,           ^,
          \        4      8X  g   Q hVP/                  4       V8X  g   Q hVP/                  4       \	        VV\        4      8X  g   Q hVP/                  4       \	        \&        \        \        ,          ,          \(        \        \        ,          ,          ,
          V\        4      8X  g   Q h\$        \        ,          \&        ,           p\,        \        ^,          ,          \*        \        ,          ,           \(        ,           p\	        VV\        4      p\	        R\        ,          R,           R	\        ^,          ,          R
\        ,          ,           R,           \        4      p\	        ^\        ,          ^,           ^\        ^,          ,          ^\        ,          ,           ^,           \        4      p VP1                  \&        ^\$        ^\(        ^\*        ^\,        ^/4      V 8X  g   Q hVP1                  \&        ^\$        ^\(        ^\*        ^\,        ^/4      P3                  4       V8X  g   Q hV P3                  4       V8X  g   Q h\5        R4      w  p!p"p#p$V!\        ,          V$\        ^,          ,          V#\        ^,          ,          ,           V",
          p&p%\	        V%V&\        4      p'\	        R\        ,          R	\        ^,          ,          R\        ^,          ,          ,           R,
          \        4      p(\	        ^\        ,          ^\        ^,          ,          ^\        ^,          ,          ,           ^,
          \        4      p)V'P1                  V!^V"^V#^V$^/4      V)8X  g   Q hV'P1                  V!^V"^V#^V$^/4      P3                  4       V(8X  g   Q hV)P3                  4       V(8X  g   Q h\	        \&        \        ^,          ,          \$        \        ^,          ,          ,           \(        \        ,          ,
          \*        ,           \$        \        ,          \        ,           \        4      p*\	        R\        ^,          ,          R
\        ^,          ,          ,           \        ,
          R	,           \        R
\        ,          ,           \        4      p+\	        ^\        ^,          ,          ^\        ^,          ,          ,           \        ,
          ^,           \        ^\        ,          ,           \        4      p,V*P1                  \&        ^\$        ^\(        ^\*        ^/4      V,8X  g   Q hV*P1                  \&        ^\$        ^\(        ^\*        ^/4      P3                  4       V+8X  g   Q hV,P3                  4       V+8X  g   Q h\	        \        \$        \        ^,          ,          ,
          \&        \        ,          \        ,           \        4      p-\	        R\        ^,          ,          \        ,           \        \        ,
          \        4      p.\	        ^\        ^,          ,          \        ,           \        \        ,
          \        4      p/V-P1                  \&        R\$        R%/4      V/8X  g   Q hV-P1                  \&        R\$        R%/4      P3                  4       V.8X  g   Q hV/P3                  4       V.8X  g   Q hV	P7                  \8        4      \8        ^,          \8        ^,          ^\8        ,          ,           ^,
          ,          ^\8        ,          \8        ^,          ^\8        ,          ,           ^,
          ,          ,           ^\8        ^,          ^\8        ,          ,           ^,
          ,          ,
          8X  g   Q hVP7                  ^\        ,           4      \;        ^4      ^,          \;        ^4      \        ,          ^,          ,           8X  g   Q hVP7                  \;        ^4      ^,          4      \&        \        \        ,          ,          \$        \"        ,          \        \;        ^4      ^,          ,          ,          \;        ^4      \$        ,          \        ,          ^,          ,           ^\"        ,          \*        ,          \        \;        ^4      ^,          ,          ,          ^,          ,           \;        ^4      \*        ,          \        ,          ^	,          ,           ,          ^^\;        ^4      ^,          ,          ,          ^\;        ^4      ^,          ,          ,          \(        ,          ^	\$        ,          \"        ,          \        \;        ^4      ^,          ,          ,          ^\$        ,          \        ,          ,           ^\"        ,          \*        ,          \        \;        ^4      ^,          ,          ,          ,           ^\*        ,          \        ,          ,           ,          ,
          8X  g   Q hVP=                  4       ^8X  g   Q hV	P=                  4       \?        ^^4      8X  g   Q hV'P=                  4       ^ 8X  g   Q hV.P=                  4       R8X  g   Q hV)P=                  4       ^ 8X  g   Q h\	        ^\        \        4      P=                  4       \@        8X  g   Q h\	        \B        ^,          \D        ,
          \D        \B        4      p0\	        \D        \B        ^,          \D        ,
          \B        4      p1\	        \B        ^,          \B        ^
,          \B        ,           \B        ^,          ,           \B        4      p2\	        \B        ^
,          \B        ,           \B        ^,          ,           \B        ^,          \B        4      p3VPG                  4       \        \        \        ) \        ) .8X  g   Q hVPG                  4       . 8X  g   Q hV	PG                  4       R&^.8X  g   Q hV/PG                  4       \        .8X  g   Q hV-PG                  4       \&        ) \        ,          .8X  g   Q hV+PG                  4       R'\        ,          .8X  g   Q h\I        V(PG                  4       4      \I        RR(R\        ,          ,
          R(R\        ,          ,           .4      8X  g   Q h\I        VPG                  4       4      \I        R)R\        ,          ,
          R)R\        ,          ,           .4      8X  g   Q hV1PG                  4       \D        \?        ^^4      ,          \D        \?        ^^4      ,          ) \        \D        \?        ^^4      ,          ,          \        ) \D        \?        ^^4      ,          ,          .8X  g   Q hV2PG                  4       \K        \B        ^	,          \B        ,           ^,           ^ 4      ^ \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      .
8X  g   Q h\        \L        R 4       \5        RRR7      w  p4p5\5        RRR7      p6\	        \        ^,          \&        ,           \$        \        ,          ,
          V4\        ,          V5,
          \        4      p2\	        \        ^,          \&        ,           \$        \        ,          ,
          V4\        ,          ^,
          \        4      p7\	        \        ^,          \&        ,           \$        \        ,          ,
          V4\        ,          V6,
          \        4      p8VPO                  4       RJ g   Q hVPO                  4       RJ g   Q hV	PO                  4       RJ g   Q hV(PO                  4       RJ g   Q hVPO                  4       RJ g   Q hV7PO                  4       RJ g   Q hV8PO                  4       RJ g   Q hV2PO                  4       RJ g   Q hV/PO                  4       e   Q hV-PO                  4       e   Q hVPQ                  4       ^^.8X  g   Q hVPQ                  4       . 8X  g   Q hV	PQ                  4       R$^.8X  g   Q hV/PQ                  4       ^\?        ^^4      ,          \        ) \?        ^^4      ,          ,          ^,          ^\?        ^^4      ,          ) \        ) \?        ^^4      ,          ,          ^,          \S        ^4      ^\?        ^^4      ,          ,          \        ,          \        ) \?        ^^4      ,          ,          ^,          ,
          ^\?        ^^4      ,          ) \        ) \?        ^^4      ,          ,          ^,          \S        ^4      ^\?        ^^4      ,          ,          \        ,          \        ) \?        ^^4      ,          ,          ^,          ,           .8X  g   Q hV-PQ                  4       \        \$        ,          \?        ^^4      ,          \        \$        ,          \?        ^^4      ,          ) ^,          \S        ^4      \        ,          \        \$        ,          \?        ^^4      ,          ,          ^,          ,
          \        \$        ,          \?        ^^4      ,          ) ^,          \S        ^4      \        ,          \        \$        ,          \?        ^^4      ,          ,          ^,          ,           .8X  g   Q h\I        V+PQ                  4       4      \I        RR\S        R*\        ^,          ,          R,
          4      ,          ,
          R\S        R*\        ^,          ,          R,
          4      ,          R,           .4      8X  g   Q hV0PQ                  4       \D        \?        ^^4      ,          \D        \?        ^^4      ,          ) ^,          \S        ^4      \        ,          \D        \?        ^^4      ,          ,          ^,          ,
          \D        \?        ^^4      ,          ) ^,          \S        ^4      \        ,          \D        \?        ^^4      ,          ,          ^,          ,           .8X  g   Q hV3PQ                  4       \K        \B        ^	,          \B        ,           ^,           ^ 4      ^ \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      \K        \B        ^	,          \B        ,           ^,           ^4      .
8X  g   Q h\        \L        R 4       \	        \        ^,           \        ^,          \        ^,          ,
          ^	,           \        4      p\	        R$\        ,          ^,           ^\        ,
          \        4      oDV) \	        \        ) ^,
          \        ^,          \        ^,          ,
          ^	,           \        4      8X  g   Q hSD) \	        ^\        ,          ^,
          ^\        ,
          \        4      8X  g   Q h\	        \        ^,           \        ^,
          \        4      oE\	        \        ^,          ^,           ^\        ,
          \        4      oF\	        \        ^,          ^,           ^,          ^\        ,
          ^,          \        4      p(\	        \        ^,           ^,          \        ^,
          ^,          \        4      pSESE,          PU                  4       SE^,          u;8X  d   \W        SE^4      u;8X  d	   V8X  g   Q h Q hSFSF,          SF,          PU                  4       SF^,          u;8X  d   \W        SF^4      u;8X  d	   V(8X  g   Q h Q hSF^ ,          \W        SF^ 4      u;8X  d   \	        ^^\        4      8X  g   Q h Q h\Y        SE4      PU                  4       R,          SER,          u;8X  d@   \W        SER4      u;8X  d.   \	        \        ^,
          \        ^,           \        4      8X  g   Q h Q hSFSF,          PU                  4       R,          SFR+,          u;8X  dU   \W        SFR+4      u;8X  dC   \	        ^\        ,
          ^,          \        ^,          ^,           ^,          \        4      8X  g   Q h Q h\        \        VE3R l4       \        \        VF3R l4       \        \        VEVF3R l4       \	        \        ^,
          \        ^,          ^\        ,          ,
          ^,           \        4      p\	        \        \        ,           \        ^,          ^,
          \        4      p9\[        V4      \	        \        ^,
          \        ^,
          ^,          \        4      8X  g   Q hVP\                  P1                  \        ^4      VP^                  P1                  \        ^4      u;8X  d	   ^8X  g   Q h Q hVP1                  \        ^4      \	        \        ^,
          \        ^,          ^\        ,          ,
          ^,           \        4      8X  g   Q hV9P1                  \        ^4      \	        \        ^,           ^\        4      8X  g   Q hSDPa                  \        \        /4      \	        R$\        ,          ^,           ^\        ,
          \        4      8X  g   Q h\        \b        VD3R l4       SDP1                  \        \        ^4      4      SD8X  g   Q h\	        \&        \        \        ,          ,          \$        \        \        ,          ,          ,           \"        \        ,          \        ,
          \        4      p:V:Pa                  \        \D        /4      \	        \&        \D        \        ,          ,          \$        \        \D        ,          ,          ,           \"        \        ,          \D        ,
          \D        4      8X  g   Q hV:P1                  \        \D        4      \	        \&        \        \        ,          ,          \$        \        \        ,          ,          ,           \"        \        ,          \        ,
          \        4      8X  g   Q h\	        \&        \        ^,          ,          ^\        ^,          ,          ,           ^,           \        ^,          ^,
          \        4      p;\	        ^\        ,           ^\        ,           ^\        ,           ,          \        4      p<\	        ^ ^\        4      p=\	        ^^\        4      p>V;P                  4       \        \&        \        ^,          ,          ^\        ^,          ,          ,           ^,           \        \        ^,          ^,
          RRR7      RR7      8X  g   Q hV<P                  4       \        \        ^,           \        ^\        ,           ^\        ,           ,          RRR7      RR7      8X  g   Q hV=P                  4       \        \;        ^ 4      \        ^RRR7      RR7      8X  g   Q hV>P                  4       \        ^RRR7      8X  g   Q hR# ),r   Fevaluatec                  0   < \         P                  ! S 4      # Nr   from_rational_expression)expr_2s   r8   r9   1test_TransferFunction_functions.<locals>.<lambda>   s    &6&O&OPV&Wr7   c                  0   < \         P                  ! S 4      # rz   r{   )expr_3s   r8   r9   r~          /HHPr7   c                  0   < \         P                  ! S 4      # rz   r{   )expr_4s   r8   r9   r~      r   r7   c                  <   < \         P                  ! SS \        4      # rz   )r   from_coeff_listsr5   )den3num3s   r8   r9   r~      s    &6&G&GdTU&Vr7         ?       @      @      @      @zc1, d0:3g      @gS?gH8?g%1C9?c                      \        \        ^,          \        \        ^
,          ,          \        ,           \        ^,          ,           \        4      P                  4       # rE   )r   xrN   polesr6   r7   r8   r9   r~     s2    (8Ar!R%x!|aQRd?RTU(V(\(\(^r7   zq, rT)negativet)positiveNg      ?gv-k?c                      \        \        \        ^
,          ,          \        ,           \        ^,          ,           \        ^,          \        4      P                  4       # )
   )r   rN   r   zerosr6   r7   r8   r9   r~   2  s2    (8ArEA19LaQRdTU(V(\(\(^r7   c                  P   < S \         ^,          \         ,           ^,
          ,          # rE   r5   r^   s   r8   r9   r~   E  s    sQTAX\2r7   c                     < S \         ,          # rz   r   r`   s   r8   r9   r~   F  s	    sAvr7   c                     < S S,          # rz   r6   r^   r`   s   r8   r9   r~   G  s	    sCxr7   c                  D   < S P                  \        \        ^4      /4      # rE   )xreplacerH   r   r]   s   r8   r9   r~   R  s    cllAs1v;7r7   )rC   r3      rA   y             @y             g      пg3pUcgٿg3ٿ)2r   r
   r5   rH   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                                                                  @@@@@@@@r8   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::<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

#
#E$
: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7r7   c                  >  a aaaa \        \        ^,           \        ^,
          \        4      o\        \        ^,           \        ^,           \        4      o\        \        ^,           \        ^,          \        ,           ^,           \        4      o\        \        ^\        ,
          \        4      oSS,           \        SS4      8X  g   Q hSS,           \        SS4      8X  g   Q hS) S,           S,           \        S) SS4      8X  g   Q hSSS,           ,           \        SSS4      8X  g   Q h\	        RRR7      o \        \        V3R l4       \        \        V V3R l4       \        \        VV3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R	 l4       SS,
          \        SS) 4      8X  g   Q hSS,
          \        SS) 4      8X  g   Q hS) S,
          \        S) S) 4      8X  g   Q hSS,
          S,           \        SS) S4      8X  g   Q h\        \        V3R
 l4       \        \        VV3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R l4       R# )   r   Fcommutativec                  ,   < S \        . RO4      ,           # r@   r   r[   s   r8   r9   @test_TransferFunction_addition_and_subtraction.<locals>.<lambda>q      sVI%66r7   c                     < SS ,           # rz   r6   )r   r\   s   r8   r9   r   r  	    sQwr7   c                     < S S,           # rz   r6   r]   r^   s   r8   r9   r   s  	    sSyr7   c                  ,   < S \         ^,
          ,           # rG   r   r   s   r8   r9   r   t      sa!e}r7   c                     < S ^,           #    r6   r   s   r8   r9   r   u  r   r7   c                  :   < ^\         ^,          ,
          S ,           # rG   rH   r   s   r8   r9   r   v      AqDC/r7   c                  ,   < S \        . RO4      ,
          # r@   r   r   s   r8   r9   r   ~  r   r7   c                     < S S,
          # rz   r6   r   s   r8   r9   r     r   r7   c                  ,   < S \         ^,
          ,
          # rG   r   r   s   r8   r9   r     r   r7   c                     < S ^,
          # r   r6   r   s   r8   r9   r     r   r7   c                  ,   < \         ^,           S ,
          # )r   r   )r\   s   r8   r9   r     s    A}r7   c                  :   < ^\         ^,          ,           S ,
          # rG   r   r   s   r8   r9   r     r   r7   N)r   r5   rH   r    r   r-   rX   )r   r[   r\   r]   r^   s   @@@@@r8   .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
:()
:,-
:'
:,-
:/0r7   c            
        a aaaaaaa \        \        ^,           \        ^,          ) ^	,           \        4      o \        \        ^,           \        ^,
          \        4      o\        \        \        ^,          ^,
          \        4      o\        \        ^,           \        ^,
          \        4      o\        \        ^,           \        ^,
          \        4      o\        \        ^,           \        ^,           \        4      o\        ^^\        4      oS S,          \        S S4      8X  g   Q hS ) S,          \        S ) S4      8X  g   Q hS) S,          S) ,          \        S) SS) 4      8X  g   Q hS ) S) ,          S) ,          S) ,          \        S ) S) S) S) 4      8X  g   Q hSS,          \        SS4      8X  g   Q hS S,          SS,          ) ,          \        S S\        R^\        4      \        SS4      4      8X  g   Q hS S,          SS,           ,          \        S S\	        SS4      4      8X  g   Q hSS,          \        S\        SR4      4      8X  g   Q hS) S,          \        S) \        SR4      4      8X  g   Q hSS,          S,          \        SS\        SR4      4      8X  g   Q h\        RRR7      o\        \        V3R l4       \        \        V V3R l4       \        \        VV3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R	 l4       \        \        V3R
 l4       \        \        VV3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R l4       \        \        V3R l4       \        \        VV3R l4       \        \        VVV3R l4       \        \        VVV3R l4       R# )rC   r   Fr   c                  ,   < S \        . RO4      ,          # r@   r   r   s   r8   r9   Ctest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF9$55r7   c                     < S S,          # rz   r6   )r   r   s   r8   r9   r    	    rAvr7   c                     < S S,          # rz   r6   r   G5s   r8   r9   r    	    rBwr7   c                  ,   < S \         ^,
          ,          # rG   r   r  s   r8   r9   r    s    rQU|r7   c                     < ^	S ,          # 	   r6   r  s   r8   r9   r    	    q2vr7   c                  ,   < S \        . RO4      ,          # r@   r   r  s   r8   r9   r    r  r7   c                     < S ^ ,          # r=   r6   )G6s   r8   r9   r    r	  r7   c                     < S S,          # rz   r6   r  s   r8   r9   r    r  r7   c                     < S ^,          # rE   r6   r  s   r8   r9   r    r	  r7   c                  ,   < S \         ^,          ,          # rE   r   r  s   r8   r9   r    s    rAqDyr7   c                  P   < \         ^\         ^,          ,          ,
          S ,          # r2   r   )r   s   r8   r9   r    s    AadF
b0r7   c                     < ^ S ,          # r=   r6   )r   s   r8   r9   r    r  r7   c                  $   < S^S ,           ,          # rG   r6   )r  G7s   r8   r9   r    s    rQV}r7   c                  $   < SS S,          ,          # rz   r6   r  r  r  s   r8   r9   r    s    rR"W~r7   c                  2   < SSS S,           ,           ,          # rz   r6   r  s   r8   r9   r    s    rR27^4r7   Nr   )	r   r5   rH   r   r    r   r   r-   rX   )r   r   r   r   r  r  r  r   s   @@@@@@@@r8   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5r7   c                     \        R 4      w  rp\        V ^,          \        ^,          \        V ,          V,          \        ,          ,           V ^,          ,           V 4      p\        V\        ^,          ,
          V\        ^,          ,           V4      p\        \        \
        ,          \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        \        ^,          ,          ,
          \        4      p\        \
        \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        ^,          ,
          \        4      pVP                  '       g   Q hVP                  '       g   Q hVP                  '       g   Q hVP                  '       d   Q hR# zomega_o, zeta, tauN)r   r   r5   rH   rS   rT   	is_proper)rp   zetar   r   r   r   r   s          r8   test_TransferFunction_is_properr&    s    !56G3	'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<<<<<<<<<<<<||||r7   c                     \        R 4      w  rp\        V ^,          \        ^,          \        V ,          V,          \        ,          ,           V ^,          ,           V 4      p\        V\        ^,          ,
          V\        ^,          ,           V4      p\        \        \
        ,          \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        \        ^,          ,          ,
          \        4      p\        \
        \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        ^,          ,
          \        4      pVP                  '       d   Q hVP                  '       d   Q hVP                  '       g   Q hVP                  '       d   Q hR# r#  )r   r   r5   rH   rS   rT   is_strictly_proper)rp   r%  r   r[   r\   r]   r^   s          r8   (test_TransferFunction_is_strictly_properr)    s    !56G3
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%%%%%%%%%%!!!!!%%%%%%r7   c                     \        R 4      w  rp\        V^,          \        ^,          \        V,          V,          \        ,          ,           V^,          ,           V4      p\        V \        ^,          ,
          V \        ^,          ,           V 4      p\        \        \
        ,          \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        \        ^,          ,          ,
          \        4      p\        \
        \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \
        \        ^,          ,
          \        4      pVP                  '       g   Q hVP                  '       g   Q hVP                  '       d   Q hVP                  '       d   Q hR# )ztau, omega_o, zetaN)r   r   r5   rH   rS   rT   is_biproper)r   rp   r%  r[   r\   r]   r^   s          r8   !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????????r7   c            
         \        R 4      w  rr#\        WW#4      p\        4       p\        V\        4      '       g   Q h\        V\        4      '       g   Q hV\        WW#\        4      8X  g   Q hV\        WV^ \        4      8X  g   Q hVP
                  V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           8X  g   Q hVP                  \        ^,          V,          \        ,           8X  g   Q hVP                  \        8X  g   Q hVP                  V 8X  g   Q hVP                  V8X  g   Q hVP                  V8X  g   Q hVP                  V8X  g   Q hVP                  4       \        V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           \        ^,          V,          \        ,           \        4      8X  g   Q hVP                  R8X  g   Q hVP                  R8X  g   Q hVP                  R8X  g   Q hVP                  4       \        V\        ^,          ,          V,           V \        ,          ,           \        \        4      8X  g   Q h\        \        \        ^,           \        4      p\!        WF4      p\#        WF4      p\%        WF4      p	V\!        \        WW#\        4      \        \        \        ^,           \        4      4      8X  g   Q hV\#        \        WW#\        4      \        \        \        ^,           \        4      4      8X  g   Q hV	\%        \        WW#\        4      \        \        \        ^,           \        4      4      8X  g   Q hVP                  4       \        \        \        ^,          V,          \        ,           ,          \        ^,           V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           ,          ,           \        ^,           \        ^,          V,          \        ,           ,          \        4      8X  g   Q hVP                  4       \        \        V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           ,          \        ^,           \        ^,          V,          \        ,           ,          \        4      8X  g   Q hV	P                  4       \        \        ^,           \        ^,          V,          \        ,           ,          V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           ,          \        V\        ^,          ,          V\        ,          V,          ,           V,           V \        ^,          ,          V,          ,           V \        ,          ,           ,          \        ^,           \        ^,          V,          \        ,           ,          ,           \        ^,          V,          \        ,           ,          \        4      8X  g   Q hR# )zkp ki kd tfTFN)r   r   
isinstancer   r5   rK   rL   varkpkikdrZ   r   r$  r+  r(  r    r   r!   )
r0  r1  r2  rZ   r   r   r[   par1ser1fed1s
             r8   test_PIDControllerr6    s   ]+NBB	rr	&B	B b-((((b*++++ rrq1111rr1a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"?DBD8M""!<>NqRSVWRWYZ>[\\\\6-:<LQPQTUPUWX<YZZZZ8M""!<>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r7   c                    aaaa \        \        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          ,
          \
        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          \        ,          ,
          \        4      o\        \        \        ,          \        ,
          \        \        ,          \        ,           \        4      o\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        R4      ! \        4      p \        R4      ! \        4      p\        SS4      pVP                  SS38X  g   Q hVP                  \        8X  g   Q h\        \        SS) 4      S4      pVP                  \        SS) 4      S38X  g   Q hVP                  \        8X  g   Q h\        V ^\        4      p\        V) ^\        4      p\        S\        WE4      S4      pVP                  S\        WE4      S38X  g   Q h\        SSS4      pVP                  SSS38X  g   Q h\        WE4      pVP                  WE38X  g   Q hVP                  \        8X  g   Q h\        SS\        SS) 4      S4      p	V	P                  SS\        SS) 4      S38X  g   Q h\        SS4      p
W*8X  g   Q hW&8X  d   Q h\!        \"        VV3R l4       \!        \"        VVVV3R l4       \!        \"        VV3R l4       \!        \$        VV3R l4       \!        \$        VV3R l4       \!        \$        V3R l4       R	# )
rC   X_dXc                     < \        S S4      # rz   r   rZ   r]   s   r8   r9   *test_Series_construction.<locals>.<lambda>#  s    vb#r7   c                      < \        S SSS4      # rz   r;  rZ   r\   r]   r^   s   r8   r9   r=  $  s    vb#sC8r7   c                     < \        S) S 4      # rz   r;  r\   r]   s   r8   r9   r=  %  s    vsdC0r7   c                     < \        ^S S4      # rE   r;  rZ   r^   s   r8   r9   r=  &  s    fQC0r7   c                  `   < \        \        ^,          \        \        ,          ,           SS 4      # rE   )r   r5   rH   rA  s   r8   r9   r=  '  s    fQTAaCZc:r7   c                  2   < \        S \        . RO4      4      # r/   )r/   rB   rC   r3   )r   r   r   s   r8   r9   r=  (  s    fS&*>?r7   N)r   rN   r5   rO   rP   rQ   rH   rR   rW   r%  r   r   r   rM   r/  r    r-   rX   rY   )inpouts0s1tf3_r_   s2s3s4s6s7rZ   r\   r]   r^   s              @@@@r8   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	HT(#	.B77r8D/5555	C	B77r3n$$$		B77tl"""66Q;;	S(3,c	2B77sC#s!3S9999	CB8O8x<
:./
:89
:01
901
9:;
9?@r7   c                  X  aaaa	a
 \        \        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          ,
          \
        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          \        ,          ,
          \        4      o\        \        \        ,          \        ,
          \        \        ,          \        ,           \        4      p \        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      p\        SW.V) V ) S..4      o\        V ) .V ) .V) ..4      o\        V) ..4      o	\        \        .\        .\        ) ..4      p\        P                  ! \!        ^\        ,          .4      \        4      o
\#        SS4      pVP$                  SS38X  g   Q hVP&                  \        8X  g   Q hVP(                  VP*                  VP,                  3u;8X  d	   R	8X  g   Q h Q h\#        S	SS4      pVP$                  S	SS38X  g   Q hVP&                  \        8X  g   Q hVP(                  VP*                  VP,                  3u;8X  d	   R	8X  g   Q h Q h\#        S	\/        S) V) 4      S4      pVP$                  S	\/        S) V) 4      S38X  g   Q hVP(                  VP*                  VP,                  3u;8X  d	   R	8X  g   Q h Q h\1        \2        R 4       \1        \4        VV3R l4       \1        \2        VV3R l4       \1        \2        V	V
3R l4       \1        \4        VV	3R l4       \1        \4        VV	3R l4       \1        \4        V	3R l4       R# )
rC   c                      \        4       # rz   r#   r6   r7   r8   r9   .test_MIMOSeries_construction.<locals>.<lambda>E  s    z|r7   c                     < \        SS 4      # rz   rT  )tf_1tfm_1s   r8   r9   rU  H  s    j5r7   c                      < \        S SS ) 4      # rz   rT  rX  tfm_2s   r8   r9   rU  L  s    z%?r7   c                     < \        S S4      # rz   rT  )tfm_3tfm_5s   r8   r9   rU  O  s    z%7r7   c                     < \        ^S S4      # rE   rT  r[  r]  s   r8   r9   rU  R  s    jE59r7   c                  b   < \        \        ^,          \        \        ,          ,           S ) S4      # rE   )r#   r5   rH   r`  s   r8   r9   rU  S  s    jA!eVUCr7   c                  F   < \        \        ^\        ,          .4      S 4      # rG   )r#   r   rH   r]  s   r8   r9   rU  T  s    j1>r7   N)rB   r/   )r   rN   r5   rO   rP   rQ   rH   rR   rW   r%  r   r"   TF3TF2TF1from_Matrixr   r#   rM   r/  shapenum_outputs
num_inputsr$   r-   rX   rY   )tf_2tf_3tfm_4s8s9s11rW  rX  r[  r]  r^  s         @@@@@r8   test_MIMOSeries_constructionrq  +  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>?r7   c                    aaaa \        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        \        ^\        4      o\        \
        \        ,          \        ,
          \
        \        ,          \        ,           \        4      o\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        \        \        ^,          ,          \
        \        ,          ,           \        ,
          \        \        ,           \        4      p SS,          S,          \        SSS4      u;8X  d9   \        \        SS4      S4      u;8X  d   \        S\        SS4      4      8X  g   Q h Q hSSS,           ,          \        S\        SS4      4      8X  g   Q hSS,          V ,           \        \        SS4      V 4      8X  g   Q hSS,          V ,
          \        \        SS4      V ) 4      8X  g   Q hSS,          S,           V ,           \        \        SS4      SV 4      8X  g   Q hSS,          S,
          V ,
          \        \        SS4      S) V ) 4      8X  g   Q hSS,          S,
          V ,           \        \        SS4      S) V 4      8X  g   Q hSS,          SV ,          ,           \        \        SS4      \        SV 4      4      8X  g   Q hSS,          SV ,          ,
          \        \        SS4      \        \        R^\        4      \        SV 4      4      4      8X  g   Q hSS,          SS,
          ,          S,          \        SS\        SS) 4      S4      8X  g   Q hS) S,          \        S) S4      8X  g   Q hSS,          ) \        \        R^\        4      \        SS4      4      8X  g   Q h\        \        VVV3R l4       \        \        VVV3R l4       \        \        V3R l4       \        SSRR7      \        SS4      P                  4       u;8X  da   \        \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      8X  g   Q h Q h\        SS\        SS) 4      RR7      \        SS\        SS) 4      4      P                  4       u;8X  Ed   \        \        \
        \        ,          \        ,           \
        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ^,          ,          \        4      8X  g   Q h Q h\        SSS) RR7      \        SSS) 4      P                  4       u;8X  d   \        \        \
        ) \        ,          \        ,           ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h Q h\        SS) RR7      \        SS) 4      P                  4       8X  d   Q h\        \        SS4      \        SS) 4      4      P                  4       \        \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ^,           \
        ) \        ,          \        \
        \        ,          \        ,           ,          ,           \        ,           ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        S) S) S) 4      P                  4       \        \        \
        ) \        ,          \        ,           ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SSS4      P                  4       ) \        \        ) \
        \        ,          \        ,
          ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SS\        SS) 4      S4      P                  4       \        \        \
        \        ,          \        ,
          ^,          ,          \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ^,
          ,          \
        \        ,          \        ,           ^,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SS4      P                  \         4      \        \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      8X  g   Q h\        SSS) 4      P                  \         4      \        \        \
        ) \        ,          \        ,           ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        \        SS4      \        SS) 4      4      pVP                  '       g   Q hVP                   '       d   Q hVP"                  '       g   Q h\        SSS4      pVP                  '       g   Q hVP                   '       g   Q hVP"                  '       d   Q h\        SS) \        SS) 4      4      pVP                  '       g   Q hVP                   '       g   Q hVP"                  '       d   Q hR# )	r/   c                  $   < S S,          S,          # rz   r6   r[   r\   r^   s   r8   r9   'test_Series_functions.<locals>.<lambda>k  s    s3ws{r7   c                  $   < S SS,
          ,          # rz   r6   rt  s   r8   r9   ru  l  s    sC#Ir7   c                  ,   < S \        . RO4      ,          # r@   r   r   s   r8   r9   ru  m  s    s6)#44r7   Trw   FNr   )r   r5   r%  r   r   rP   rH   rN   rO   r   r    r-   rX   r   rewriter$  r(  r+  )r`   S1S2S3r[   r\   r]   r^   s       @@@@r8   test_Series_functionsr|  W  s4	   
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<<<<     ~~~~r7   c                  "  aaaa	a
 \        \        \        \        .\        ) \        ) \        ..4      o\        \        ) .\        ) .\        ) ..4      o\        \        ) ..4      p \        \        ) \        ) .\        ) \        ..4      o\        \        \        ) .\        ) \        ) ..4      o	\        \        ) .\        ..4      o
\        \        .\        ) ..4      pSS,          S
,           \	        \        SS4      S
4      8X  g   Q hSS,          V,           S
,           \	        \        SS4      VS
4      8X  g   Q hSS,          S
,
          V,
          \	        \        SS4      S
) V) 4      8X  g   Q hSS	,          SS	,
          ,           \	        \        S	S4      SS	) 4      8X  g   Q hSS
) ,          S) S
,          ,           \	        \        S
) S4      \        S
S) 4      4      8X  g   Q h\        \        VV3R  l4       \        \        VV3R l4       \        \        VV
3R l4       \        \        VV
3R l4       \        \        VV3R l4       \        \        VVV3R l4       \        \        VVVV	3R l4       \        \        VVVV	3R l4       SS,          V ) ,          \        V ) SS4      8X  g   Q hSS) ,          V ,          \        V S) S4      8X  g   Q h\        \        VV	3R l4       \        \        VV	3R	 l4       \        \        VV	3R
 l4       \        \        VV	3R l4       \        \        VV	3R l4       \        SSRR7      \        SS4      P                  4       u;8X  Ed   \        \        \        ^,          ) \        \        ,          \        ,           ^,          ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        ) \        ,          \        ,           \        \        ,          \        ,
          ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          ,           \        \        ,          \        ,           ^,          ,
          \        \        ,          \        ,           ^,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        4      3\        \        ^,          \        \        ,          \        ,           ^,          ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        ) \        ,          \        ,           \        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           \        \        ,          \        ,
          \        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           \        \        ,          \        ,           ^,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        4      334      8X  g   Q h Q h\#        ^^\        ,           ,          ^\        ,           ^\        ^,          ,           ^\        ,          ,           ^,          ,          ..4      p\#        ^\        ,           .^\        ^,          ,           ^\        ,          ,           ^,          ^\        ,           ,          ..4      p\         P$                  ! V\        4      \         P$                  ! V\        4      rT\        WT4      P                  4       \        \        ^\        ^,           ^,          ,          \        ^,          ^\        ,          ,           ^,           ^,          ,          \        ^,           ^,          \        ^,          ^\        ,          ,           ^,           ^,          ,          \        4      334      8X  g   Q h\        WT4      P                  4       P'                  4       \        \        ^^\        4      334      8X  g   Q h\        V ) S) SRR7      \        V ) S) S4      P                  4       u;8X  Ed   \        \        \        ^,          \        \        ,          \        ,           ^,          ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        \        ,          \        ,
          ^,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          ,           \        \        ,          \        ,           ^,          ,           \        \        ,          \        ,           ^,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        4      3\        \        ^,          ) \        \        ,          \        ,           ^,          ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        ) \        ,          \        ,           \        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           \        \        ,          \        ,
          \        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           \        \        ,          \        ,           ^,          \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ^,          ,          \        4      334      8X  g   Q h Q h\        \	        SS	4      S	RR7      \        \	        SS	4      S	4      P                  4       u;8X  Edo   \        \        \        ) \        ) \        ,          \        ,
          \        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           ,          \        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          \        4      \        \        \        ) \        ,          \        \        \        ,          \        ,           ,          ,
          \        ,           ,          \        \        ,          \        ,           \        4      3\        \        ) \        ) \        ,          \        ,
          \        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          ,           ,          \        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \         ,          ,           \        ^,          ,           ,          \        4      \        \        ) \        ,          \        ,           \        ) \        ,          \        \        \        ,          \        ,           ,          ,
          \        ,           ,          \        \        ,          \        ,           ^,          \        4      334      u;8X  d0   \        \	        SS	4      S	4      P)                  \         4      8X  g   Q h Q hR# )c                  ,   < S S,          \         ,           # rz   rf  tfm1tfm2s   r8   r9   +test_MIMOSeries_functions.<locals>.<lambda>  s    tDy3r7   c                  ,   < S S,          \         ,           # rz   )rN   r  s   r8   r9   r    s    d4i"nr7   c                  :   < S S,          \         ^,
          ,
          # rG   r   tfm4tfm6s   r8   r9   r    s    d4i1q51r7   c                  &   < S S) ,          ^,
          # r   r6   r  s   r8   r9   r    s    dD5j1nr7   c                  H   < R\         ^,          ,           S S,          ,           # r/   r   r   r  s   r8   r9   r    s    rAqDyDI5r7   c                  &   < S ) S,          S,           # rz   r6   r  r  r  s   r8   r9   r    s    teDj4/r7   c                  2   < S S,          S,
          S,           # rz   r6   r  r  r  tfm5s   r8   r9   r    s    d4i$.5r7   c                  2   < S S,          SS,          ,
          # rz   r6   r  s   r8   r9   r    s    d4i$t)3r7   c                  ,   < S S,          \         ,          # rz   r  r  r  s   r8   r9   r    s    tDy}r7   c                  ,   < S S,          \         ,          # rz   rO   r  s   r8   r9   r    s    d4ilr7   c                  <   < S S) ,          \         ^,
          ,          # rE   r   r  s   r8   r9   r    s    dD5j!a%0r7   c                  $   < SS ,          ^	,          # r  r6   r  s   r8   r9   r    s    d4ikr7   c                  J   < \         ^,          ) ^,           S,          S ,          # rJ   r   r  s   r8   r9   r    s    1uqy$.t3r7   Trw   N)r"   rf  re  rd  r$   r#   r-   rX   rY   r   r   r   rP   r5   rH   r   r%  r   rg  r   rx  )tfm3tfm7mat_1mat_2tm_1tm_2r  r  r  r  r  s         @@@@@r8   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$t"'')!$4QAz\1a4!A#:PQ>TUBU5UXY\]X]`aWacdfgcgjklmjmcmpqcqtubuWuwx$y#{"}~ @ d!&&(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r7   c                    aaaa \        \        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          ,
          \
        \        ^,          ,          \        \        ^,          ,          ,           \        \        ,          \        ,          ,
          \        4      o\        \        \        ,          \        ,
          \        \        ,          \        ,           \        4      o\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        R4      ! \        4      p \        R4      ! \        4      p\        SS4      pVP                  SS38X  g   Q hVP                  \        8X  g   Q h\        \        SS) 4      S4      pVP                  \        SS) 4      S38X  g   Q hVP                  \        8X  g   Q h\        V ^\        4      p\        V) ^\        4      p\        S\        WE) 4      S4      pVP                  S\        WE) 4      S38X  g   Q h\        SSS4      pVP                  SSS38X  g   Q h\        WE4      pVP                  WE38X  g   Q hVP                  \        8X  g   Q h\        SS4      p	W)8X  g   Q hW#8X  d   Q h\        SS\        SS) 4      4      p
V
P                  SS\        SS) 4      38X  g   Q h\        SS\        SS) 4      S4      pVP                  SS\        SS) 4      S38X  g   Q h\!        \"        VV3R l4       \!        \"        VVVV3R l4       \!        \"        VV3R l4       \!        \$        VV3R l4       \!        \$        VV3R l4       \!        \$        V3R l4       R	# )
rC   r8  r9  c                     < \        S S4      # rz   r    r<  s   r8   r9   ,test_Parallel_construction.<locals>.<lambda>  s    xC0r7   c                      < \        S SSS4      # rz   r  r?  s   r8   r9   r    s    xCc:r7   c                     < \        S ) S4      # rz   r  r   s   r8   r9   r     s    xc2r7   c                     < \        ^S S4      # rE   r  rC  s   r8   r9   r    s    hq"c2r7   c                  `   < \        \        ^,          \        \        ,          ,           SS 4      # rE   )r    r5   rH   rA  s   r8   r9   r    s    hq!tacz3<r7   c                  2   < \        S \        . RO4      4      # rF  )r    r   r   s   r8   r9   r    s    hsF<,@Ar7   N)r   rN   r5   rO   rP   rQ   rH   rR   rW   r%  r   r   r    rM   r/  r   r-   rX   rY   )rG  rH  p0r   rK  r_   r   r   r   p5p6p7rZ   r\   r]   r^   s               @@@@r8   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	"fT5)3	/B77r6$.4444	"c3	B77r3n$$$	$	B77tl"""66Q;;	"c	B8O8x<	#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Br7   c                    aa	a
aa \        \        .\        .\        ..4      o\        \        ) .\        .\        ..4      o	\        \        ..4      o
\        \        .\        .\        ..4      o\        \        \        .\        \        ..4      p \        \        \        .\        \        ..4      p\         P                  ! \        ^\        ,          ..4      \        4      o\        SS	4      pVP                  SS	38X  g   Q hVP                  \        8X  g   Q hVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q h\        \        S
S4      S	4      pVP                  \        S
S4      S	38X  g   Q hVP                  \        8X  g   Q hVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q h\        S\        S
S4      S	4      pVP                  S\        S
S4      S	38X  g   Q hVP                  \        8X  g   Q hVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q h\        S	SS4      pVP                  S	SS38X  g   Q hVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q h\        W4      pVP                  W38X  g   Q hVP                  VP                  VP                  3u;8X  d	   R	8X  g   Q h Q h\        S	S\        S
) S4      S) 4      pVP                  S	S\        S
) S4      S) 38X  g   Q hVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q h\        \         R 4       \        \         VV	3R l4       \        \         VV
V3R l4       \        \"        V
V3R l4       \        \         VV3R l4       \        \         V	V3R l4       R# )
r/   c                      \        R4      # )Nr6   r$   r6   r7   r8   r9   0test_MIMOParallel_construction.<locals>.<lambda>+  s	    l2.r7   c                  &   < \        S S\        4      # rz   )r$   rf  r  s   r8   r9   r  .  s    l4s;r7   c                     < \        S SS4      # rz   r  )r  r  r  s   r8   r9   r  1  s    l4t<r7   c                     < \        S S4      # rz   r  )r  r  s   r8   r9   r  4  s    |D$7r7   c                     < \        ^S S4      # rE   r  )r  r  s   r8   r9   r  7  s    l1dD9r7   c                  b   < \        \        ^,          \        \        ,          ,           S) S 4      # rE   )r$   r5   rH   )r  r  s   r8   r9   r  8  s    l1a4!A#:udCr7   N)rC   r/   rB   rB   )r"   rf  re  rd  rg  r   rH   r$   rM   r/  r5   rh  ri  rj  r#   r-   rY   rX   )r  r  p8p9p10p11p12p13r  r  r  r  r  s           @@@@@r8   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
t
"C88|###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Dr7   c            	      %  aaaa \        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        \        ^\        4      o\        \
        \        ,          \        ,
          \
        \        ,          \        ,           \        4      o\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        \        \        ^,          ,          \
        \        ,          ,           \        ,
          \        \        ,           \        4      p SS,           S,           \        SSS4      8X  g   Q hSS,           S,           V ,           \        SSSV 4      8X  g   Q hSS,           S,
          V ,
          \        SSS) V ) 4      8X  g   Q hSSS,          ,           \        S\        SS4      4      8X  g   Q hSSS,          ,
          \        S\        SS4      ) 4      8X  g   Q hS) S,
          \        S) S) 4      8X  g   Q hSS,           ) \        \        R^\        4      \        SS4      4      8X  g   Q hSS,           S,          \        \        SS4      S4      8X  g   Q hSS,           SV ,          ,          \        \        SS4      SV 4      8X  g   Q hSS,           ) V ) ,          \        \        R^\        4      \        SS4      V ) 4      8X  g   Q hSS,           SS,          ,           V ,           \        SS\        SS4      V 4      8X  g   Q hSS,           SS,          ,           S,
          \        SS\        SS4      S) 4      8X  g   Q hSS,           V ,           SV ,           ,          \        \        SSV 4      \        SV 4      4      8X  g   Q h\        \        VVV3R l4       \        \        VVV3R l4       \        \        V3R l4       \        SSRR7      \        SS4      P                  4       u;8X  d   \        \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ^,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      8X  g   Q h Q h\        SS\        S) S4      RR7      \        SS\        S) S4      4      P                  4       u;8X  Ed   \        \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ^,          ,          \
        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ^,          ,          \        4      8X  g   Q h Q h\        SSS) RR7      \        SSS) 4      P                  4       u;8X  Ed~   \        \
        \        ,          \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        ,           \
        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h Q h\        SS) RR7      \        SS) 4      P                  4       8X  d   Q h\        \        SS4      \        SS4      4      P                  4       \        \        \
        \        ,          \        ,
          ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \
        \        ,          \        ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        S) S) S) 4      P                  4       \        \
        ) \        ,          \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,
          \        ,
          \
        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SSS4      P                  4       ) \        \
        ) \        ,          \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,
          \        ,
          \
        \        ,          \        ,
          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,
          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SS\        SS) 4      S4      P                  4       \        \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \
        \        ,          \        ,           ,          ,
          ^\
        ,          \        ,          ^\        ,          ,
          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SS4      P                  \         4      \        \        \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ^,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      8X  g   Q h\        SSS) 4      P                  \         4      \        \
        \        ,          \        \
        \        ,          \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        ,           \
        ) \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        S\        SS4      4      \        SSS4      u;8X  d   \        \        SS4      S4      8X  g   Q h Q h\        \        SS4      \        SS4      4      pVP                  '       g   Q hVP                   '       d   Q hVP"                  '       g   Q h\        SS) S) 4      pVP                  '       g   Q hVP                   '       d   Q hVP"                  '       g   Q h\        SS) \        SS4      4      pVP                  '       g   Q hVP                   '       d   Q hVP"                  '       g   Q hR# )	r/   c                  $   < S S,           S,           # rz   r6   rt  s   r8   r9   )test_Parallel_functions.<locals>.<lambda>O  s    sSy3r7   c                  $   < S SS,          ,
          # rz   r6   rt  s   r8   r9   r  P  s    sSW}r7   c                  ,   < S \        . RO4      ,           # r@   r   r   s   r8   r9   r  Q  r   r7   Trw   FNr   )r   r5   r%  r   r   rP   rH   rN   rO   r    r   r-   rX   r   rx  r$  r(  r+  )r`   P1P2P3r[   r\   r]   r^   s       @@@@r8   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<<<<$$$$$>>>>r7   c                    aaaaaa \        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      p \        \        \        ^,          ,          \
        \        ,          ,           \        ,
          \        \        ,           \        4      p\        \        .\        .\        ..4      o\        \        ) .V.\        ) ..4      o\        V.V) .\        ..4      o\        \        V) .\        V..4      o\        \        \        .\        V) ..4      o\        \        ) ..4      p\        V .V ) .V ..4      oSS,           S,           \        SSS4      u;8X  d   \        \        SS4      S4      8X  g   Q h Q hSS,
          S,
          \        SS) S) 4      8X  g   Q hSS,
          S) V,          V) ,          ,           \        SS) \        V) VS) 4      4      8X  g   Q hSS,           S) V,          ,
          \        SS\        VS) 4      ) 4      8X  g   Q hSS,
          S,
          S,           \        SS) S) S4      8X  g   Q hSS,           S,
          S,
          \        SSS) S) 4      8X  g   Q h\        \        VV3R l4       \        \        VV3R l4       \        \        VV3R l4       \        \        VV3R l4       \        \        VV3R l4       \        \        VVV3R l4       \        \        VVV3R l4       \        \        VVV3R l4       \        \        VVV3R	 l4       SS,           V,          \        V\        SS4      4      8X  g   Q hSS,
          V,          V) ,          \        V) V\        SS) 4      4      8X  g   Q hSS,
          S,
          W",           ,          \        \        W"4      \        SS) S) 4      4      8X  g   Q h\        \        VV3R
 l4       \        \        VV3R l4       \        \        VV3R l4       \        \        VVV3R l4       \        \        VV3R l4       \        \        VVVV3R l4       \        \        VVV3R l4       \        SSRR7      \        SS4      P                  4       u;8X  Ed^   \        SS4      P!                  \        4      u;8X  Ed8   \        \        \"        ) \        ^,          ^\        ,          \$        ,          \&        ,          ,           \$        ^,          ,           ,          ^,           \        ^,          ^\        ,          \$        ,          \&        ,          ,           \$        ^,          ,           \        4      3\        \        ) \        \        ^,          ,          ,           \
        \        ,          ,           \"        \        \        ,           ,          ,           \        \        ,           \        4      3\        \
        ) \        ,          \        ,
          \
        \        ,          \        ,
          \        ^,          ^\        ,          \$        ,          \&        ,          ,           \$        ^,          ,           ,          ,           \
        \        ,          \        ,           \        ^,          ^\        ,          \$        ,          \&        ,          ,           \$        ^,          ,           ,          \        4      334      8X  g   Q h Q hR# )rB   c                  ,   < S S,           \         ,           # rz   )re  r  s   r8   r9   -test_MIMOParallel_functions.<locals>.<lambda>  s    td{S0r7   c                  ,   < S S,
          \         ,
          # rz   r  r  s   r8   r9   r    s    dTkB.r7   c                  :   < S S,
          \         ^,
          ,
          # rG   r   r  r  s   r8   r9   r    s    dTkQU3r7   c                  &   < S) S ,
          ^	,
          # r  r6   r  s   r8   r9   r    s    tedlQ.r7   c                  H   < ^\         ^,          ,
          S,
          S ,
          # rG   r   r  s   r8   r9   r    s    q1a4x4/$6r7   c                  $   < SS ,
          S,
          # rz   r6   )r  r  r  s   r8   r9   r        td{T1r7   c                  $   < SS ,
          S,           # rz   r6   )r  r  r  s   r8   r9   r    r  r7   c                  $   < S S,           S,           # rz   r6   r  s   r8   r9   r    s    dTkD0r7   c                  $   < S S,
          S,
          # rz   r6   r  s   r8   r9   r    s    td{d2r7   c                  ,   < S S,           \         ,          # rz   r  r  s   r8   r9   r    s    tS0r7   c                  ,   < S S,
          \         ,          # rz   )rP   r  s   r8   r9   r    s    td{B.r7   c                  :   < SS ,           \         ^,
          ,          # )r   r   r  s   r8   r9   r    s    td{QU3r7   c                  2   < S S,           S,           ^ ,          # r=   r6   )r  r  r  s   r8   r9   r    s    td{T114r7   c                  H   < ^\         ^,          ,
          S S,           ,          # rG   r   )r  r  s   r8   r9   r    s    q1a4x$+6r7   c                  2   < SS ,
          S,          S,          # rz   r6   )r  r  r  r  s   r8   r9   r    s    tT1$6r7   c                  $   < S S,
          S,          # rz   r6   )r  r  r  s   r8   r9   r    s    tT1r7   Trw   N)r   rN   rH   rO   r5   rP   r"   rf  re  rd  r$   r#   r-   rX   rY   r   rx  r   r   r%  )	r^   r`   r  r  r  r  r  r  r  s	      @@@@@@r8   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<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r7   c                  
  aa	a
aa \        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        \        ^\        4      o	\        \
        \        ,          \        ,
          \
        \        ,          \        ,           \        4      o
\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        \        \        ^,          ,          \
        \        ,          ,           \        ,
          \        \        ,           \        4      o\        \        \        ,
          \        \        ,           \        4      p \        \        ^^\        4      SS	,          S
,          4      pVP                  \        ^^\        4      \        SS	S
4      R
38X  g   Q hVP                  \        ^^\        4      8X  g   Q hVP                  \        SS	S
4      8X  g   Q hVP                  \        8X  g   Q h\        SS	S
,          4      pVP                  S\        S	S
4      R
38X  g   Q hVP                  S8X  g   Q hVP                  \        S	S
4      8X  g   Q hVP                  \        8X  g   Q h\        SS	,          S4      pVP                  \        SS	4      SR
38X  g   Q hVP                  \        SS	4      8X  g   Q h\        SV 4      pVP                  SV R
38X  g   Q hVP                  S8X  g   Q hVP                  \        8X  g   Q h\        S\        ^^\        4      4      pVP                  S\        ^^\        4      R
38X  g   Q hVP                  \        8X  g   Q hV\        S4      8X  g   Q h\        \        ^^\        4      S4      pVP                  \        ^^\        4      SR
38X  g   Q hVP                  \        8X  g   Q h\        SV ,          \        ^^\        4      4      ) pVP                  \        \        R
^\        4      \        SV 4      4      \        ^^\        4      ) R
38X  g   Q hVP                  \        \        R
^\        4      \        SV 4      4      8X  g   Q h\        \         VV	V
3R l4       \        \         V3R l4       \        \         R 4       \        \         R 4       \        \"        V	VV3R l4       \        \"        VV	3R l4       \        \"        V3R l4       \        \"        VV3R l4       R	# )r/   c                  *   < \        S SS,           4      # rz   r!   r[   r\   r]   s   r8   r9   ,test_Feedback_construction.<locals>.<lambda>  s    hsC#I6r7   c                  2   < \        S \        . RO4      4      # r@   )r!   r   r   s   r8   r9   r    s    hsF9,=>r7   c                  N    \        \        ^^\        4      \        ^,
          4      # rG   )r!   r   r5   r6   r7   r8   r9   r    s    h'71a'@!a%Hr7   c                      \        ^^4      # rG   r  r6   r7   r8   r9   r    s
    hq!nr7   c                  *   < \        S SS,          4      # rz   r  )r\   r^   r`   s   r8   r9   r    s    xSW5r7   c                     < \        SS R 4      # )      ?r  r[   r\   s   r8   r9   r    s    xS#6r7   c                  ,   < \        S S R,          ) 4      # r  r  r   s   r8   r9   r    s    xc2gX6r7   c                     < \        S S4      # rz   r  r   s   r8   r9   r    s    xS1r7   Nr   )r   r5   r%  r   r   rP   rH   rN   rO   r!   rM   r   sys1sys2r/  r-   rY   rX   )rb   f1f2f3f4f5f6f7r[   r\   r]   r^   r`   s           @@@@@r8   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2r7   c            
      t  aaaaa \        ^^\        4      o\        ^\        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           \        4      o\        \        ^\        4      o\        \
        \        ,          \        ,
          \
        \        ,          \        ,           \        4      o\        \        \        ,          \        \        ,          ,           \        ,
          \        \        4      o\        \        \        ^,          ,          \
        \        ,          ,           \        ,
          \        \        ,           \        4      p \        \        \        ,
          \        \        ,           \        4      pSS,          S,          S,          V ,          \        SSS\        SR4      V 4      8X  g   Q hSS,          S,          SV ,          ,          \        SS,          S,          P                  4       \        SV ,          P                  4       R4      4      8X  g   Q hSSS,           ,          \        SS4      8X  g   Q hSSSS,          S,          ,           ,          \        SSS,          S,          4      8X  g   Q hSSSS,          S,          ,           ,          \        SSS,          4      8X  g   Q hSS,          SSS,          ,           ,          \        SS,          S4      8X  g   Q hSS,          SSS,          V ,          ,           ,          \        SS,          V 4      8X  g   Q hSS,          SSS,          V ,          S,          ,           ,          \        SS,          V S,          4      \        SS,          SV ,          4      39   g   Q hS\        ^^\        4      SV,          ,           ,          \        SV4      8X  g   Q hV SV ,           ,          \        V S4      8X  g   Q h\        \        VVV3R l4       \        \        VVVV3R l4       \        SSS,          S,          4      P                  4       \        \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \
        \        ,          \        ,
          ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        4      8X  g   Q h\        SSS,          S,          4      P                   ^\        \
        \        ,          \        ,
          ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,          ^,           ,          8X  g   Q h\        SSS,          4      P                  4       \        \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \
        \        ,          \        ,
          ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SSS,          4      P                   ^\        \
        \        ,          \        ,
          ,          \
        \        ,          \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,          ^,           ,          8X  g   Q h\        SS,          V 4      P                  4       \        \        \        \        ,           ,          \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \        ) \        \        ^,          ,          ,           \
        \        ,          ,           ,          \        \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        SS,          V ^4      P                   ^\        ) \        ) \        \        ^,          ,          ,           \
        \        ,          ,           ,          \        \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,          ^,           ,          8X  g   Q h\        SV4      P                  4       \        \        \        \        ,           ,          \        \        ,          \        \        ,          ,           \        ,
          ,          \        \        \        \        ,           ,          \        ) \        ,           \        \        ,          \        \        ,          ,           \        ,
          ,          ,           ,          \        4      8X  g   Q h\        SV,          \        ^^\        4      4      P                  4       ) \        \        ) \        ) \        ,           ,          \        \        ,           ,          \        \        ,          \        \        ,          ,           \        ,
          ,          \        \        \        ,           ,          \        \        \        ,           ,          \        ) \        ,           \        \        ,          \        \        ,          ,           \        ,
          ,          ,           ,          \        4      8X  g   Q h\        SS4      P                  4       \        ^^\        4      8X  g   Q h\        SSV ,          4      P#                  \         4      \        \        \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        \        ) \        \        ^,          ,          ,           \
        \        ,          ,           ,          \        \        ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          ,           \        ^,          ^\        ,          \        ,          \        ,          ,           \        ^,          ,           ,          \        4      8X  g   Q h\        \        ^^\        4      S4      P#                  \         4      \        \        \        \        ,          \        ,           \        \        ,          ,           \        ,
          \        4      8X  g   Q hR# )r/   c                  \   < S S,          S,          ^S S,          S,          ,           ,          # rG   r6   r  s   r8   r9   )test_Feedback_functions.<locals>.<lambda>  s    c#gckQS_=r7   c                  N   < SS,          S SS,          S,          ,           ,          # rz   r6   r?  s   r8   r9   r    s    s3w"s3ws{*:;r7   Nr   )r   r5   r%  r   r   rP   rH   rN   rO   r   r   r   r!   r-   rY   rX   sensitivityrx  )r`   rb   rZ   r[   r\   r]   r^   s     @@@@@r8   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 5r7   c                     \        \        ^,           ^\        4      p \        \        ^,           ^\        4      p\        WR4      p\        W^4      p\        ^^\        4      p\        V\        4      '       g   Q h\        V\        4      '       g   Q hVP
                  V 8X  g   Q hVP
                  V 8X  g   Q hVP                  \        V\        W4      4      8X  g   Q hVP                  \        V\        W4      ) 4      8X  g   Q h\        W4      p\        W4      pW,          V8X  g   Q hW,           V8X  g   Q hVP                  4       \        \        ^,           ^,          \        ^,           \        ^,           ,          ^,           \        4      8X  g   Q hVP                  4       \        \        \        ^,           \        ^,           \        ^,           ,          ^,           ,          ,           ^,           \        ^,           \        ^,           ,          ^,           \        4      8X  g   Q h\        W,          VR4      pV\        \        W4      V4      8X  g   Q hVP
                  W,          8X  g   Q hVP                  \        V\        V\        W4      4      4      8X  g   Q h\        W,          V\        4      pV\        \        W4      V\        4      8X  g   Q hVP
                  W,          8X  g   Q hR# r/   Nr   )
r   r5   r!   r.  r   rK   rL   r    r   r   )	r[   r\   fd1fd2unitrJ  r   fd3r]   s	            r8   test_Feedback_with_Seriesr     sC   
1Q31
%C
1Q31
%C
3R
 C
3Q
CAq!$D c23333c8$$$$ 77c>>77c>>77htVC%5666677htfS&6%67777 
	B	#	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 37C
$C(6#+S111177ci77htVC1A%BCCCC 37C
+C"6##3S!<<<<77cgr7   c                     \        R RRR7      w  rr#rE\        RRR7      w  rgpWV^,          ,          ,           V,          \        ,          V,          p	WH,          p
WV,           ,          pV^,          \        ,          WT,           ,          p\        V) V
\        ,          ^,           ,          V	\        ^,          ,          ^,
          \        4      p\        ^V\        ^,          ,          \        \        ,          ,           \        4      p\        ^V\        ,          \        4      p\        V\        ,          ^\        4      p\        V\        \        4      p\        ^^\        4      p\        VV,          V4      p\        VV,          V,          V4      pV\        \        V\        VV4      4      V4      8X  g   Q hVP                  \        V\        VV4      4      8X  g   Q hVP                  \        V\        V\        V\        VV4      4      4      4      8X  g   Q hWg,          \        ,          \        ^,          ,          V^,          ,          WT,           ,          V\        ^,          ,          \        \        ,          ,           ^,          ,          \        ) V,          V,          \        ^,          W^,          V,          ,           ,          ,           ,          V) \        ,          V,          V,          \        ,          V^,          ,          V\        ,          V,           ,          \        V,          WT,           ,          V\        ^,          ,          \        \        ,          ,           ,          \        ) V,          V,          \        ^,          W^,          V,          ,           ,          ,           ,          ,           ,          \        ^,          V,          V\        ^,          ,          \        \        ,          ,           ,          V) \        ,          V,          V,          \        ,          V^,          ,          V\        ,          V,           ,          \        V,          WT,           ,          V\        ^,          ,          \        \        ,          ,           ,          \        ) V,          V,          \        ^,          W^,          V,          ,           ,          ,           ,          ,           ,          Wg,          \        ,          \        ,          V,          WT,           ^,          ,          V\        ^,          ,          \        \        ,          ,           ,          \        ) V,          V,          \        ^,          W^,          V,          ,           ,          ,           ,          \        ^,          V,          V\        ^,          ,          \        \        ,          ,           ,          V) \        ,          V,          V,          \        ,          V^,          ,          V\        ,          V,           ,          \        V,          WT,           ,          V\        ^,          ,          \        \        ,          ,           ,          \        ) V,          V,          \        ^,          W^,          V,          ,           ,          ,           ,          ,           ,          ,           ,          WT,           ,          ,          pVP                  4       V,
          P                  4       ^ 8X  g   Q hR# )zI_b, I_s, m, h, l2, l1T)realnonnegativezK_D, K_P, v)r  N)r   rU   r   r5   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                         r8   test_issue_26161r  F  s   "#;154IBA"D1IBAQJ!#a'!+G6DR=D	Q
bg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]*^____E!GAqDLArw'AqD1Q3(::QBqDFQT2STPTUVPV;EW<WX[]Z]^_Z_`aZabcZcdeZefgijfjZjlnoplpstltZuaCM2ad7QqS=)A2a46AqD"!tAv+4F+FG[H ILMqDQRFTVWXZ[W[T[^_`a^aTaLbegdghidijkdklmdmnodopqstptdtTAXe1bg1a4!A#61QArqDQRF{AS8STeU MVWYW\]^W^_`W`abWbdfdknocoWo1Wqs]XRT!VadBAaK&88X:<=qDFBq!tGaPQcM<RUWTWXYTYZ[T[\]T]^_T_`acd`dTdfhijfjmnfnToaCM2ad7QqS=)A2a46AqD"!tAv+4F+FGUH =IXIMJ LN7MTVD NNt#--/1444r7   c                  X   \        ^\        \        4      p \        \        \        ^,          ^,
          \        4      p\        \        \        ^,           \        4      p\        \        \        ^,          ^,           \        4      p\        W.W#..4      p\        W.W0..4      p\        W#.W..4      p\        WE4      pVP                  WER38X  g   Q hVP
                  V8X  g   Q hVP                  V8X  g   Q hVP                  \        8X  g   Q hVP                  R8X  g   Q hV) ) V8X  g   Q h\        WT^4      pVP                  WT^38X  g   Q hVP
                  V8X  g   Q hVP                  V8X  g   Q hVP                  \        8X  g   Q hVP                  ^8X  g   Q h\        V\        We4      4      p	V	P                  V\        We4      R38X  g   Q hV	P
                  V8X  g   Q hV	P                  \        We4      8X  g   Q hV	P                  \        8X  g   Q hV	P                  R8X  g   Q h\        ^^\        ,          .^ ^..4      p
\        P                  ! V
\        4      ;r\        W4      pVP                  WR38X  g   Q hVP
                  VP                  u;8X  d	   V8X  g   Q h Q hR# r  )r   r5   r"   r%   rM   r  r  r/  signr#   r   rg  )r[   r\   r]   r^   rX  r[  r]  r  r  r  matr  
controllerr  s                 r8   test_MIMOFeedback_constructionr   f  sM   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C"SJ
#;<E"SJ
#;<E"SJ
#;<E	e	#B77uR((((77e77e66Q;;77b==S6R<<	eA	&B77uQ''''77e77e66Q;;77a<<	eZ5	6B77uj6;;;;77e77j....66Q;;77b==
1ac(QF#
$C.::3BBD	d	'B77t,,,,77bgg%%%%%%r7   c                  @  aaaaaa	a
aaa \        ^\        \        4      o\        \        \        ^,          ^,
          \        4      o\        \        \        ^,
          \        4      p \        \        \        ^,          ^,           \        4      p\        ^^\        4      p\        R\        ^,
          \        4      p\        SS.W..4      o\        SV .VS..4      o\        P                  ! \	        ^4      \        R7      o\        SV.W"..4      o	\        V ) V .W..4      o
\        V ) ..4      o\        W..4      o\        \        VV3R l4       \        \        VVV3R l4       \        \        VV3R l4       \        \        V3R l4       \        \        VV3R l4       \        \        V	V
3R l4       \        \        V	V
3R l4       \        \        V3R	 l4       \        P                  ! \	        ^4      \        R7      o\        \        VV3R
 l4       R# )r/   r/  c                     < \        S S4      # rz   r%   r  s   r8   r9   *test_MIMOFeedback_errors.<locals>.<lambda>  s    l34r7   c                  0   < \        \        S S4      S4      # rz   )r%   r$   )rX  r[  r]  s   r8   r9   r%    s    l<u+EuMr7   c                     < \        S S^4      # rG   r$  )rX  tfm_6s   r8   r9   r%        |E5!<r7   c                     < \        S S 4      # rz   r$  )tfm_7s   r8   r9   r%    s    |E59r7   c                     < \        S SR4      # )rB   r   r$  rZ  s   r8   r9   r%    s    |E5"=r7   c                     < \        SS ^4      # rG   r$  rm  r^  s   r8   r9   r%    r)  r7   c                     < \        S S) 4      # rz   r$  r.  s   r8   r9   r%    s    |EE6:r7   c                     < \        S S ^4      # rG   r$  rc  s   r8   r9   r%    r)  r7   c                     < \        S S^4      # rG   r$  )rX  tfm_8s   r8   r9   r%    r)  r7   Nr   )	r   r5   r"   rg  r   r-   rY   rX   rH   )r]   r^   r`   rb   r[   r\   rX  r[  r]  rm  r^  r(  r+  r2  s       @@@@@@@@@@r8   test_MIMOFeedback_errorsr3    sw   
1a
#C
1adQh
*C
1a!eQ
'C
1adQh
*C
1a
#C
2q1ua
(C"S#J
#;<E"S#Jc
#;<E"..s1v1=E"S#J
#;<E"cT3K##<=E"cTF8,E"SJ<0E 945
9MN
:<=
:9:
:=>
:<=
::;
:<="..s1v1=E
:<=r7   c            
      Z   \        ^\        \        4      p \        \        \        ^,
          \        4      p\        ^^\        4      p\        R\        ^,
          \        4      p\        P                  ! \	        ^4      \        R7      p\        W.W"..4      p\        V) V.W..4      p\        W.V) V ..4      p\        WV4      p\        V\        Wt) 4      ^4      p	VP                  \        \        P                  ^ .^ \        P                  ..4      8X  g   Q hV	P                  \        R	\        ^,          ,          \        ^,          ,           \        ^,          \        ,
          ^,           ,          ^\        ^,          ,          \        ^,          ,
          \        ^,          \        ,
          ^,           ,          .\        ^,          ) \        ..4      8X  g   Q hVP                  4       \        \        ^^\        ,          \        4      \        ^^\        4      3\        ^^\        4      \        ^^\        4      334      u;8X  d   VP                  \        4      8X  g   Q h Q hV	P                  RRR7      \        \        \        ^,          ) ^\        ^,          ,          ,           ^\        ^,          ,          ,
          \        ^,          ,           \        ^,          ^\        ^,          ,          ,
          ^\        ^,          ,          ,           ^\        ^,          ,          ,
          \        ,           \        4      \        R	\        ^,          ,          ^\        ^,          ,          ,           \        ^,          \        ,
          ^,           \        4      3\        ^ ^\        4      \        \        ^,          ) \        ,           ^\        4      334      8X  g   Q hV	P                  RR7      \        \        \        ^\        ^,          ,          \        ^,          ,
          ,          \        ^,          \        ,
          ^,           ,          R	\        ^,          ,          \        ^,          ,           \        ^,          \        ,
          ^,           ,          ,           \        \        ^,          \        ,
          ^,           ^,          ,          \        4      \        R	\        ^,          ,          ^\        ^,          ,          ,           \        ^,          \        ,
          ^,           \        4      3\        ^ ^\        4      \        \        ^,          ) \        ,           ^\        4      334      8X  g   Q hV	P                  4       \        \        \        R	\        ^,          ,          \        ^\        ,          ^,
          ,          ,           ^,           ,          \        ^,          \        ,
          ^,           \        4      \        R	\        ^,          ,          \        ^,
          ,          \        ^,          \        ,
          ^,           \        4      3\        ^ ^\        4      \        \        ^\        ,
          ,          ^\        4      334      8X  g   Q hV	P                  RR7      \        \        \        ^,          ) \        ,           \        ^,          \        ,
          ^,           \        4      \        R	\        ^,          ,          ^\        ^,          ,          ,           \        ^,          \        ,
          ^,           \        4      3\        ^ ^\        4      \        \        ^,          ) \        ,           ^\        4      334      8X  g   Q hVP                  4       ) V) P                  4       8X  g   Q hR# )
r/   r"  FT)cancelr   )r5  )r   Nr   r   )r   r5   r"   rg  r   r%   r#   r  r   r   Halfr   rx  )
r[   r\   r]   r^   rX  r[  r]  rm  F_1F_2s
             r8   test_MIMOFeedback_functionsr9    s   
1a
#C
1a!eQ
'C
1a
#C
2q1ua
(C"..s1v1=E"SJ
#;<E"cT3K##<=E"SJ#s#<=E u
$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)))r7   c                    aa \        \        \        ^,          ,          \        \        ,          ,           \        ,
          \        \        ,           \        4      o\        \        \
        ,          \
        \        ,          ,           \        ,
          \
        \
        4      o\        \        ) ..4      p V P                  V P                  V P                  3u;8X  d	   R
8X  g   Q h Q hV P                  \        \        \        \        ) 4      4      4      8X  g   Q hV P                  \        8X  g   Q h\        \        \        ) .\        S..4      pVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q hVP                  \        \        \        \        \        ) 4      \        \        S4      4      4      8X  g   Q hVP                  \        8X  g   Q h\        \        \        .\        S) .S) \        ..4      pVP                  VP                  VP                  3u;8X  d	   R8X  g   Q h Q hVP                  \        \        \        \        \        4      \        \        S) 4      \        S) \        4      4      4      8X  g   Q hVP                  \        8X  g   Q h\!        \"        V3R l4       \!        \"        VV3R l4       \!        \"        V3R l4       \!        \"        V3R l4       \!        \$        R 4       \!        \$        R 4       \!        \"        V3R l4       \!        \"        R 4       R	# )rB   c                  6   < \        \        .\        .S ..4      # rz   r"   rf  re  r   s   r8   r9   :test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KLr7   c                  6   < \        \        S .\        S..4      # rz   r"   rf  rd  r   s   r8   r9   r=    s    5SzC:6NOr7   c                  4   < \        \        .\        S ..4      # rz   r?  r   s   r8   r9   r=    s    5usCj6IJr7   c                  4   < \        \        \        .S ..4      # rz   r?  r   s   r8   r9   r=    s    5SzC56IJr7   c                  R    \        \        \        .\        \	        ^^.4      ..4      # rG   )r"   rf  re  rd  r   r6   r7   r8   r9   r=    s"    4sCj3PQSTvBW5XYr7   c                  R    \        \        \        ^^.4      .\        \        ..4      # rG   )r"   rf  r   rd  re  r6   r7   r8   r9   r=    s!    4sFAq6N6KcSVZ5XYr7   c                  0   < \        \        \        S .4      # rz   r<  r   s   r8   r9   r=    s    5sCoFr7   c                  "    \        \        .4      # rz   )r"   rf  r6   r7   r8   r9   r=    s    5se<r7   N)r/   r/   r  )rC   rB   )r   rO   r5   rP   rN   rH   r"   rd  rh  ri  rj  rM   r   r/  rf  re  r-   rX   rY   )tfm3_r  r  r^   r`   s      @@r8   (test_TransferFunctionMatrix_constructionrG    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
:<=r7   c                  .   \        \        \        ^,          ,          \        \        ,          ,           \        ,
          \        \        ,           \        4      p \        \        \        ^,           ,          \        ^,
          ,          \        ^,          ^,           ,          ^.\        \        \        ^,           ,          \        \        ^,          ^,           ,          ,          ..4      p\        ^\        ,          ^,           \        ^,          ^	,
          ,          ..4      p\        ^^.^^..4      p\        P                  ! V\        4      \        \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        ^^\        4      .\        \        ^\        4      \        \        \        \        4      ..4      8X  g   Q h\        P                  ! V\        4      \        \        ^\        ,          ^,           \        ^,          ^	,
          \        4      ..4      8X  g   Q h\        P                  ! V\        4      \        \        ^^\        4      \        ^^\        4      .\        ^^\        4      \        ^^\        4      ..4      8X  g   Q h\        \        .\        ..4      pV) \        \        ) .\        ) ..4      8X  g   Q h\        \        \        \        .V \        ) \        ) ..4      pV) \        \        ) \        ) \        ) .V ) \        \        ..4      8X  g   Q h\        P                  ! V\        4      p\        \        \        \        ,          \        ,          \        \        ^,          ,          \        4      \        \        \        ,          \        \        ^,          \        ,
          ,          \        4      ..4      pVP                  \        ^4      \        \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        ^^\        4      .\        ^^\        4      \        ^\        \        4      ..4      8X  g   Q hVP                  \        ^/4      \        \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        ^^\        4      .\        ^^\        4      \        ^\        \        4      ..4      8X  g   Q hVP                  \        ^\        ^/4      \        \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        ^^\        4      .\        ^^\        4      \        ^\        \        4      ..4      8X  g   Q hVP                  \        ^4      \        \        ^\        ,          \        ,          \        \        ^,          ,          \        4      \        ^\        ,          \        \        ) \        ^,          ,           ,          \        4      ..4      8X  g   Q hVP                  \        ^4      \        \        \        \        ,          \        ,          \        ^,          \        4      \        \        \        ,          \        ) \        ^,          ,           \        4      ..4      8X  g   Q hVP                  \        ^ 4      \        \        ^ \        \        ^,          ,          \        4      \        \        \        ,          \        \        ^,          ,          \        4      ..4      8X  g   Q hVP                  \        ^\        ^\        \        /4      \        \        \        \        ,          \        ^,          \        4      \        \        \        ) \        ^,          ,           \        4      ..4      8X  g   Q hVP                  \!        ^4      ^,          \"        ,           4      \%        ^\        ,          \        ,          ^\        ,          ,          ^\"        ,          \        ,          \        ,          ^\        ,          ,          ,
          \"        \        ,          \        ) \        ,          ^\        ,          ^,          ,
          \"        \        ,          ,           ,          \        R	\        ,          \        ,          ^\        ,          ^,          ,
          ^\"        ,          \        ,          ,           ,          ,           ..4      8X  g   Q hVP'                  4       \        \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        \        ^\        4      .\        ^^\        4      \        \        \        \        4      ..4      8X  g   Q hVP'                  4       \        \        \        \        ,          \        ,          \        \        ^,          ,          \        4      .\        \        \        ,          \        \        ) \        ^,          ,           ,          \        4      ..4      8X  g   Q hVP'                  4       P'                  4       V8X  g   Q hVP'                  4       P'                  4       V8X  g   Q hVP)                  4       \+        ^4      ) ^,          \+        ^4      \"        ,          ^,          ,
          \+        ^4      ) ^,          \+        ^4      \"        ,          ^,          ,           \+        ^4      ^,          \+        ^4      \"        ,          ^,          ,
          \+        ^4      ^,          \+        ^4      \"        ,          ^,          ,           .. .. ^ ...8X  g   Q hVP)                  4       ^ ^ .\+        \        4      \+        \        4      ) ...8X  g   Q hVP)                  4       \,        \.        ) \+        \.        ^,
          \.        ^,           ,          4      ,           ,          \,        \.        ) \+        \.        ^,
          \.        ^,           ,          4      ,
          ,          .. \        ) \        ,          ..\        ) .\,        \.        ) \+        \.        ^,
          \.        ^,           ,          4      ,           ,          \,        \.        ) \+        \.        ^,
          \.        ^,           ,          4      ,
          ,          .\        ) \        ,          ...8X  g   Q hVP1                  4       . R
O. .. . ..8X  g   Q hVP1                  4       ^ .^ ...8X  g   Q hVP1                  4       . . \        \        ,          ..\        ) ^\        ,          ,          \+        ^\        ,          \        ,          \        ^,          ,           4      ^\        ,          ,          ,
          \        ) ^\        ,          ,          \+        ^\        ,          \        ,          \        ^,          ,           4      ^\        ,          ,          ,           .. \        \        ,          ...8X  g   Q h\        \3        \        ^\        ^,          ^,
          \        4      \        \        ^,          ^\        ,          ,
          ^,           ^\        4      \        ^\        \        4      4      ..4      p\        \5        \        \        ^,          ^,
          ^\        ^,          ,          \        ^,          ,
          ^\        ,          ,
          ^,           \        4      \        ^\        ^,          ,
          ^\        ^,          ,          \        ^,          ,
          ^\        ,          ,
          ^,           \        4      4      ..4      p	VP7                  4       \        \        \        ^,          ^\        ,          ,
          ^,           \        \        ^,          ^,
          ,          \        4      ..4      8X  g   Q hV	P7                  4       \        \        ^^\        ^,          ,          \        ^,          ,
          ^\        ,          ,
          ^,           \        4      ..4      8X  g   Q hVP9                  4       \        \        \        ^,
          ,          \        ^,           ,          \        ^,          ^,           \        4      \        ^^\        4      \        \        ^\        4      \        \        \        \        4      .8X  g   Q hVP9                  4       \        \        \        ,          \        ,          \        \        ^,          ,          \        4      \        \        \        ,          \        \        ) \        ^,          ,           ,          \        4      .8X  g   Q hVP9                  4       \3        \        ^\        ^,          ^,
          \        4      \        \        ^,          ^\        ,          ,
          ^,           ^\        4      \        ^\        \        4      4      .8X  g   Q hV	P9                  4       \5        \        \        ^,          ^,
          ^\        ^,          ,          \        ^,          ,
          ^\        ,          ,
          ^,           \        4      \        ^\        ^,          ,
          ^\        ^,          ,          \        ^,          ,
          ^\        ,          ,
          ^,           \        4      4      .8X  g   Q hVP;                  4       \        \        \        \        R,
          ,          \        R,           ,          \        ^,          R,           \        4      \        R^\        4      3\        R\        ,          ^\        4      \        \        \        \        4      334      8X  g   Q hVP                  \        R\        R\        ^/4      P;                  4       \        \        R\        \        4      \        R\        ,          R\        ^,          ,          R,
          \        4      334      8X  g   Q h\        \        \        ^,          \        ^,          ,           \        ,           \        \        ^,          ,
          \        4      \        \        ^,           \        ^,
          ,          \        ^,
          \        ^,           ,          \        4      ..4      p
V
P=                  4       \=        V
4      u;8X  dy   \        \        \        ^,          ) \        ^,          ,
          ^,
          \        ^,
          \        4      \        \        ^,           \        ^,           \        4      334      8X  g   Q h Q hVP?                  4       \        \        \        ^,          ^\        ^,          ,          ,
          ^\        ,          ,
          \        ^,          ^,           \        4      \        ^^\        4      3\        \        ^\        4      \        \        \        \        4      334      8X  g   Q hV
P?                  4       \        \        \        ^,          \        ^,          ,           \        ,           \        ^,          ) \        ,           \        4      \        \        ^,          ^\        ,          ,           ^,
          \        ^,          ^\        ,          ,           ^,
          \        4      334      8X  g   Q hR# )rB   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @Nr   )r   r   rC   ) r   rO   r5   rP   rN   r   rH   r"   rg  rf  re  rd  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              r8   %test_TransferFunctionMatrix_functionsrS    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r7   c                     \        ^\        \        ,          \        ,           \        4      p \	        V \
        R4      w  r\        \        V^ ,          ,          V^,          ,           \        V^ ,          ,          V^,          ,           \        4      p\        \        \
        ,          ^\        \        \
        ,          ^,          ,           ,          ,          \
        ^\        \        \
        ,          ^,          ,           ,          ,          ,           \        \        ) \        \
        ,          ^,          ,           \        \        \
        ,          ^,          ,           ,          ,           \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q h\        ^\        \        ,          \        ,           \        4      p \	        V \
        ^ 4      w  r\        V^ ,          \        V^ ,          ,          V^,          ,           \        4      p\        \
        \        ,          \        \        ) \        \
        ,          ,           \        ,          ,           \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q h\        ^\        \        ,          \        ,           \        4      p \	        V \
        ^4      w  r\        \        V^ ,          ,          \        V^ ,          ,          V^,          ,           \        4      p\        \        \
        ,          \        \        \
        ,          ,           ,          \        \        \        \        \
        ,          ,           ,          ,
          \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q h\        ^\        \        ,          \        ,           \        4      p \	        V \
        R4      w  r\        \        V^ ,          ,          V^,          ,           \        V^ ,          ,          V^,          ,           \        4      p\        \        ^,          \
        ,          ^
\        ^\        ,          \
        ,          ^
,          ,           ,          ,          ^\
        ,          ^
\        ^\        ,          \
        ,          ^
,          ,           ,          ,          ,           \        \        ) ^\        ,          \
        ,          ^
,          ,           \        ^\        ,          \
        ,          ^
,          ,           ,          ,           \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q hR# )r/   r0   g333333?N)
r   rS   r5   rT   r'   Tr   Zeror   rK   )rZ   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r8   test_TransferFunction_gbtr^  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Vr7   c                     \        ^\        \        ,          \        ,           \        4      p \	        V \
        4      w  r\        \        V^ ,          ,          V^,          ,           \        V^ ,          ,          V^,          ,           \        4      p\        \        \
        ,          ^\        \        \
        ,          ^,          ,           ,          ,          \
        ^\        \        \
        ,          ^,          ,           ,          ,          ,           \        \        ) \        \
        ,          ^,          ,           \        \        \
        ,          ^,          ,           ,          ,           \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q hR# r/   N)
r   rS   r5   rT   r(   rU  r   rV  r   rK   )rZ   rW  rX  rY  rZ  s        r8   test_TransferFunction_bilinearra    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[[[[[r7   c                  6   \        ^\        \        ,          \        ,           \        4      p \	        V \
        4      w  r\        V^ ,          \        V^ ,          ,          V^,          ,           \        4      p\        \
        \        ,          \        \        ) \        \
        ,          ,           \        ,          ,           \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q hR# r`  )
r   rS   r5   rT   r)   rU  r   rV  r   rK   )rZ   rW  rX  r[  rZ  s        r8   "test_TransferFunction_forward_diffrc    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Zr7   c                     \        ^\        \        ,          \        ,           \        4      p \	        V \
        4      w  r\        \        V^ ,          ,          V^,          ,           \        V^ ,          ,          V^,          ,           \        4      p\        \        \
        ,          \        \        \
        ,          ,           ,          \        \        \        \        \
        ,          ,           ,          ,
          \        4      p\        P                  VP                  4       VP                  4       ,
          P                  4       P                  8X  g   Q hR# r`  )
r   rS   r5   rT   r*   rU  r   rV  r   rK   )rZ   rW  rX  r\  rZ  s        r8   #test_TransferFunction_backward_diffre    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[[[[[r7   c            	        aaa \        ^
\        ^,          ^,           \        4      p \        \        ^,          ^
\        4      p\        ^\        \        ,          \        ,           \        4      o\        \        ^,           \        \        \        ,          4      ,          \        ^,          ^,           \        4      o\        V.S..4      o\        V 4      R^\        ^\        ^4      ,          4      ,          \        ,          ,           8X  g   Q h\        V4      ^ 8X  g   Q h\        \        V3R l4       \        \        V3R l4       \        \        V3R l4       R# )r   c                     < \        S 4      # rz   r+   r   s   r8   r9   4test_TransferFunction_phase_margin.<locals>.<lambda>  s
    S(9r7   c                     < \        S 4      # rz   rh  r   s   r8   r9   ri    s
    |C0r7   c                  ,   < \        \        S 4      4      # rz   )r+   r#   tf_ms   r8   r9   ri    s    |Jt,<=r7   NiL)r   rH   r5   rS   rT   r   r   r"   r+   r   r   r   r-   r   rX   r[   r\   r]   r^   rm  s     @@@r8   "test_TransferFunction_phase_marginro    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
:=>r7   c                  P  aaa \        \        ^,          ^\        ^,           ,          \        ^,
          ,          \        ^
,
          ,          \        4      p \        \        ^,          ^\        ,          ,           ^,           ^\        4      p\        ^\        \        ,          \        ,           \        4      o\        \        ^,           \	        \        \
        ,          4      ,          \        ^,          ^,           \        4      o\        V.S..4      o\        V 4      R\        \        ^4      R,          4      ,          \        ^
4      ,          8X  g   Q h\        V4      \        8X  g   Q h\        \        V3R l4       \        \        V3R l4       \        \        V3R l4       R# )rB   i  c                     < \        S 4      # rz   r,   r   s   r8   r9   3test_TransferFunction_gain_margin.<locals>.<lambda>  s
    C(8r7   c                     < \        S 4      # rz   rr  r   s   r8   r9   rs    s
    {3/r7   c                  ,   < \        \        S 4      4      # rz   )r,   r#   rl  s   r8   r9   rs    s    {:d+;<r7   Ni)r   r5   rS   rT   r   r   r"   r,   r   r   r	   r-   r   rX   rn  s     @@@r8   !test_TransferFunction_gain_marginrv    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
:<=r7   c            
         \        ^ ^.^^ ..4      p \        ^^ .4      p\        ^ ^..4      p\        ^ .4      p\        WW#4      pVP                  \        ^ ^.^^ ..4      8X  g   Q hVP                  \        ^^ .4      8X  g   Q hVP                  \        ^ ^..4      8X  g   Q hVP
                  \        ^ .4      8X  g   Q hVP                  \        ^ ^.^^ ..4      \        ^.^ ..4      \        ^ ^..4      \        ^ ..4      38X  g   Q h\        \        \        .4      \        \        .4      \        \        .4      \        \        .4      4      pVP                  \        \        ..4      8X  g   Q hVP                  \        \        ..4      8X  g   Q hVP                  \        \        ..4      8X  g   Q hVP
                  \        \        ..4      8X  g   Q hVP                  \        \        ..4      \        \        ..4      \        \        ..4      \        \        ..4      38X  g   Q h\        \        RR.^^ ..4      \        R^ .^ ^..4      \        ^ ^.^ ^..4      \        ^^.^^..4      4      pVP                  \        RR.^^ ..4      8X  g   Q hVP                  \        R^ .^ ^..4      8X  g   Q hVP                  \        ^ ^.^ ^..4      8X  g   Q hVP
                  \        ^^.^^..4      8X  g   Q hVP                  \        RR.^^ ..4      \        R^ .^ ^..4      \        ^ ^.^ ^..4      \        ^^.^^..4      38X  g   Q h\        \        \        .\        \        ..4      p\        \        \        .\        \        ..4      p\        \        \         .\"        \$        ..4      p	\        \&        \(        .\*        \,        ..4      p
\        WxW4      pVP                  \        \        \        .\        \        ..4      8X  g   Q hVP                  \        \        \        .\        \        ..4      8X  g   Q hVP                  \        \        \         .\"        \$        ..4      8X  g   Q hVP
                  \        \&        \(        .\*        \,        ..4      8X  g   Q hVP                  \        \        \        .\        \        ..4      \        \        \        .\        \        ..4      \        \        \         .\"        \$        ..4      \        \&        \(        .\*        \,        ..4      38X  g   Q h\        4       pVP                  \        ^ ..4      \        ^ ..4      \        ^ ..4      \        ^ ..4      38X  g   Q h\        ^ ^.^^ ..4      p\        ^^.4      p\        W4      pVP                  \        ^ ^.^^ ..4      8X  g   Q hVP                  \        ^^.4      8X  g   Q hVP                  \        ^ ^ ..4      8X  g   Q hVP
                  \        ^ ..4      8X  g   Q hVP                  \        ^ ^.^^ ..4      \        ^.^..4      \        ^ ^ ..4      \        ^ ..4      38X  g   Q hVP.                  R8X  g   Q hVP.                  R8X  g   Q hVP.                  R8X  g   Q hVP.                  R8X  g   Q hVP.                  R8X  g   Q hVP.                  R8X  g   Q h\1        \2        R 4       \1        \2        R 4       \1        \2        R 4       \1        \2        R 4       \1        \4        R 4       \1        \4        R	 4       R
# )r   r0   TFc            	          \        \        \        \        ^,           ^,          .4      \        \        ^,           .4      \        \        ^,          ^,
          .4      \        ^\        ,          .4      4      # rG   r&   r   r5   r6   r7   r8   r9   .test_StateSpace_construction.<locals>.<lambda>%  sG    z&!acAX*?1*0!Q$(*<facUm Mr7   c            	          \        \        \        .4      \        \        ^,           \        ^,          ^,           .4      \        \        ^,          ^,
          .4      \        ^\        ,          .4      4      # rG   ry  r6   r7   r8   r9   rz  '  sG    z&!+vqsAqD1Ho7N*0!Q$(*<facUm Mr7   c            
         \        \        \        .4      \        \        ^,           .4      \        \        ^,          ^,
          .\        ^,          ^\        ,          ,           ^,           ..4      \        ^\        ,          .4      4      # rG   ry  r6   r7   r8   r9   rz  )  sZ    z&!+vqse}*01a4!8*q!taczA~>N1O*PRXZ[\]Z]Y^R_ ar7   c            
         \        \        \        ) \        ) .\        ^ ..4      \        \        ^,          ^ .^ \        ..4      \        ^ \        ..4      \        ^\        ,          ^\        ,          .\        \        ..4      4      # r=   ry  r6   r7   r8   r9   rz  +  sf    z&A2r(QF1C*D061a1a&7I0J06Ax0@061ac
QF7K0L Nr7   c                  `    \        \        ^,          \        ^,           ^\        ,          ^4      # rE   )r&   r5   r6   r7   r8   r9   rz  1  s    jAqsAaC;r7   c                  \    \        \        ^R.4      \        R.4      \        ^.4      ^ 4      # )rB   r0   r   )r&   r   r6   r7   r8   r9   rz  2  s'    jC)962$<)/a9r7   N      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                   r8   test_StateSpace_constructionr    s   	!Q!Q 	!B	AB	!Q	B	B
RR
$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
RR
$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 :r7   c                    a
aaa \        ^^.^R	..4      p \        ^^.R	R	..4      p\        ^R
.^ ^..4      p\        ^^.^R..4      p\        WW#4      o
\        . RO. RO. RO.4      p\        ^^.R	R	.R^..4      p\        . RO. RO.4      p\        R^.^ ^..4      p\        WEWg4      o\        4       o\        \        ^.4      \        ^.4      \        ^.4      \        ^.4      4      o\        \        . RO. RO. RO. RO. RO.4      \        ^^.R	R	.^^.R	R	.R^..4      \        . RO. RO.4      \        ^^.^^ ..4      4      p\        \        . RO. RO. RO. RO. RO.4      \        ^^.R	R	.R^.R^.^R..4      \        . R O. R"O.4      \        R!^.R^..4      4      p	S
S,           V8X  g   Q hS
S,          V	8X  g   Q hSR,           \        \        ^ ..4      \        ^ ..4      \        ^ ..4      \        R..4      4      8X  g   Q hSR,          \        \        ^..4      \        ^..4      \        R..4      \        R..4      4      8X  g   Q hRS,          \        \        ^..4      \        R..4      \        ^..4      \        R..4      4      8X  g   Q h\        \        V
V3R l4       \        \        VV3R l4       R# )#r3   r0   r        @g      @r   c                     < S S,           # rz   r6   )r  r  s   r8   r9   %test_StateSpace_add.<locals>.<lambda>r  r   r7   c                     < S S,          # rz   r6   )r  r  s   r8   r9   r  s  s	    s3wr7   Nr   r   r   r3   rB   r   r   r   rB   r   rC   r   r3   rB   r   r/   r3   rC   r3   r/   r   r   r   rB   r   r   r   r   r   r   r   r3   rB   r   r   r   r   r   r   r   rB   r   rC   rB   r  r3   rB   r   r   r/   r/   r3   rC   )r   r3   rB   r   r   )r   r   r   r   r   )rB   r   rC   r   r   )      r3   r/   )r  r   rB   r   )   r  r   rB   r  )rC   r   r  r   r/   )r   r&   r-   r   )r  r  r  r  A2B2C2D2expected_addexpected_mulr  r  r  r  s             @@@@r8   test_StateSpace_addr  4  s   	!QB 	!B	!QR!	"B	!R!Q 	!B	!QB 	!B
RR
$C	K	2	3B	!QR"a)	*B	I&	'B	"a!Q 	!B
RR
$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_````
:()
:'r7   c                     \        \        \        .\        \        ..4      p \        \
        \        .\        \        ..4      p\        \        \        .\        \        .\        \        ..4      p\        \        \        .\        \        .\        \         ..4      p\#        WW#4      pV) p\        R^.^R..4      p\        ^R.4      p\        R^..4      p\        ^.4      p	\#        WgW4      p
V\#        \        \        \        .\        \        ..4      \        \
        \        .\        \        ..4      \        \        ) \        ) .\        ) \        ) .\        ) \        ) ..4      \        \        ) \        ) .\        ) \        ) .\        ) \         ) ..4      4      8X  g   Q hV
) \#        \        R^.^R..4      \        ^.R..4      \        ^R..4      \        R..4      4      8X  g   Q hV) V8X  g   Q hV
) ) ) ) V
8X  g   Q hR# r  )r   rN   rO   rP   r  rQ   rR   rW   r  r  r   r  r  r   r   r   r  r&   )ABCDSSSS_neg	state_mat	input_mat
output_matfeedforward_matsystems              r8   test_StateSpace_negationr  u  s   R2r(#$AR2r(#$AR2r(RH-.AR2r(RH-.A	A!	BSFQ!R)*I2wI"a	"JaSkO	jJF6B88% &B88% &RC":C":C":' ( RC":C":C":' (		)
) 
) 
) 76B88% &Q4+&Ar7)$B4&>		## # # 7b==z]v%%%r7   c                  
   \        \        \        .4      \        \        ^,           ^,          .4      \        \        ^,          ^,
          .4      \        ^\        ,          .4      4      p \        \        \        \        ,           .4      \        \        ^,           \        ^,
          ,          .4      \        \        ^,          \        ^,          ,
          .4      \        \        \        ,
          .4      4      pV P	                  \        ^/4      \        \        ^..4      \        ^$..4      \        ^..4      \        ^
..4      4      8X  g   Q hVP	                  \        ^/4      \        \        \        ^,           ..4      \        ^ ..4      \        ^\        ^,          ,
          ..4      \        \        ^,
          ..4      4      8X  g   Q hV P                  \        \        /4      \        \        \        ..4      \        \        ^,           ^,          ..4      \        \        ^,          ^,
          ..4      \        ^\        ,          ..4      4      8X  g   Q hVP                  \        \        \        \        /4      \        \        \        \        ,           ..4      \        \        ^,           \        ^,
          ,          ..4      \        \        ^,          ) \        ^,          ,           ..4      \        \        \        ,
          ..4      4      8X  g   Q h\        \        ,          \        ,           p\        \        ^,          ,          \        \        ,          ,           \        ,           p\        \        V.4      \        V.4      4      p\        \        ^\        ,          ^,           ..4      \        ^\        ^,          ,          ^\        ,          ,           ^,           ..4      \        ^ ..4      \        ^ ..4      4      p\        \        R\        ,          R,           ..4      \        R\        ^,          ,          R\        ,          ,           R,           ..4      \        ^ ..4      \        ^ ..4      4      pVP	                  \        ^\        ^\        ^\        ^\        ^/4      V8X  g   Q hVP	                  \        ^\        ^\        ^\        ^\        ^/4      P                  4       V8X  g   Q hVP                  4       V8X  g   Q hR# )r/   r   r   r   r   r   N)r&   r   r5   rH   r   r   rS   rT   rO   rN   rW   rR   rQ   r   )r  r  r   r   Gexpectexpect_s          r8   !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$$$r7   c            	      v   \        RR.^R..4      p \        ^^.4      p\        ^^..4      p\        ^ .4      p\        WW#4      p\        \        \        \        .\        \
        ..4      \        \        .\        ..4      \        \        \        ..4      R7      pVP                  \        4      pV) P                  \        4      pV^ ,          ^ ,          pV^ ,          ^ ,          p	V\        ^\        ,          ^;,           \        ^,          ^\        ,          ,           ^,           \        4      8X  g   Q hV	P                  VP                  ) 8X  g   Q hV	P                  VP                  8X  g   Q h\        . RO. RO. RO.4      p
\        . RO. RO. RO.4      p\        . RO. RO. RO.4      p\        . RO. RO. RO.4      p\        WW4      pVP                  \        4      pV^ ,          ^ ,          \        R\        ^,          ,          R\        ^,          ,          ,           R\        ,          ,
          R,           R\        ^,          ,          R\        ^,          ,          ,           R\        ,          ,
          R,
          \        4      8X  g   Q hV^ ,          ^,          \        R\        ^,          ,          R\        ^,          ,          ,           R\        ,          ,
          R	,
          R\        ^,          ,          R\        ^,          ,          ,           R\        ,          ,
          R,
          \        4      8X  g   Q hV^ ,          ^,          \        R\        ^,          ,          R
\        ,          ,           R,
          R\        ^,          ,          R\        ^,          ,          ,           R\        ,          ,
          R,
          \        4      8X  g   Q hVP                  \        4      \        \        ) \        \        ,          \
        \        ,          ,
          \        \        ,          ,           ,          \        \        ) \        ,          \        \        ,          ,           \        \        ,          ,           ,          ,
          \        ) \
        ,          \        \        ,          ,           \        \        ,          ,           \
        \        ,          ,           \        ^,          ,
          \        4      ..8X  g   Q h\        P                  \        4      pV\        \        ^ ^.\         ^,          ) R\         ,          \"        ,          ..4      \        ^ .^..4      \        ^^ ..4      \        ^ ..4      4      8X  g   Q hVP                  \        4      ^ ,          ^ ,          \        8X  g   Q h\%        \&        R 4       R# )r   )r  r  r0   r   r   g      %@r  g      @g      @g      @r   c                     \        \        \        ^,          ,          \        ^,          ,           \        \        ,          ,
          \        ,           \        \        ^,          ,
          \        4      P                  \        4      # rE   )r   rT   r5   rH   rS   rx  r&   r6   r7   r8   r9   !test_conversion.<locals>.<lambda>  sB    /!Q$A!0Ca0GQPQTSTU]]^hir7   Nr   r   r   )r  r   rC   )r/   r   r/   )rB   r/   r/   )r0   r   r/   )r   r/   rB   )rB   rB   rC   r   r/   r   )r   rB   r/   )r/   r   rB   )rB   rB   r   )r/   r/   r/   )rC   rB   r/   )r   r&   rN   rO   rP   r  rR   rW   r   r  rx  r   r5   rK   rL   rf  r   r%  r-   rX   )r  r  r  r  r   H3tm1tm2r[   r\   r  r  r  r  r   tm3r  s                    r8   test_conversionr    s7   	"bAr7#	$B	AB	!Q	B	B	BB	#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	BB	#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jr7   c                     \        ^ ^.RR..4      p \        ^ .^..4      p\        ^R..4      p\        ^ .4      p\        ^.^..4      p\        R4      p\        WW#4      pVP                  4       \        ^ ..4      8X  g   Q hVP                  VR7      \        ^\	        V) 4      ,          ^	\	        RV,          4      ,          ,
          ..4      8X  g   Q h\        R^ .^R..4      p\        ^^4      p\        ^^.4      p	\        WxR7      p
V
P                  V	R7      \        ^\	        RV,          4      ,          .^\	        V) 4      ,          ^\	        RV,          4      ,          ,
          ..4      8X  g   Q h\        R^.RR..4      p\        ^ .^..4      p\        ^ ^..4      p\        ^ .4      p\        ^
.4      p\        WW4      pVP                  WR7      p\        VP                  4       P                  4       P                  4       ^ ,          4      \        RR\	        RV,          ^,          4      ,          \        \        ^4      V,          ^,          4      ,          ,           R\	        RV,          ^,          4      ,          \        \        ^4      V,          ^,          4      ,          ,
          4      8X  g   Q h\        R^.RR..4      p\        ^ .^..4      p\        ^ ^..4      p\        ^
\        V4      ,          ..4      p\        VVV4      p\        VP                  VVR7      ^ ,          P                  4       P                  4       P                  4       4      pV\        R\        V4      ,          R\	        RV,          ^,          4      ,          \        \        ^4      V,          ^,          4      ,          \        V4      ,          ,           R\	        RV,          ^,          4      ,          \        \        ^4      V,          ^,          4      ,          \        V4      ,          ,
          4      8X  g   Q h\        R4      w  ppp\        ^ ^.^ ^ ..4      p\        ^ .^V,          ..4      p\        ^^ ..4      p\        V.^ ..4      p\        \	        V) V,          4      ..4      p\        VVV4      p V P                  VVVR	7      P                  4       p!V!^ ,          P                  ^ ,          ^ ,          VVVV,          ,          ,           ^V^,          V,          ,          ,
          \	        V) V,          4      V^,          V,          ,          ,           8X  g   Q h\        R
4      w
  p"p#p$p%p&p'p(p)p*p+\        V"V#.V$V%..4      p,\        V&V'.4      p-\        V(V)..4      p.\        V*V+.4      p/\        V,V-V.4      p0V0P                  V/R7      ^ ,          p1V1P                  V"^ 3V#^3V$R3V%R3V&^ 3V'^3V(^3V)R3V*^3V+^3.
4      p1V1^\	        V) 4      ,          ^	\	        RV,          4      ,          ,
          8X  g   Q hR# )r   r   )initial_conditions)r  r  )input_vectorr/  r   gY8b4@)r/  r  zm a x_0)r  r  r/  z+a_11 a_12 a_21 a_22 b_1 b_2 c_1 c_2 i_1 i_2Nr   r   r   r  r   )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                                                     r8   test_StateSpace_dsolver    s    
!Q"b"	#B	!qc
	B	!R		B	B	!qc
	BA
RR
$C ::<6A3%=(((:::,3r7Qs2a4y[9P8Q7R0SSSS	"a1b'"	#B	QqB	AB
r
 C:::,3r!t9#qb'	TUVYZ\]^Z^V_T_H_G`7a0bbbb	"a2r(#	$B	!qc
	B	!Q	B	B	B
RR
$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)++++r7   c            	         \        RR.^^ ..4      p \        R^ .4      p\        ^ ^..4      p\        ^.4      p\        WW#4      p\        \        ^^.^R..4      \        ^ ^.^ ^..4      \        R^.^R..4      4      p\        \        ^^.^R..4      \        ^R.^R..4      4      p\        \        \        \        .\        \
        ..4      \        \        .\        ..4      \        \        \        ..4      4      pVP                  4       R8X  g   Q hVP                  4       R8X  g   Q hVP                  4       \        ^ ^.^^ ..4      8X  g   Q hVP                  4       \        R^.^R.^R.R^..4      8X  g   Q hVP                  4       \        ^ .^..4      \        ^.^ ..4      .8X  g   Q hVP                  4       \        R.^.^.R..4      .8X  g   Q hVP                  4       P                  \        ^ 3\        R	3\        ^3\
        R
3\        ^ 3\        ^3.4      pV\        ^ ^.^R
..4      8X  g   Q hVP                  4       R8X  g   Q hVP                  4       R8X  g   Q hVP                  4       \        RR.^ R..4      8X  g   Q hVP                  4       \        . RO. RO.4      8X  g   Q hVP!                  4       \        R.^ ..4      \        R.R..4      .8X  g   Q hVP!                  4       \        ^.^..4      .8X  g   Q hVP!                  4       \        \        .\        ..4      \        \        \        ,          \        \        ,          ,           .\        \        ,          \
        \        ,          ,           ..4      .8X  g   Q hVP                  4       P                  \        ^ 3\        ^3\        R	3\
        R
3\        ^ 3\        ^3.4      p	V	\        ^ ^.^R
..4      8X  g   Q h\        ^ ^.^^ ..4      p
\        ^ .^..4      p\        ^ ^..4      p\        ^ ..4      p\        WW4      p\        \        ^^ .^ ^..4      \        ^.^ ..4      \        ^^ ..4      \        ^..4      4      pVP#                  V4      pVP#                  V4      pVP$                  VP$                  VP$                  ,           8X  g   Q hVP&                  VP&                  VP&                  ,           8X  g   Q hVP(                  VP(                  VP(                  ,           8X  g   Q hVP*                  \        . RO. RO. RO. RO.4      8X  g   Q hVP,                  \        ^ ^ .^^ .^ ^.^ ^ ..4      8X  g   Q hVP.                  \        . RO. RO.4      8X  g   Q hVP0                  \        ^ ^ .^ ^..4      8X  g   Q hVP$                  VP$                  VP$                  ,           8X  g   Q hVP&                  VP&                  VP&                  ,           8X  g   Q hVP(                  VP(                  VP(                  ,           8X  g   Q hVP*                  \        \        \        ^ ^ .\        \
        ^ ^ .. RO. RO.4      8X  g   Q hVP,                  \        \        ^ .\        ^ .^ ^ .^ ^..4      8X  g   Q hVP.                  \        \        \        ^ ^ .. RO.4      8X  g   Q hVP0                  \        ^ ^ .^ ^ ..4      8X  g   Q hR# )r  r0   TFNr  r   r   r   r  r   g      )r/   r   rB   r   r   r/   r   r   r/   r   r   r   r   r   r/   r   r   r   r   r/   )r   r&   rN   rO   rP   r  rR   rW   r   r  is_observableobservability_matrixobservable_subspacer   is_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesrj  ri  r  r  r  r  )A_matB_matC_matD_matSS1SS2SS3SS4QoQcr  r  r  r  r  r  r  r  s                     r8   test_StateSpace_functionsr    s    T2JA'(EC8EQF8EA3KE
U5
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
RR
$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,<%====r7   c                     \        ^ ^.^^ ..4      p \        ^ .^..4      p\        ^ ^..4      p\        ^ ..4      p\        ^^ .^ ^..4      p\        ^.^ ..4      p\        ^^ ..4      p\        ^..4      p\        WW#4      p\        WEWg4      p	\        \        \        ^,           \        4      p
\	        W4      pV\	        \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      \        \        ^^ .^ ^..4      \        ^.^ ..4      \        ^^ ..4      \        ^..4      4      4      8X  g   Q hVP                  4       \        \        . RO. RO. RO. RO.4      \        ^ .^.^ .^ ..4      \        . RO.4      \        ^ ..4      4      8X  g   Q hVP                  ^8X  g   Q hVP                  ^8X  g   Q hVP                  \        4      \        \        ^,          \        ^,          \        ^,          ,
          \        ,
          ^,           \        4      8X  g   Q h\	        V4      p\	        W4      pVP                  4       VP                  4       8X  g   Q h\	        W4      pV\	        \        \        \        ^,           \        4      \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      4      8X  g   Q hVP                  4       \        \        . RO. RO. R	O.4      \        ^.^ .^..4      \        . RO.4      \        ^ ..4      4      8X  g   Q hVP                  \        4      \        \        ^,          \        ^,          \        ^,          ,           \        ,
          ^,
          \        4      8X  g   Q h\        ^^.^R
..4      p\        ^^.R
R
..4      p\        ^R.^ ^..4      p\        ^^.^R..4      p\        . RO. RO. RO.4      p\        ^^.R
R
.R^..4      p\        . RO. RO.4      p\        R^.^ ^..4      p\        VVVV4      p\        VVVV4      p\        VV4      pV\        \        \        ^^.^R
..4      \        ^^.R
R
..4      \        ^R.^ ^..4      \        ^^.^R..4      4      \        \        . RO. RO. RO.4      \        ^^.R
R
.R^..4      \        . RO. RO.4      \        R^.^ ^..4      4      4      8X  g   Q hVP                  4       \        \        . RO. RO. RO. RO. RO.4      \        ^^.R
R
.^R.RR
.RR..4      \        . RO. RO.4      \        RR.^R..4      4      8X  g   Q hVP                  VP                  8X  g   Q hVP                  VP                  8X  g   Q h\        V4      p\        VV4      pVP                  4       VP                  4       8X  g   Q hVP                  \        4      VP                  \        4      8X  g   Q h\        ^\        \        4      p\        ^\        ^,           \        4      p\        \        \        ^,           \        4      p\        V
V.VV..4      p\        VV4      pV\        \        \        ^^.^R
..4      \        ^^.R
R
..4      \        ^R.^ ^..4      \        ^^.^R..4      4      \        \        \        \        ^,           \        4      \        ^\        \        4      3\        ^\        ^,           \        4      \        \        \        ^,           \        4      334      4      8X  g   Q hR# )r   Nr  r  r   r/   r/   r   r  r   )r   r   r   )r   r   r/   )r   r/   r   r   r  r  r  r  r   r  r  r  r  )rB   r   r   r3   rB   )r  r  r   r   r   )r  r  rB   r   rC   r   )r     r3   rB   r   r  )r   r&   r   r5   r   r   rj  ri  rx  r#   r"   ) rO   rR   r   r   rP   rW   r  r   r  r  r[   r4  ser2ser3ser_tfr  r  r  r  a4b4c4d4r  r  ser4ser5ser6r\   r]   r^   tfms                                    r8   test_StateSpace_seriesr   ]  s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$C
1ac1
%C#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r7   c                  \   \        ^ ^.^^ ..4      p \        ^ .^..4      p\        ^ ^..4      p\        ^ ..4      p\        ^^ .^ ^..4      p\        ^.^ ..4      p\        ^^ ..4      p\        ^..4      p\        WW#4      p\        WEWg4      p	\        W4      p
V
\        \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      \        \        ^^ .^ ^..4      \        ^.^ ..4      \        ^^ ..4      \        ^..4      4      4      8X  g   Q hV
P                  4       \        \        . RO. RO. RO. RO.4      \        ^ .^.^.^ ..4      \        . RO.4      \        ^..4      4      8X  g   Q hV
P	                  \
        4      \        \        \        ^,           ,          \        ^,          ^,
          \        4      8X  g   Q h\        \        \        ^,           \        4      p\        W4      pV\        \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      \        \        \        ^,           \        4      4      8X  g   Q hVP                  4       \        \        . RO. RO. R
O.4      \        ^ .^.^..4      \        . RO.4      \        ^..4      4      8X  g   Q hVP	                  \
        4      \        \        ^,          \        ^,          ^,
          \        4      8X  g   Q h\        ^^.^R..4      p\        ^^.RR..4      p\        ^R.^ ^..4      p\        ^^.^R	..4      p\        . RO. RO. RO.4      p\        ^^.RR.R^..4      p\        . RO. RO.4      p\        R^.^ ^..4      p\        WVV4      p\        VVVV4      p\        VV4      pV\        \        \        ^^.^R..4      \        ^^.RR..4      \        ^R.^ ^..4      \        ^^.^R	..4      4      \        \        . RO. RO. RO.4      \        ^^.RR.R^..4      \        . RO. RO.4      \        R^.^ ^..4      4      4      8X  g   Q hVP                  4       \        \        . RO. RO. RO. RO. RO.4      \        ^^.RR.^^.RR.R^..4      \        . RO. RO.4      \        ^^.^^ ..4      4      8X  g   Q h\        ^\        \        4      p\        ^\        ^,           \        4      p\        \        \        ^,           \        4      p\        VV.VV..4      p\        VV4      pV\        \        \        \        \        ^,           \        4      \        ^\        \        4      3\        ^\        ^,           \        4      \        \        \        ^,           \        4      334      \        \        ^^.^R..4      \        ^^.RR..4      \        ^R.^ ^..4      \        ^^.^R	..4      4      4      8X  g   Q hR# )r   Nr  r  r  r  r  r  )r/   r   r   r   )r   r   r   r   r/   r   r   r  r  r  r  r   r  r  r  r  r  r  r  r  r  )	r   r&   r    r   rx  r   r5   r$   r"   )rO   rR   r   r   rP   rW   r  r   r  r  r   r[   r   r  r  r  r  r  r  r  r  r  r  r   r\   r]   r^   r  r   s                                r8   test_StateSpace_parallelr#    s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$C	#	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	#	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
RR
$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*! #"#$ $ $ $r7   c                     \        ^ ^.^^ ..4      p \        ^ .^..4      p\        ^ ^..4      p\        ^ ..4      p\        ^^ .^ ^..4      p\        ^.^ ..4      p\        ^^ ..4      p\        ^..4      p\        WW#4      p\        WEWg4      p	\        W4      p
V
\        \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      \        \        ^^ .^ ^..4      \        ^.^ ..4      \        ^^ ..4      \        ^..4      4      R4      8X  g   Q hV
P                  4       \        \        . RO. RO. RO. RO.4      \        ^ .^.^ .^ ..4      \        . RO.4      \        ^ ..4      4      8X  g   Q hV
P	                  \
        4      \        \        \        ^,
          ,          \        ^,          \        ,
          ^,           \        4      8X  g   Q h\        W^4      pVP                  4       \        \        . RO. RO. RO. RO.4      \        ^ .^.^ .^ ..4      \        . RO.4      \        ^ ..4      4      8X  g   Q hVP	                  \
        4      \        \        \        ^,
          ,          \        ^,          ^\        ^,          ,          ,
          \        ,
          ^,           \        4      8X  g   Q h\        \        \        ^,           \        4      p\        W4      pV\        \        \        ^ ^.^^ ..4      \        ^ .^..4      \        ^ ^..4      \        ^ ..4      4      \        \        \        ^,           \        4      R4      8X  g   Q hVP                  4       \        \        . RO. R	O. R
O.4      \        ^ .^.^ ..4      \        . RO.4      \        ^ ..4      4      8X  g   Q h\        ^^.^R..4      p\        ^^.RR..4      p\        ^R.^ ^..4      p\        ^^.^R..4      p\        . RO. RO. RO.4      p\        ^^.RR.R^..4      p\        . RO. RO.4      p\        R^.^ ^..4      p\        WVV4      p\        VVVV4      p\        VV4      pV\        \        \        ^^.^R..4      \        ^^.RR..4      \        ^R.^ ^..4      \        ^^.^R..4      4      \        \        . RO. RO. RO.4      \        ^^.RR.R^..4      \        . RO. RO.4      \        R^.^ ^..4      4      R4      8X  g   Q hVP                  4       \        \        \        ^4      \        R^4      \        R^4      \        R^4      \        R4      .\        ^^4      \        R^4      \        ^	^4      \        ^'^4      \        ^	4      .\        ^4      \        R^4      \        R^4      \        R^4      \        R4      .\        R^4      \        ^^4      \        ^I^4      \        ^^4      \        ^$4      .\        R^4      \        ^/^4      \        ^^4      \        ^U^4      \        ^4      ..4      \        \        R^4      \        ^^4      .\        ^^4      \        R^4      .\        ^^4      \        ^^4      .\        ^^4      \        R^4      .\        ^^4      \        R^4      ..4      \        \        ^4      \        R^4      \        R^4      \        R^4      \        R4      .\        ^^4      \        R^4      \        R^4      \        R^4      \        R4      ..4      \        \        R^4      \        ^^4      .\        ^^4      \        ^	^4      ..4      4      8X  g   Q h\        VV^4      pVP                  4       \        \        \        ^^4      \        ^>^4      \        ^4      \        R 4      \        R!^4      .\        ^ ^4      \        R"^4      \        R^4      \        ^4      \        ^$^4      .\        R#^4      \        ^)^4      \        R4      \        R$4      \        R%^4      .\        ^^4      \        R&^4      \        R'^4      \        ^4      \        ^^4      .\        ^^4      \        R(^4      \        R^4      \        ^
4      \        ^Q^4      ..4      \        \        ^^4      \        R)^4      .\        R^4      \        ^^4      .\        ^^4      \        R*^4      .\        R+^4      \        ^W^4      .\        R^4      \        ^^4      ..4      \        \        R^4      \        ^^4      \        ^4      \        R4      \        R^4      .\        R^4      \        ^^4      \        R^4      \        R4      \        R,^4      ..4      \        \        ^^4      \        R^4      .\        ^^4      \        R-^4      ..4      4      8X  g   Q hR# ).r   Nr   r  )r/   r   r   r   r  r  )r/   r/   r/   r   r  )r/   r   r/   r"  r   r  r  r  r  r   r  r  r  iiiiiir  iiir   ir  iiyr  r  iir   iiiir  i)	r   r&   r!   r   rx  r   r5   r%   r   )rO   rR   r   r   rP   rW   r  r   r  r  r  r  r[   r   r  r  r  r  r  r  r  r  r  r  fd4fd5s                             r8   test_StateSpace_feedbackr'  `  s
   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
RR
$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 3Q
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
RR
$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r7   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   r5   rU   rV   rH   r   r   r%  r   rU  rN   rO   rP   r  rQ   rR   rW   r  r  r   r  r  r   r   r   r  rf  re  rd  ru   r   r  r!  r&  r)  r,  r6  rQ  rq  r|  r  r  r  r  r  r  r  r  r  r   r3  r9  rG  rS  r^  ra  rc  re  ro  rv  r  r  r  r  r  r  r  r   r#  r'  r6   r7   r8   <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r7   