
    \hk                    *   S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK J!r!  S SK"J#r#  S SK$J%r%  S SK&J'r'J(r(J)r)  S SKJ*r*J+r+  S SK,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<  S SK=J>r>  \" S5      u  r?r@rArBrCrDrErFrGrHrIrJrK\" S5      u  rLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[\-" S\CS-  S\I-  \J-  \C-  -   \JS-  -   \C5      r\\-" \GS\C5      r]\-" \N\F-  \C-
  \N\C-  \F-   \C5      r^S r_S r`S raS rbS rcS rdS  reS! rfS" rgS# rhS$ riS% rjS& rkS' rlS( rmS) rnS* roS+ rpS, rqS- rrS. rsS/ rtS0 ruS1 rvS2 rwS3 rxS4 ryS5 rzS6 r{S7 r|S8 r}S9 r~S: rS; rS< rS= rS> rS? rS@ rSA rSB rgC)D    )Add)Function)Mul)IpiRationaloo)Pow)S)symbols)explog)	Heaviside)sqrt)atan)eye)SISOLinearTimeInvariant)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix
ShapeError)sincos)TransferFunctionPIDControllerSeriesParallelFeedbackTransferFunctionMatrix
MIMOSeriesMIMOParallelMIMOFeedback
StateSpacegbtbilinearforward_diffbackward_diffphase_margingain_margin)raisesz.a, x, b, c, s, g, d, p, k,    tau, zeta, wn, Tza0:4,    b0:4, c0:4, d0:4      c                     [        [        S-   [        S-  [        -   S-   [        5      n U R                  [        S-   :X  d   eU R                  [        S-  [        -   S-   :X  d   eU R                  [        S-   [        S-  [        -   S-   [        4:X  d   e[        [        S-   [        S-
  [        5      nUR                  [        S-   :X  d   eUR                  [        S-
  :X  d   eUR                  [        S-   [        S-
  [        4:X  d   e[        [
        S-   [
        S-  S-
  [
        5      nUR                  [
        S-   :X  d   eUR                  [
        S-  S-
  :X  d   eUR                  [
        S-   [
        S-  S-
  [
        4:X  d   e[        [
        S-  S[
        S-  -  -   S-   [
        S-  S[
        -  -   S-   [
        5      nUR                  [
        S-  S[
        S-  -  -   S-   [
        S-  S[
        -  -   S-   [
        4:X  d   e[        [        S-   [        S-
  -  [        S-
  [        S-   -  [        5      nUR                  [        S-
  [        S-   -  :X  d   eUR                  [        S-   [        S-
  -  [        S-
  [        S-   -  [        4:X  d   e[        [
        S-   [
        S-   [
        5      nUR                  [
        S-   [
        S-   [
        4:X  d   e[        [        S-
  S[
        -
  [        5      nUR                  [        S-
  S[
        -
  [        4:X  d   e[        [        S-
  [        S-
  [        5      nUR                  [        S-
  [        S-
  [        4:X  d   e[        SS[        5      nUR                  S:X  d   eUR                  S:X  d   eUR                  SS[        4:X  d   e[        SS[        5      n	U	R                  S:X  d   eU	R                  S:X  d   eU	R                  SS[        4:X  d   e[        S[        S-  -  S[
        -  -   S[        -  -   S	[
        S-  -  S
[        -  -   [        5      n
[        S[        S-  -  S[
        -  -   S[        -  -   S	[
        S-  -  S
[        -  -   [
        5      nX:X  a   e[        [        [        -  [        [        S-  -  -   [        [        S-  -  -   [        [
        -  [        [        -  -
  [        5      n[        [        [        -  [        [        S-  -  -   [        [        S-  -  -   [        [
        -  [        [        -  -
  [        5      nX:X  d   eU* * Us=:X  a  U* * * * :X  d   e   e[        [        [        S-  -  [        [        S-  -  -   [        [        -  -   [        -   [        [
        -  [        [
        S-  -  -   [        [        -  -   [        5      nUR                  [        [        S-  -  [        [        S-  -  -   [        -   [        [        -  -   [        [
        -  [        [
        S-  -  -   [        [        -  -   [        4:X  d   e[        [
        S-  [        -   [        [        S-  -  [        [        -  -   [        -   [
        5      n[        [
        S-  [        -   [        [        S-  -  [        [        -  -   [        -   [
        5      nUR                  [        [
        S-  -   [        [        [        -  -   [        [        S-  -  -   [
        4:X  d   eUU:X  d   e[        [        [        -  [        -   [        [        S-  -  [        [        -  -   [        -   [        5      nUR                  [        [        [        -  -   :X  d   eUR                  [        [        [        -  -   [        [        S-  -  -   :X  d   eUR                  [        [        [        -  -   [        [        [        -  -   [        [        S-  -  -   [        4:X  d   e[        S[
        S-  [
        -
  S-   [
        5      nUR                  S[
        S-  [
        -
  S-   [
        4:X  d   e[        SS[        5      nUR                  SS[        4:X  d   e[        [        [        S-  -  [        [        S-  -  -   [        -
  [        [
        S-  -  [        5      nUR                  [        [        S-  -  [        -
  [        [        S-  -  -   [        [
        S-  -  [        4:X  d   e[        [        S-  [
        S-  -  [        [        S-  -  -   [        [        -  [
        -
  [
        5      nUR                  [        [        S-  -  [        S-  [
        S-  -  -   [        [        -  [
        -
  [
        4:X  d   e[!        S5      u  nnnn[        UU[        -  -   U[        -  -   [        S-  SU-  [        -  -   US-  -   [        5      nUR                  U[        -  U[        -  -   U-   :X  d   eUR                  U[        -  U[        -  -   U-   US-  SU-  [        -  -   [        S-  -   [        4:X  d   e[#        [$        S 5        [#        [$        S 5        [#        [$        S 5        [#        [&        S 5        [#        [&        S 5        [#        [&        S 5        [#        [&        S 5        g )Nr.   r/            	            ?      r   g333333?gffffff!g      ?gzomega_o, k_p, k_o, k_ic                  $    [        SS[        5      $ )Nr1   r   r   s     \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/control/tests/test_lti.py<lambda>4test_TransferFunction_construction.<locals>.<lambda>x       /1a8r=   c                  ,    [        [        S[        5      $ Nr   r:   r<   r=   r>   r?   r@   y   s    /1a8r=   c                  $    [        SS[        5      $ rC   r:   r<   r=   r>   r?   r@   z   rA   r=   c                  B    [        [        / SQ5      [        [        5      $ Nr.   r/   r3   )r   r   r;   r<   r=   r>   r?   r@   |   s    .vi/@!QGr=   c                  R    [        [        S-  S[        -  -   S-
  [        S-   S5      $ )Nr/   r.   r3   r:   r<   r=   r>   r?   r@   ~   s"    .q!taczA~q1uaHr=   c                  8    [        [        S-   S[        -
  S5      $ )Nr.   r2   r1   )r   pr<   r=   r>   r?   r@      s    .q1ua!eQ?r=   c                      [        SSS5      $ )Nr3   r1   r7   )r   r<   r=   r>   r?   r@      s    .q!Q7r=   )r   r;   numdenargsrJ   a0a1a2b0b1abgdb2r   r-   
ValueError	TypeError)tftf1tf2tf3tf4tf4_tf5tf5_tf6tf6_tf7tf8tf7_tf8_tf9tf10tf10_tf11tf12tf13tf14tf15omega_ok_pk_ok_itf18s                              r>   "test_TransferFunction_constructionrv   "   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8r=   c                  zD  ^?^@^A^B^C^D^E^F [        S[        [        SSS9SS9n [        S-  m@[        [        S-  -  S[        -  -   [        S-   S-  -  mAS	mBSS[        -  -   SS[        -  -   -  S
S[        -  -   SS[        S-  -  -   -  -  nS
[        S-  -  S[        S-  -  -   S-   [        S-   [        S
-   -  -  n[	        [        S-   [        S-  S-   [        5      n[        [        * [        -  5      nXCR                  5       -  n[        R                  " U[        5      n[	        [        S-   [        S-  S-   [        [        [        -  5      -  [        5      n[        SS[        -  [        S-  S-   -  SS9n[        R                  " U 5      [	        S[        [        5      :X  d   e[        [        U@4S j5        [        [        UA4S j5        [        R                  " TA[        5      [	        [        [        S-  -  S[        -  -   [        S-   S-  [        5      :X  d   e[        R                  " TA[        5      [	        [        [        S-  -  S[        -  -   [        S-   S-  [        5      :X  d   e[        [        UB4S j5        [        R                  " TB[        5      [	        S	S[        5      :X  d   e[        R                  " U[        5      [	        SS[        -  -   SS[        -  -   -  S
S[        -  -   SS[        S-  -  -   -  [        5      :X  d   e[        R                  " U[        5      [	        S
[        S-  -  S[        S-  -  -   S-   [        S-   [        S
-   -  [        5      :X  d   eXg:X  d   e[        R                  " U[        5      [	        S[        S-  -  S[        -  -   S-   [        S-  S-   [        5      :X  d   e[        R                  " SS// SQ[        5      n	[        S-  S[        -  /n
[        S-  [        S-   S/n[        R                  " X[        5      n/ SQmCSS/m?U	[	        [        S-   S[        S-  -  S[        -  -   S-   [        5      :X  d   eU[	        [        S-  [        -  S[        -  -   [        S-  [        S-  -  [        [        S-   -  -   S-   [        5      :X  d   e[        [        U?UC4S j5        S/nSS/nSn[        R                  " XU[        5      n	U	[	        S[        -  S-
  [        S-   S[        -  -
  [        S-   S[        -  -   -  [        5      :X  d   e[	        [        S-  [        S-  -   [        -   [        [        S-  -
  [        5      n[	        [        S-  [        S-  -   S-   * [        S-
  [        5      nUR!                  5       [!        U5      s=:X  a  U:X  d   e   e[	        [        S-   [        S-
  -  [        S-
  [        S-   -  [        5      n	[	        [        S-   [        S-   [        5      nU	R!                  5       [!        U	5      s=:X  a  U:X  d   e   e[	        S[        -
  S-  [        S-  S-   S-  [        5      n[	        SS[        5      n["        [        [        -  -  [$        [        [        -  -  -   [&        [        [        -  -  -   [        [        -  [        [        -  -   -  n[(        [        [        -  -  [*        [        [        -  -  -   [,        [        -  [        -  [        [        -  -   -  n[&        [        [        -  -  [        [        -  -  [&        [        [        -  -  [        [        -  -  -   [$        [        [        -  -  [        [        -  -  -   [$        [        [        -  -  [        [        -  -  -   ["        [        [        -  -  [        [        -  -  -   ["        [        S[        -  -  -  -   n[(        [,        -  [        -  [        -  [        [        -  -  [(        [        [        -  -  [        [        -  -  -   [*        [,        -  [        -  [        [        -  -  [        -  -   [*        [        [        -  -  [        [        -  -  -   n[$        ["        -  [        -  [        [        -  -  [$        [        -  [        -  -   ["        [*        -  [        -  [        -  [        [        -  -  -   [*        [        S-  -  [        -  -   n[	        UU[        5      n[	        [&        [        [        -  -  [(        [        [        -  -  -
  [$        [        -  [*        [        -  [        -  -   ["        [        [        -  -  [        -   -  [        5      nUR/                  5       [	        [        S-  S[        -  -
  S-   [        S-  S[        S-  -  -   S-   [        5      :X  d   eU	R/                  5       [	        [        S-  S[        -  -   S-
  [        S-  S[        -  -   S-
  [        5      :X  d   eUR/                  5       U:X  d   eUR/                  5       [	        UU[        5      :X  d   eUR/                  5       [	        [&        [        [        -  -  [(        [        [        -  -  -
  U[        5      :X  d   e[$        [        -  [&        -   n[,        [        S-  -  [*        [        -  -   [(        -   n[	        UU[        5      n[	        S[        -  S-   S[        S-  -  S[        -  -   S-   [        5      n[	        S[        -  S-   S[        S-  -  S[        -  -   S-   [        5      n UR1                  [&        S[$        S[(        S[*        S[,        S05      U :X  d   eUR1                  [&        S[$        S[(        S[*        S[,        S05      R3                  5       U:X  d   eU R3                  5       U:X  d   e[5        S5      u  n!n"n#n$U![        -  U$[        S-  -  U#[        S-  -  -   U"-
  n&n%[	        U%U&[        5      n'[	        S[        -  S[        S-  -  S[        S-  -  -   S-
  [        5      n([	        S[        -  S[        S-  -  S[        S-  -  -   S-
  [        5      n)U'R1                  U!SU"SU#SU$S05      U):X  d   eU'R1                  U!SU"SU#SU$S05      R3                  5       U(:X  d   eU)R3                  5       U(:X  d   e[	        [&        [        S-  -  [$        [        S-  -  -   [(        [        -  -
  [*        -   [$        [        -  [        -   [        5      n*[	        S[        S-  -  S[        S-  -  -   [        -
  S-   [        S[        -  -   [        5      n+[	        S[        S-  -  S[        S-  -  -   [        -
  S-   [        S[        -  -   [        5      n,U*R1                  [&        S[$        S[(        S[*        S05      U,:X  d   eU*R1                  [&        S[$        S[(        S[*        S05      R3                  5       U+:X  d   eU,R3                  5       U+:X  d   e[	        [        [$        [        S-  -  -
  [&        [        -  [        -   [        5      n-[	        S[        S-  -  [        -   [        [        -
  [        5      n.[	        S[        S-  -  [        -   [        [        -
  [        5      n/U-R1                  [&        S[$        S05      U/:X  d   eU-R1                  [&        S[$        S05      R3                  5       U.:X  d   eU/R3                  5       U.:X  d   eU	R7                  [8        5      [8        S-  [8        S-  S[8        -  -   S-
  -  S[8        -  [8        S-  S[8        -  -   S-
  -  -   S[8        S-  S[8        -  -   S-
  -  -
  :X  d   eUR7                  S[        -   5      [;        S5      S -  [;        S5      [        -  S -  -   :X  d   eUR7                  [;        S5      S-  5      [&        [        [        -  -  [$        ["        -  [        [;        S5      S-  -  -  [;        S5      [$        -  [        -  S-  -   S["        -  [*        -  [        [;        S5      S-  -  -  S-  -   [;        S 5      [*        -  [        -  S
-  -   -  SS[;        S5      S-  -  -  S[;        S5      S-  -  -  [(        -  S
[$        -  ["        -  [        [;        S5      S-  -  -  S![$        -  [        -  -   S!["        -  [*        -  [        [;        S5      S-  -  -  -   S [*        -  [        -  -   -  -
  :X  d   eUR=                  5       S:X  d   eU	R=                  5       [?        SS5      :X  d   eU'R=                  5       S:X  d   eU.R=                  5       S:X  d   eU)R=                  5       S:X  d   e[	        S[        [        5      R=                  5       [@        :X  d   e[	        [B        S-  [D        -
  [D        [B        5      n0[	        [D        [B        S-  [D        -
  [B        5      n1[	        [B        S-  [B        S"-  [B        -   [B        S-  -   [B        5      n2[	        [B        S"-  [B        -   [B        S-  -   [B        S-  [B        5      n3URG                  5       [        [        [        * [        * /:X  d   eURG                  5       / :X  d   eU	RG                  5       S#S/:X  d   eU/RG                  5       [        /:X  d   eU-RG                  5       [&        * [        -  /:X  d   eU+RG                  5       S$[        -  /:X  d   e[I        U(RG                  5       5      [I        S%S&S'[        -  -
  S&S'[        -  -   /5      :X  d   e[I        URG                  5       5      [I        S(S)[        -  -
  S(S)[        -  -   /5      :X  d   eU1RG                  5       [D        [?        SS5      -  [D        [?        SS5      -  * [        [D        [?        SS5      -  -  [        * [D        [?        SS5      -  -  /:X  d   eU2RG                  5       [K        [B        S
-  [B        -   S-   S5      S[K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S	5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      /
:X  d   e[        [L        S* 5        [5        S+S,S-9u  n4n5[5        S.S,S/9n6[	        [        S-  [&        -   [$        [        -  -
  U4[        -  U5-
  [        5      n2[	        [        S-  [&        -   [$        [        -  -
  U4[        -  S-
  [        5      n7[	        [        S-  [&        -   [$        [        -  -
  U4[        -  U6-
  [        5      n8URO                  5       SL d   eURO                  5       S,L d   eU	RO                  5       SL d   eU(RO                  5       SL d   eURO                  5       S,L d   eU7RO                  5       S,L d   eU8RO                  5       S,L d   eU2RO                  5       SL d   eU/RO                  5       b   eU-RO                  5       b   eURQ                  5       SS/:X  d   eURQ                  5       / :X  d   eU	RQ                  5       SS/:X  d   eU/RQ                  5       S[?        SS5      -  [        * [?        SS5      -  -  S-  S[?        SS5      -  * [        * [?        SS5      -  -  S0-  [S        S5      S[?        SS5      -  -  [        -  [        * [?        SS5      -  -  S0-  -
  S[?        SS5      -  * [        * [?        SS5      -  -  S0-  [S        S5      S[?        SS5      -  -  [        -  [        * [?        SS5      -  -  S0-  -   /:X  d   eU-RQ                  5       [        [$        -  [?        SS5      -  [        [$        -  [?        SS5      -  * S-  [S        S5      [        -  [        [$        -  [?        SS5      -  -  S-  -
  [        [$        -  [?        SS5      -  * S-  [S        S5      [        -  [        [$        -  [?        SS5      -  -  S-  -   /:X  d   e[I        U+RQ                  5       5      [I        S1S2[S        S3[        S-  -  S-
  5      -  -
  S2[S        S3[        S-  -  S-
  5      -  S1-   /5      :X  d   eU0RQ                  5       [D        [?        SS5      -  [D        [?        SS5      -  * S-  [S        S5      [        -  [D        [?        SS5      -  -  S-  -
  [D        [?        SS5      -  * S-  [S        S5      [        -  [D        [?        SS5      -  -  S-  -   /:X  d   eU3RQ                  5       [K        [B        S
-  [B        -   S-   S5      S[K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S	5      [K        [B        S
-  [B        -   S-   S5      [K        [B        S
-  [B        -   S-   S5      /
:X  d   e[        [L        S4 5        [	        [        S-   [        S-  [        S-  -
  S
-   [        5      n[	        S[        -  S-   S[        -
  [        5      mDU* [	        [        * S-
  [        S-  [        S-  -
  S
-   [        5      :X  d   eTD* [	        S[        -  S-
  S[        -
  [        5      :X  d   e[	        [        S-   [        S-
  [        5      mE[	        [        S-  S-   S[        -
  [        5      mF[	        [        S-  S-   S-  S[        -
  S-  [        5      n([	        [        S-   S-  [        S-
  S-  [        5      nTETE-  RU                  5       TES-  s=:X  a  [W        TES5      s=:X  a  U:X  d   e   eTFTF-  TF-  RU                  5       TFS-  s=:X  a  [W        TFS5      s=:X  a  U(:X  d   e   eTFS-  [W        TFS5      s=:X  a  [	        SS[        5      :X  d   e   e[Y        TE5      RU                  5       S-  TES-  s=:X  a5  [W        TES5      s=:X  a$  [	        [        S-
  [        S-   [        5      :X  d   e   eTFTF-  RU                  5       S-  TFS5-  s=:X  a>  [W        TFS55      s=:X  a-  [	        S[        -
  S-  [        S-  S-   S-  [        5      :X  d   e   e[        [        UE4S6 j5        [        [        UF4S7 j5        [        [        UEUF4S8 j5        [	        [        S-
  [        S-  S[        -  -
  S-   [        5      n[	        [        [        -   [        S-  S-
  [        5      n9[[        U5      [	        [        S-
  [        S-
  S-  [        5      :X  d   eUR\                  R1                  [        S5      UR^                  R1                  [        S5      s=:X  a  S:X  d   e   eUR1                  [        S5      [	        [        S-
  [        S-  S[        -  -
  S-   [        5      :X  d   eU9R1                  [        S5      [	        [        S-   S[        5      :X  d   eTDRa                  [        [        05      [	        S[        -  S-   S[        -
  [        5      :X  d   e[        [b        UD4S9 j5        TDR1                  [        [        S5      5      TD:X  d   e[	        [&        [        [        -  -  [$        [        [        -  -  -   ["        [        -  [        -
  [        5      n:U:Ra                  [        [D        05      [	        [&        [D        [        -  -  [$        [        [D        -  -  -   ["        [        -  [D        -
  [D        5      :X  d   eU:R1                  [        [D        5      [	        [&        [        [        -  -  [$        [        [        -  -  -   ["        [        -  [        -
  [        5      :X  d   e[	        [&        [        S-  -  S[        S-  -  -   S-   [        S	-  S-
  [        5      n;[	        S[        -   S[        -   S	[        -   -  [        5      n<[	        SS[        5      n=[	        SS[        5      n>U;R                  5       [        [&        [        S-  -  S[        S-  -  -   S-   [        [        S	-  S-
  SSS9SS9:X  d   eU<R                  5       [        [        S-   [        S[        -   S	[        -   -  SSS9SS9:X  d   eU=R                  5       [        [;        S5      [        SSSS9SS9:X  d   eU>R                  5       [        SSSS9:X  d   eg ):Nr   Fevaluater/   r2   r.   r3   r5   r4   r1   r7   c                  0   > [         R                  " T 5      $ Nr   from_rational_expression)expr_2s   r>   r?   1test_TransferFunction_functions.<locals>.<lambda>   s    &6&O&OPV&Wr=   c                  0   > [         R                  " T 5      $ r|   r}   )expr_3s   r>   r?   r          /HHPr=   c                  0   > [         R                  " T 5      $ r|   r}   )expr_4s   r>   r?   r      r   r=   )r3   r1   r2   rG   c                  <   > [         R                  " TT [        5      $ r|   )r   from_coeff_listsr;   )den3num3s   r>   r?   r      s    &6&G&GdTU&Vr=   y             @y                      ?       @      @      @      @zc1, d0:3g      @r8         
   g      пgS?g3pUcgH8?gٿg%1C9?c                      [        [        S-  [        [        S-  -  [        -   [        S-  -   [        5      R                  5       $ )Nr/   r   )r   xrO   polesr<   r=   r>   r?   r     s2    (8Ar!R%x!|aQRd?RTU(V(\(\(^r=   zq, rT)negativet)positive   g      ?gv-k?g3ٿc                      [        [        [        S-  -  [        -   [        S-  -   [        S-  [        5      R                  5       $ )Nr   r/   )r   rO   r   zerosr<   r=   r>   r?   r   2  s2    (8ArEA19LaQRdTU(V(\(\(^r=   c                  0   > T [         S-  [         -   S-
  -  $ Nr/   r.   r;   r_   s   r>   r?   r   E  s    sQTAX\2r=   c                     > T [         -  $ r|   r   ra   s   r>   r?   r   F  s	    sAvr=   c                     > T T-  $ r|   r<   r_   ra   s   r>   r?   r   G  s	    sCxr=   c                  D   > T R                  [        [        S5      05      $ Nr/   )xreplacerJ   r   r^   s   r>   r?   r   R  s    cllAs1v;7r=   )2r   r
   r;   rJ   r   r   tauto_exprr~   r   r-   ZeroDivisionErrorrY   r   from_zpkr   r   rQ   rP   rO   rR   rS   rX   expandsubsevalfr   eval_frequencywnr   dc_gainr   r	   r   kr   strr   NotImplementedError	is_stabler   r   doitpowr   r   rL   rM   r   rZ   )Gexpr_1expr_5expr_6r[   delayexpr_7H1H2expr_8r\   num2den2r]   r   r   gaintf0rT   rU   G1G2crW   efrV   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_rc   re   rf   ri   rj   rl   r   r   r   r   r   r^   r_   ra   sG                                                                  @@@@@@@@r>   test_TransferFunction_functionsr      s    C2.?FqSF1fqslQUQJ&FF1Q3wQqS!Q1Wq1QT6z$:;F1fqAvo!QUQUO4F	!a%A1	-B3KE::<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7r=   c                    ^ ^^^^ [        [        S-   [        S-
  [        5      m[        [        S-   [        S-   [        5      m[        [        S-   [        S-  [        -   S-   [        5      m[        [        S[        -
  [        5      mTT-   [        TT5      :X  d   eTT-   [        TT5      :X  d   eT* T-   T-   [        T* TT5      :X  d   eTTT-   -   [        TTT5      :X  d   e[	        SSS9m [        [        U4S	 j5        [        [        U U4S
 j5        [        [        UU4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        TT-
  [        TT* 5      :X  d   eTT-
  [        TT* 5      :X  d   eT* T-
  [        T* T* 5      :X  d   eTT-
  T-   [        TT* T5      :X  d   e[        [        U4S j5        [        [        UU4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        g )Nr5   r2   r3   r.   r/   r   Fcommutativec                  $   > T [        / SQ5      -   $ rF   r   r\   s   r>   r?   @test_TransferFunction_addition_and_subtraction.<locals>.<lambda>q      sVI%66r=   c                     > TT -   $ r|   r<   )r   r]   s   r>   r?   r   r  	    sQwr=   c                     > T T-   $ r|   r<   r^   r_   s   r>   r?   r   s  	    sSyr=   c                     > T [         S-
  -   $ Nr.   r   r   s   r>   r?   r   t      sa!e}r=   c                     > T S-   $ Nr7   r<   r   s   r>   r?   r   u  r   r=   c                  "   > S[         S-  -
  T -   $ Nr.   r3   rJ   r   s   r>   r?   r   v      AqDC/r=   c                  $   > T [        / SQ5      -
  $ rF   r   r   s   r>   r?   r   ~  r   r=   c                     > T T-
  $ r|   r<   r   s   r>   r?   r     r   r=   c                     > T [         S-
  -
  $ r   r   r   s   r>   r?   r     r   r=   c                     > T S-
  $ r   r<   r   s   r>   r?   r     r   r=   c                     > [         S-   T -
  $ )Nr2   r   )r]   s   r>   r?   r     s    A}r=   c                  "   > S[         S-  -   T -
  $ )Nr.   r1   r   r   s   r>   r?   r     r  r=   )r   r;   rJ   r    r   r-   rY   )r   r\   r]   r^   r_   s   @@@@@r>   .test_TransferFunction_addition_and_subtractionr  d  s   
1q5!a%
+C
1q5!a%
+C
1q5!Q$(Q,
2C
1a!eQ
'C 9c****9c****4#:xc37777#)c3 7777'A
:67
:'
:()
:,-
:'
:/0 9sd++++9sd++++4#:3$----9s?hsSD#6666
:67
:()
:,-
:'
:,-
:/0r=   c            
        ^ ^^^^^^^ [        [        S-   [        S-  * S-   [        5      m [        [        S-   [        S-
  [        5      m[        [        [        S-  S-
  [        5      m[        [        S-   [        S-
  [        5      m[        [        S-   [        S-
  [        5      m[        [        S-   [        S-   [        5      m[        SS[        5      mT T-  [        T T5      :X  d   eT * T-  [        T * T5      :X  d   eT* T-  T* -  [        T* TT* 5      :X  d   eT * T* -  T* -  T* -  [        T * T* T* T* 5      :X  d   eTT-  [        TT5      :X  d   eT T-  TT-  * -  [        T T[        SS[        5      [        TT5      5      :X  d   eT T-  TT-   -  [        T T[	        TT5      5      :X  d   eTT-  [        T[        TS5      5      :X  d   eT* T-  [        T* [        TS5      5      :X  d   eTT-  T-  [        TT[        TS5      5      :X  d   e[        SS	S
9m[        [        U4S j5        [        [        U U4S j5        [        [        UU4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        [        [        UU4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        [        [        U4S j5        [        [        UU4S j5        [        [        UUU4S j5        [        [        UUU4S j5        g )Nr3   r4   r.   r2   r1   r5   rx   r   Fr   c                  $   > T [        / SQ5      -  $ rF   r   r   s   r>   r?   Ctest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF9$55r=   c                     > T T-  $ r|   r<   )r   r   s   r>   r?   r    	    rAvr=   c                     > T T-  $ r|   r<   r   G5s   r>   r?   r    	    rBwr=   c                     > T [         S-
  -  $ r   r   r  s   r>   r?   r    s    rQU|r=   c                     > ST -  $ Nr4   r<   r  s   r>   r?   r    	    q2vr=   c                  $   > T [        / SQ5      -  $ rF   r   r  s   r>   r?   r    r  r=   c                     > T S-  $ rC   r<   )G6s   r>   r?   r    r  r=   c                     > T T-  $ r|   r<   r  s   r>   r?   r    r  r=   c                     > T S-  $ r   r<   r  s   r>   r?   r    r  r=   c                     > T [         S-  -  $ r   r   r  s   r>   r?   r    s    rAqDyr=   c                  0   > [         S[         S-  -  -
  T -  $ )Nr1   r/   r   )r   s   r>   r?   r    s    AadF
b0r=   c                     > ST -  $ rC   r<   )r   s   r>   r?   r    r  r=   c                     > TST -   -  $ r   r<   )r  G7s   r>   r?   r    s    rQV}r=   c                     > TT T-  -  $ r|   r<   r  r  r"  s   r>   r?   r    s    rR"W~r=   c                     > TTT T-   -   -  $ r|   r<   r$  s   r>   r?   r    s    rR27^4r=   )	r   r;   rJ   r   r    r   r   r-   rY   )r   r   r   r   r  r  r"  r   s   @@@@@@@@r>   1test_TransferFunction_multiplication_and_divisionr&    s   	!a%!Q$A	.B	!a%Q	*B	!QTAXq	)B	!a%Q	*B	!a%Q	*B	!a%Q	*B	!Q	"B b5F2rN"""3r6VRC_$$$3r62#:R"----3s7B3;s?fbS2#sRC8888b5F2rN"""rERU8r2'Aq16"b>BC C Cb5"r'?fRXb"-=>>>> b5F2s2r{++++3r6VRCR----rE2:BB4444'A
:56
:~&
:'
:+,
:~&
:56
:~&
:'
:~&
:()
:01
:~&
:,-
:-.
:45r=   c                     [        S5      u  pn[        U S-  [        S-  [        U -  U-  [        -  -   U S-  -   U 5      n[        U[        S-  -
  U[        S-  -   U5      n[        [        [
        -  [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        [        S-  -  -
  [        5      n[        [
        [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        S-  -
  [        5      nUR                  (       d   eUR                  (       d   eUR                  (       d   eUR                  (       a   eg Nzomega_o, zeta, taur/   r3   r1   )r   r   r;   rJ   rT   rU   	is_proper)rq   zetar   r   r   r   r   s          r>   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<<<<<<<<<|||r=   c                     [        S5      u  pn[        U S-  [        S-  [        U -  U-  [        -  -   U S-  -   U 5      n[        U[        S-  -
  U[        S-  -   U5      n[        [        [
        -  [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        [        S-  -  -
  [        5      n[        [
        [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        S-  -
  [        5      nUR                  (       a   eUR                  (       a   eUR                  (       d   eUR                  (       a   eg r(  )r   r   r;   rJ   rT   rU   is_strictly_proper)rq   r*  r   r\   r]   r^   r_   s          r>   (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%%%%%%%%!!!!%%%%%r=   c                     [        S5      u  pn[        US-  [        S-  [        U-  U-  [        -  -   US-  -   U5      n[        U [        S-  -
  U [        S-  -   U 5      n[        [        [
        -  [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        [        S-  -  -
  [        5      n[        [
        [        S-  -  [        S-  -   [        [        -  -
  [        -   [
        [        S-  -
  [        5      nUR                  (       d   eUR                  (       d   eUR                  (       a   eUR                  (       a   eg )Nztau, omega_o, zetar/   r3   r1   )r   r   r;   rJ   rT   rU   is_biproper)r   rq   r*  r\   r]   r^   r_   s          r>   !test_TransferFunction_is_biproperr1    s    !56C$
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C??????r=   c            
       
   [        S5      u  pp#[        XX#5      n[        5       n[        U[        5      (       d   e[        U[        5      (       d   eU[        XX#[        5      :X  d   eU[        XUS[        5      :X  d   eUR
                  U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   :X  d   eUR                  [        S-  U-  [        -   :X  d   eUR                  [        :X  d   eUR                  U :X  d   eUR                  U:X  d   eUR                  U:X  d   eUR                  U:X  d   eUR                  5       [        U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   [        S-  U-  [        -   [        5      :X  d   eUR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR                  5       [        U[        S-  -  U-   U [        -  -   [        [        5      :X  d   e[        [        [        S-   [        5      n[!        XF5      n[#        XF5      n[%        XF5      n	U[!        [        XX#[        5      [        [        [        S-   [        5      5      :X  d   eU[#        [        XX#[        5      [        [        [        S-   [        5      5      :X  d   eU	[%        [        XX#[        5      [        [        [        S-   [        5      5      :X  d   eUR                  5       [        [        [        S-  U-  [        -   -  [        S-   U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   -  -   [        S-   [        S-  U-  [        -   -  [        5      :X  d   eUR                  5       [        [        U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   -  [        S-   [        S-  U-  [        -   -  [        5      :X  d   eU	R                  5       [        [        S-   [        S-  U-  [        -   -  U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   -  [        U[        S-  -  U[        -  U-  -   U-   U [        S-  -  U-  -   U [        -  -   -  [        S-   [        S-  U-  [        -   -  -   [        S-  U-  [        -   -  [        5      :X  d   eg )Nzkp ki kd tfr   r/   TFr.   )r   r   
isinstancer   r;   rL   rM   varkpkikdr[   r   r)  r0  r-  r    r   r!   )
r5  r6  r7  r[   r   r   r\   par1ser1fed1s
             r>   test_PIDControllerr;    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r=   c                    ^^^^ [        [        [        S-  -  [        [        S-  -  -   [        [        -  -
  [
        [        S-  -  [        [        S-  -  -   [        [        -  [        -  -
  [        5      m[        [        [        -  [        -
  [        [        -  [        -   [        5      m[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        S5      " [        5      n [        S5      " [        5      n[        TT5      nUR                  TT4:X  d   eUR                  [        :X  d   e[        [        TT* 5      T5      nUR                  [        TT* 5      T4:X  d   eUR                  [        :X  d   e[        U S[        5      n[        U* S[        5      n[        T[        XE5      T5      nUR                  T[        XE5      T4:X  d   e[        TTT5      nUR                  TTT4:X  d   e[        XE5      nUR                  XE4:X  d   eUR                  [        :X  d   e[        TT[        TT* 5      T5      n	U	R                  TT[        TT* 5      T4:X  d   e[        TT5      n
X*:X  d   eX&:X  a   e[!        ["        UU4S j5        [!        ["        UUUU4S j5        [!        ["        UU4S	 j5        [!        [$        UU4S
 j5        [!        [$        UU4S j5        [!        [$        U4S j5        g )Nr3   r/   r1   r.   X_dXc                     > [        T T5      $ r|   r   r[   r^   s   r>   r?   *test_Series_construction.<locals>.<lambda>#  s    vb#r=   c                      > [        T TTT5      $ r|   r@  r[   r]   r^   r_   s   r>   r?   rB  $  s    vb#sC8r=   c                     > [        T* T 5      $ r|   r@  r]   r^   s   r>   r?   rB  %  s    vsdC0r=   c                     > [        ST T5      $ r   r@  r[   r_   s   r>   r?   rB  &  s    fQC0r=   c                  H   > [        [        S-  [        [        -  -   TT 5      $ r   )r   r;   rJ   rF  s   r>   r?   rB  '  s    fQTAaCZc:r=   c                  2   > [        T [        / SQ5      5      $ N)r.   r/   r3   r1   )r   r   r   s   r>   r?   rB  (  s    fS&*>?r=   )r   rO   r;   rP   rQ   rR   rJ   rS   rX   r*  r   r   r   rN   r4  r    r-   rY   rZ   )inpouts0s1tf3_r`   s2s3s4s6s7r[   r]   r^   r_   s              @@@@r>   test_Series_constructionrV     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?@r=   c                  h  ^^^^	^
 [        [        [        S-  -  [        [        S-  -  -   [        [        -  -
  [
        [        S-  -  [        [        S-  -  -   [        [        -  [        -  -
  [        5      m[        [        [        -  [        -
  [        [        -  [        -   [        5      n [        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      n[        TX/U* U * T//5      m[        U * /U * /U* //5      m[        U* //5      m	[        [        /[        /[        * //5      n[        R                  " [!        S[        -  /5      [        5      m
[#        TT5      nUR$                  TT4:X  d   eUR&                  [        :X  d   eUR(                  UR*                  UR,                  4s=:X  a  S:X  d   e   e[#        T	TT5      nUR$                  T	TT4:X  d   eUR&                  [        :X  d   eUR(                  UR*                  UR,                  4s=:X  a  S:X  d   e   e[#        T	[/        T* U* 5      T5      nUR$                  T	[/        T* U* 5      T4:X  d   eUR(                  UR*                  UR,                  4s=:X  a  S:X  d   e   e[1        [2        S 5        [1        [4        UU4S j5        [1        [2        UU4S j5        [1        [2        U	U
4S	 j5        [1        [4        UU	4S
 j5        [1        [4        UU	4S j5        [1        [4        U	4S j5        g )Nr3   r/   r1   r.   )r/   r.   c                      [        5       $ r|   r#   r<   r=   r>   r?   .test_MIMOSeries_construction.<locals>.<lambda>E  s    z|r=   c                     > [        TT 5      $ r|   rY  )tf_1tfm_1s   r>   r?   rZ  H  s    j5r=   c                      > [        T TT * 5      $ r|   rY  r]  tfm_2s   r>   r?   rZ  L  s    z%?r=   c                     > [        T T5      $ r|   rY  )tfm_3tfm_5s   r>   r?   rZ  O  s    z%7r=   c                     > [        ST T5      $ r   rY  r`  rb  s   r>   r?   rZ  R  s    jE59r=   c                  J   > [        [        S-  [        [        -  -   T * T5      $ r   )r#   r;   rJ   re  s   r>   r?   rZ  S  s    jA!eVUCr=   c                  >   > [        [        S[        -  /5      T 5      $ r   )r#   r   rJ   rb  s   r>   r?   rZ  T  s    j1>r=   )r   rO   r;   rP   rQ   rR   rJ   rS   rX   r*  r   r"   TF3TF2TF1from_Matrixr   r#   rN   r4  shapenum_outputs
num_inputsr$   r-   rY   rZ   )tf_2tf_3tfm_4s8s9s11r\  r]  r`  rb  rc  s         @@@@@r>   test_MIMOSeries_constructionrv  +  s   Bq!tGbAg-14bAg1a46G"Q$q&6PRSTDBqD1HbdQh2DAq!tafRik1BE91=D"T4$6$t8L#MNE"dUGteWug#>?E"dUG9-E"SEC5C4&#9:E"..vqse}a@E	E5	!B77uen$$$66Q;;886@&@@@@@	E5%	(B77ueU++++66Q;;886@&@@@@@
UL%%8%
@C88|UFUF;UCCCC99#..9CVCCCCC :+, 956 :?@ :78 99:
9CD
9>?r=   c                  Z  ^^^^ [        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        [        S[        5      m[        [
        [        -  [        -
  [
        [        -  [        -   [        5      m[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        [        [        S-  -  [
        [        -  -   [        -
  [        [        -   [        5      n TT-  T-  [        TTT5      s=:X  a6  [        [        TT5      T5      s=:X  a  [        T[        TT5      5      :X  d   e   eTTT-   -  [        T[        TT5      5      :X  d   eTT-  U -   [        [        TT5      U 5      :X  d   eTT-  U -
  [        [        TT5      U * 5      :X  d   eTT-  T-   U -   [        [        TT5      TU 5      :X  d   eTT-  T-
  U -
  [        [        TT5      T* U * 5      :X  d   eTT-  T-
  U -   [        [        TT5      T* U 5      :X  d   eTT-  TU -  -   [        [        TT5      [        TU 5      5      :X  d   eTT-  TU -  -
  [        [        TT5      [        [        SS[        5      [        TU 5      5      5      :X  d   eTT-  TT-
  -  T-  [        TT[        TT* 5      T5      :X  d   eT* T-  [        T* T5      :X  d   eTT-  * [        [        SS[        5      [        TT5      5      :X  d   e[        [        UUU4S j5        [        [        UUU4S j5        [        [        U4S j5        [        TTSS9[        TT5      R                  5       s=:X  aC  [        [        [        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      :X  d   e   e[        TT[        TT* 5      SS9[        TT[        TT* 5      5      R                  5       s=:X  a  [        [        [
        [        -  [        -   [
        * [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   S-  -  [        5      :X  d   e   e[        TTT* SS9[        TTT* 5      R                  5       s=:X  an  [        [        [
        * [        -  [        -   -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e   e[        TT* S	S9[        TT* 5      R                  5       :X  a   e[        [        TT5      [        TT* 5      5      R                  5       [        [        [        S-  S[        -  [        -  [        -  -   [        S-  -   -  S-   [
        * [        -  [        [
        [        -  [        -   -  -   [        -   -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        T* T* T* 5      R                  5       [        [        [
        * [        -  [        -   -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TTT5      R                  5       * [        [        * [
        [        -  [        -
  -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TT[        TT* 5      T5      R                  5       [        [        [
        [        -  [        -
  S-  -  [        [        S-  S[        -  [        -  [        -  -   [        S-  -   -  S-
  -  [
        [        -  [        -   S-  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TT5      R                  [         5      [        [        [        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      :X  d   e[        TTT* 5      R                  [         5      [        [        [
        * [        -  [        -   -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        [        TT5      [        TT* 5      5      nUR                  (       d   eUR                   (       a   eUR"                  (       d   e[        TTT5      nUR                  (       d   eUR                   (       d   eUR"                  (       a   e[        TT* [        TT* 5      5      nUR                  (       d   eUR                   (       d   eUR"                  (       a   eg )
Nr.   r/   rx   c                     > T T-  T-  $ r|   r<   r\   r]   r_   s   r>   r?   'test_Series_functions.<locals>.<lambda>k  s    s3ws{r=   c                     > T TT-
  -  $ r|   r<   ry  s   r>   r?   rz  l  s    sC#Ir=   c                  $   > T [        / SQ5      -  $ rF   r   r   s   r>   r?   rz  m  s    s6)#44r=   Try   F)r   r;   r*  r   r   rQ   rJ   rO   rP   r   r    r-   rY   r   rewriter)  r-  r0  )ra   S1S2S3r\   r]   r^   r_   s       @@@@r>   test_Series_functionsr  W  s	   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:Cs73;&c3/ )6&c:JC3P )#vc3'() ) ) ) )c	?fS(3*<====s7S=HVC%5s;;;;s7S=HVC%5t<<<<s7S=3(6#s+;S#"FFFFs7S=3(6#s+;cTC4"HHHHs7S=3(6#s+;cT3"GGGGs7SWS)96#s;K LLLLs7SWS)96BRSUWXZ[B\^dehjm^n;o pppps7C#Is"fS#xcT7JC&PPPP48vsdC((((W: 0Q :F3<LMMMM
:*+
:./
:45 #sT*fS#.>.C.C.E ;AqD1Q3r6$;.Q6:; ; ; ; ;#sHS3$/$?6#sT\]`cfbfTgChCmCmCo ABqD1HA	AqD1Q3r6$;4FQ4N'OOPSUVWSWZ[S[^_ab^befghehikeklpep^psuwxsx^x{|]|R|~  	AA A A A A#sSD40F3cT4J4O4O4Q TRCEAIAAqD1Q3r6$;4FQ4N(OQRST T T T TcC4%0F34E4J4J4LLLL(3$hsSD&9:??A!QTAaCF4K/"a%781<s1uq"Q$QR(|?SVW?WX[]^_[_bc[cfgijfjmnopmpqsmstxmxfx{}  @A  |A  gA  [B  DE  	FF F F3$sd#((*RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T3S!&&((!RTAXAAqD1Q3r6$;4FQ4N(OQRST T T#sHS3$/5::<BqD1Hq=!QTAaCF4K-?"a%-G*H1*LMPRSTPTWXPX[\}^_ab^befghehikeklpep^psuwxsx^xOy{|}~ ~ ~ #s##$459I!QPQTTUVWTWXZTZ[_T_M_bdfgbgMgij9kkkk#sSD!))*:;RCEAIAAqD1Q3r6$;4FQ4N(OQRST T T 
c"HS3$$7	8B<<<$$$$>>>	S#	B<<<    ~~	cT8C#.	/B<<<    ~~~r=   c                  l  ^^^^	^
 [        [        [        [        /[        * [        * [        //5      m[        [        * /[        * /[        * //5      m[        [        * //5      n [        [        * [        * /[        * [        //5      m[        [        [        * /[        * [        * //5      m	[        [        * /[        //5      m
[        [        /[        * //5      nTT-  T
-   [	        [        TT5      T
5      :X  d   eTT-  U-   T
-   [	        [        TT5      UT
5      :X  d   eTT-  T
-
  U-
  [	        [        TT5      T
* U* 5      :X  d   eTT	-  TT	-
  -   [	        [        T	T5      TT	* 5      :X  d   eTT
* -  T* T
-  -   [	        [        T
* T5      [        T
T* 5      5      :X  d   e[        [        UU4S j5        [        [        UU4S j5        [        [        UU
4S j5        [        [        UU
4S j5        [        [        UU4S j5        [        [        UUU4S j5        [        [        UUUU	4S j5        [        [        UUUU	4S j5        TT-  U * -  [        U * TT5      :X  d   eTT* -  U -  [        U T* T5      :X  d   e[        [        UU	4S	 j5        [        [        UU	4S
 j5        [        [        UU	4S j5        [        [        UU	4S j5        [        [        UU	4S j5        [        TTSS9[        TT5      R                  5       s=:X  Gav  [        [        [        S-  * [        [        -  [        -   S-  -  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        * [        -  [        -   [        [        -  [        -
  -  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  -   [        [        -  [        -   S-  -
  [        [        -  [        -   S-  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        5      4[        [        S-  [        [        -  [        -   S-  -  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        * [        -  [        -   [        [        -  [        -   -  [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   [        [        -  [        -
  [        [        -  [        -   -  [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   [        [        -  [        -   S-  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        5      445      :X  d   e   e[#        SS[        -   -  S[        -   S[        S-  -   S[        -  -   S-  -  //5      n[#        S[        -   /S[        S-  -   S[        -  -   S-  S[        -   -  //5      n[         R$                  " U[        5      [         R$                  " U[        5      pT[        XT5      R                  5       [        [        S[        S-   S-  -  [        S-  S[        -  -   S-   S-  -  [        S-   S-  [        S-  S[        -  -   S-   S-  -  [        5      445      :X  d   e[        XT5      R                  5       R'                  5       [        [        SS[        5      445      :X  d   e[        U * T* TSS9[        U * T* T5      R                  5       s=:X  Gac  [        [        [        S-  [        [        -  [        -   S-  -  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        [        -  [        -
  S-  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  -   [        [        -  [        -   S-  -   [        [        -  [        -   S-  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        5      4[        [        S-  * [        [        -  [        -   S-  -  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        * [        -  [        -   [        [        -  [        -   -  [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   [        [        -  [        -
  [        [        -  [        -   -  [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   [        [        -  [        -   S-  [        S-  S[        -  [        -  [         -  -   [        S-  -   S-  -  [        5      445      :X  d   e   e[        [	        TT	5      T	SS9[        [	        TT	5      T	5      R                  5       s=:X  GaX  [        [        [        * [        * [        -  [        -
  [        * [        -  [        -   [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   -  [        [        -  [        -   [        S-  S[        -  [        -  [         -  -   [        S-  -   -  [        5      [        [        [        * [        -  [        [        [        -  [        -   -  -
  [        -   -  [        [        -  [        -   [        5      4[        [        * [        * [        -  [        -
  [        * [        -  [        -   [        S-  S[        -  [        -  [         -  -   [        S-  -   -  -   -  [        [        -  [        -   [        S-  S[        -  [        -  [         -  -   [        S-  -   -  [        5      [        [        * [        -  [        -   [        * [        -  [        [        [        -  [        -   -  -
  [        -   -  [        [        -  [        -   S-  [        5      445      s=:X  a.  [        [	        TT	5      T	5      R)                  [         5      :X  d   e   eg )Nc                     > T T-  [         -   $ r|   rk  tfm1tfm2s   r>   r?   +test_MIMOSeries_functions.<locals>.<lambda>  s    tDy3r=   c                     > T T-  [         -   $ r|   )rO   r  s   r>   r?   r    s    d4i"nr=   c                  "   > T T-  [         S-
  -
  $ r   r   tfm4tfm6s   r>   r?   r    s    d4i1q51r=   c                     > T T* -  S-
  $ r   r<   r  s   r>   r?   r    s    dD5j1nr=   c                  (   > S[         S-  -   T T-  -   $ )Nrx   r2   r   r  s   r>   r?   r    s    rAqDyDI5r=   c                     > T * T-  T-   $ r|   r<   r  r  r  s   r>   r?   r    s    teDj4/r=   c                     > T T-  T-
  T-   $ r|   r<   r  r  r  tfm5s   r>   r?   r    s    d4i$.5r=   c                     > T T-  TT-  -
  $ r|   r<   r  s   r>   r?   r    s    d4i$t)3r=   c                     > T T-  [         -  $ r|   r  r  r  s   r>   r?   r    s    tDy}r=   c                     > T T-  [         -  $ r|   rP   r  s   r>   r?   r    s    d4ilr=   c                  $   > T T* -  [         S-
  -  $ r   r   r  s   r>   r?   r    s    dD5j!a%0r=   c                     > TT -  S-  $ r  r<   r  s   r>   r?   r    s    d4ikr=   c                  *   > [         S-  * S-   T-  T -  $ )Nr3   r.   r   r  s   r>   r?   r    s    1uqy$.t3r=   Try   r/   r.   r3   )r"   rk  rj  ri  r$   r#   r-   rY   rZ   r   r   r   rQ   r;   rJ   r   r*  r   rl  r   r}  )tfm3tfm7mat_1mat_2tm_1tm_2r  r  r  r  r  s         @@@@@r>   test_MIMOSeries_functionsr    s   !Cc?cTC44E"FGD!SD6SD6SD6":;D!SD6(+D!SD3$<3$"=>D!C#;#t"=>D!SD6C5/2D!C5C4&/2D9t|JtT,BDIIII9td"l:dD3I4QU&VVVV9td"l:dD3ID5SWRW&XXXX9t$Zd5KTTXSX(YYYY:$t$Zt5LjY]`d_dNe(ffff
:./
9,-
912
9,-
956 9/0
956
9349dU?j$d;;;;$J
4$ ==== :,-
9*+
901
9)*
934 tTD1Zd5K5P5P5R >!$4adUBqD1Hq=5H!Q$QRSTQTUWQWX\Q\J\_acd_dJdghIh5hmolopqlqtuluxz{|x|  @A  yA  lB  DE  GH  DH  KL  MN  KN  OQ  KQ  RV  KV  DV  Y[  ]^  Y^  D^  ab  Cb  lb  6b  fh  ij  fj  mn  fn  qr  er  6r	AAq!tac"fTk)BE1A55q%: $<	!Q$1q1},adQqSVD[.@2q5.H1-LLQSPSTUPUXYPY\^_`\`cd\dOeghjkgknopqnqrtntuynygy|~  AB  }B  hB  PC  C  GI  JK  GK  NO  GO  RT  UV  RV  YZ  RZ  F[  ]^  `a  ]a  de  fg  dg  hj  dj  ko  do  ]o  rt  vw  rw  ]w  Fx  x	AAq!tac"fTk)BE1A55q
: 	<#= >> ? > ? > Q!WqsQq!tVAaCZ!O3456EacGqAvaczAoqs3456E'33E1=?U?a?abgij?k$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r=   c                    ^^^^ [        [        [        S-  -  [        [        S-  -  -   [        [        -  -
  [
        [        S-  -  [        [        S-  -  -   [        [        -  [        -  -
  [        5      m[        [        [        -  [        -
  [        [        -  [        -   [        5      m[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        S5      " [        5      n [        S5      " [        5      n[        TT5      nUR                  TT4:X  d   eUR                  [        :X  d   e[        [        TT* 5      T5      nUR                  [        TT* 5      T4:X  d   eUR                  [        :X  d   e[        U S[        5      n[        U* S[        5      n[        T[        XE* 5      T5      nUR                  T[        XE* 5      T4:X  d   e[        TTT5      nUR                  TTT4:X  d   e[        XE5      nUR                  XE4:X  d   eUR                  [        :X  d   e[        TT5      n	X):X  d   eX#:X  a   e[        TT[        TT* 5      5      n
U
R                  TT[        TT* 5      4:X  d   e[        TT[        TT* 5      T5      nUR                  TT[        TT* 5      T4:X  d   e[!        ["        UU4S j5        [!        ["        UUUU4S j5        [!        ["        UU4S	 j5        [!        [$        UU4S
 j5        [!        [$        UU4S j5        [!        [$        U4S j5        g )Nr3   r/   r1   r.   r=  r>  c                     > [        T T5      $ r|   r    rA  s   r>   r?   ,test_Parallel_construction.<locals>.<lambda>  s    xC0r=   c                      > [        T TTT5      $ r|   r  rD  s   r>   r?   r    s    xCc:r=   c                     > [        T * T5      $ r|   r  r   s   r>   r?   r     s    xc2r=   c                     > [        ST T5      $ r   r  rH  s   r>   r?   r    s    hq"c2r=   c                  H   > [        [        S-  [        [        -  -   TT 5      $ r   )r    r;   rJ   rF  s   r>   r?   r    s    hq!tacz3<r=   c                  2   > [        T [        / SQ5      5      $ rK  )r    r   r   s   r>   r?   r    s    hsF<,@Ar=   )r   rO   r;   rP   rQ   rR   rJ   rS   rX   r*  r   r   r    rN   r4  r   r-   rY   rZ   )rL  rM  p0r   rP  r`   r   r   r   p5p6p7r[   r]   r^   r_   s               @@@@r>   test_Parallel_constructionr    s   	"QT'Bq!tG+bd2Bq!tGbAg4E1Q4NPQ	RB
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
1adQtVBYq[02q58!
<C
5/!
C
3-
C	"c	B77r3i66Q;;	&cT"C	(B77vb3$'----66Q;;CA&DSD!Q'D	"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Br=   c                    ^^	^
^^ [        [        /[        /[        //5      m[        [        * /[        /[        //5      m	[        [        //5      m
[        [        /[        /[        //5      m[        [        [        /[        [        //5      n [        [        [        /[        [        //5      n[         R                  " [        S[        -  //5      [        5      m[        TT	5      nUR                  TT	4:X  d   eUR                  [        :X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        [        T
T5      T	5      nUR                  [        T
T5      T	4:X  d   eUR                  [        :X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        T[        T
T5      T	5      nUR                  T[        T
T5      T	4:X  d   eUR                  [        :X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        T	TT5      nUR                  T	TT4:X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        X5      nUR                  X4:X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        T	T[        T
* T5      T* 5      nUR                  T	T[        T
* T5      T* 4:X  d   eUR                  UR                  UR                  4s=:X  a  S:X  d   e   e[        [         S 5        [        [         UU	4S j5        [        [         UU
U4S j5        [        ["        U
U4S j5        [        [         UU4S j5        [        [         U	U4S	 j5        g )
Nr.   )r3   r.   r/   r/   c                      [        S5      $ )Nr<   r$   r<   r=   r>   r?   0test_MIMOParallel_construction.<locals>.<lambda>+  s	    l2.r=   c                  &   > [        T T[        5      $ r|   )r$   rk  r  s   r>   r?   r  .  s    l4s;r=   c                     > [        T TT5      $ r|   r  )r  r  r  s   r>   r?   r  1  s    l4t<r=   c                     > [        T T5      $ r|   r  )r  r  s   r>   r?   r  4  s    |D$7r=   c                     > [        ST T5      $ r   r  )r  r  s   r>   r?   r  7  s    l1dD9r=   c                  J   > [        [        S-  [        [        -  -   T* T 5      $ r   )r$   r;   rJ   )r  r  s   r>   r?   r  8  s    l1a4!A#:udCr=   )r"   rk  rj  ri  rl  r   rJ   r$   rN   r4  r;   rm  rn  ro  r#   r-   rZ   rY   )r  r  p8p9p10p11p12p13r  r  r  r  r  s           @@@@@r>   test_MIMOParallel_constructionr    s*   !C53%#"78D!SD6C53%"89D!C5'*D!C53%#"78D!C:Sz":;D!C:Sz":;D!--fqseWoqAD	dD	!B77tTl"""66Q;;886@&@@@@@	jt,d	3B77z$-t444466Q;;886@&@@@@@
tZd3T
:C88jt4d;;;;77a<<99#..9CVCCCCC
tT4
(C88dD))))99#..9CVCCCCC
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Dr=   c            	        ^^^^ [        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        [        S[        5      m[        [
        [        -  [        -
  [
        [        -  [        -   [        5      m[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        [        [        S-  -  [
        [        -  -   [        -
  [        [        -   [        5      n TT-   T-   [        TTT5      :X  d   eTT-   T-   U -   [        TTTU 5      :X  d   eTT-   T-
  U -
  [        TTT* U * 5      :X  d   eTTT-  -   [        T[        TT5      5      :X  d   eTTT-  -
  [        T[        TT5      * 5      :X  d   eT* T-
  [        T* T* 5      :X  d   eTT-   * [        [        SS[        5      [        TT5      5      :X  d   eTT-   T-  [        [        TT5      T5      :X  d   eTT-   TU -  -  [        [        TT5      TU 5      :X  d   eTT-   * U * -  [        [        SS[        5      [        TT5      U * 5      :X  d   eTT-   TT-  -   U -   [        TT[        TT5      U 5      :X  d   eTT-   TT-  -   T-
  [        TT[        TT5      T* 5      :X  d   eTT-   U -   TU -   -  [        [        TTU 5      [        TU 5      5      :X  d   e[        [        UUU4S j5        [        [        UUU4S j5        [        [        U4S j5        [        TTSS9[        TT5      R                  5       s=:X  ar  [        [        [        S-  S[        -  [        -  [        -  -   [        S-  -   -  S-   [        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      :X  d   e   e[        TT[        T* T5      SS9[        TT[        T* T5      5      R                  5       s=:X  Ga"  [        [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   S-  -  [
        * [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   S-  -  [        5      :X  d   e   e[        TTT* SS9[        TTT* 5      R                  5       s=:X  a  [        [
        [        -  [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        -   [
        * [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e   e[        TT* S	S9[        TT* 5      R                  5       :X  a   e[        [        TT5      [        TT5      5      R                  5       [        [        [
        [        -  [        -
  -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [
        [        -  [        -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        T* T* T* 5      R                  5       [        [
        * [        -  [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -
  [        -
  [
        * [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TTT5      R                  5       * [        [
        * [        -  [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -
  [        -
  [
        [        -  [        -
  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -
  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TT[        TT* 5      T5      R                  5       [        [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [
        [        -  [        -   -  -
  S[
        -  [        -  S[        -  -
  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TT5      R                  [         5      [        [        [        S-  S[        -  [        -  [        -  -   [        S-  -   -  S-   [        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      :X  d   e[        TTT* 5      R                  [         5      [        [
        [        -  [        [
        [        -  [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        -   [
        * [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        T[        TT5      5      [        TTT5      s=:X  a  [        [        TT5      T5      :X  d   e   e[        [        TT5      [        TT5      5      nUR                  (       d   eUR                   (       a   eUR"                  (       d   e[        TT* T* 5      nUR                  (       d   eUR                   (       a   eUR"                  (       d   e[        TT* [        TT5      5      nUR                  (       d   eUR                   (       a   eUR"                  (       d   eg )
Nr.   r/   rx   c                     > T T-   T-   $ r|   r<   ry  s   r>   r?   )test_Parallel_functions.<locals>.<lambda>O  s    sSy3r=   c                     > T TT-  -
  $ r|   r<   ry  s   r>   r?   r  P  s    sSW}r=   c                  $   > T [        / SQ5      -   $ rF   r   r   s   r>   r?   r  Q  r   r=   Try   F)r   r;   r*  r   r   rQ   rJ   rO   rP   r    r   r-   rY   r   r}  r)  r-  r0  )ra   P1P2P3r\   r]   r^   r_   s       @@@@r>   test_Parallel_functionsr  ;  s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C9s?hsC55559s?S HS#sC$@@@@9s?S HS#tcT$BBBBS=HS&c*:;;;;S=HS6#c?*:;;;;4#:3$----3Y<6"22q!"<hsC>PQQQQ#Is?fXc3%7====#IC F8C+=sC$HHHH3Y<'7Aq'A8CQTCUX[W[ \\\\9s3w$c6#s;KS(QQQQ9s3w$c6#s;KcT(RRRR#IOcCi(F8Cc3JHUXZ]L^,____
:./
:,-
:67 Ct,c0B0G0G0I \AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \ \ \CfcT3/$?c63$,-224,8HBqDSTHWXZ[W[^_`a^abd^dei^iWilnpqlqWqtuVuIuSUQYA!Bt+b!e34J58:1q1a4!A#b&QU+CUXZ\]X]C]7^J_acdeaehiailmoplp!Btm !em$&'l( a()*9,, , , , , CsdT2hsC#6N6S6S6U :A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]ortvwrw]wPxx!tax!Q$1R,r1u45q	:: : : : : cTE2hsSD6I6N6N6PPPPF3$fS#&67<<>BqD1Hq!tac"fTk'9BE'ABQ1q\QTVWXTX[\T\_`bc_cfghifijlflmqfq_qtvxyty_ySz|}~  SD3$%**,"QBqD1Hq!tac"fTk/ABE/I!JJQNSURUVWRWZ[R[^_ab^befghehikeklpep^psuwxsx^xQyyTAX1qs2vd{*RU23Q	88 8 8 S#s#((**"QBqD1Hq!tac"fTk/ABE/I!JJQNRTUVRVYZRZ]^`a]adefgdghjdjkodo]ortvwrw]wQxxTAX1qs2vd{*RU23Q	88 8 8 CfS3$/5::<BqD1Hq!tac"fTk'9BE'ABQ1q\QUVWYUYZ[U[^_`a^aUadeghdhklmnknoqkqrvkvdv!ee U !tax!Q$1R"4r1u"<=q	BB B B C%%&67AqD1Q3r6$;.Q67!;QTAaCF4K=ORTVWRW=WYZ[\ \ \Csd#++,<=A2a4!8adQqSVD[.@2q5.H IIAMRTQTUVQVYZQZ]^`a]adefgdghjdjkodo]oU^ Q dQhA!Bt!3b!e!;<a	AA A A C#s+,c30Gl8T\]`beTfhkKllllll	&c"F3$4	5B<<<$$$$>>>	#tcT	"B<<<$$$$>>>	#tVC-	.B<<<$$$$>>>r=   c                  X  ^^^^^^ [        [        [        -  [        [        -  -   [        -
  [        [        5      n [        [        [        S-  -  [
        [        -  -   [        -
  [        [        -   [        5      n[        [        /[        /[        //5      m[        [        * /U/[        * //5      m[        U/U* /[        //5      m[        [        U* /[        U//5      m[        [        [        /[        U* //5      m[        [        * //5      n[        U /U * /U //5      mTT-   T-   [        TTT5      s=:X  a  [        [        TT5      T5      :X  d   e   eTT-
  T-
  [        TT* T* 5      :X  d   eTT-
  T* U-  U* -  -   [        TT* [        U* UT* 5      5      :X  d   eTT-   T* U-  -
  [        TT[        UT* 5      * 5      :X  d   eTT-
  T-
  T-   [        TT* T* T5      :X  d   eTT-   T-
  T-
  [        TTT* T* 5      :X  d   e[        [        UU4S j5        [        [        UU4S j5        [        [        UU4S j5        [        [        UU4S j5        [        [        UU4S j5        [        [        UUU4S j5        [        [        UUU4S j5        [        [        UUU4S	 j5        [        [        UUU4S
 j5        TT-   U-  [        U[        TT5      5      :X  d   eTT-
  U-  U* -  [        U* U[        TT* 5      5      :X  d   eTT-
  T-
  X"-   -  [        [        X"5      [        TT* T* 5      5      :X  d   e[        [        UU4S j5        [        [        UU4S j5        [        [        UU4S j5        [        [        UUU4S j5        [        [        UU4S j5        [        [        UUUU4S j5        [        [        UUU4S j5        [        TTSS9[        TT5      R                  5       s=:X  Ga  [        TT5      R!                  [        5      s=:X  Gav  [        [        ["        * [        S-  S[        -  [$        -  [&        -  -   [$        S-  -   -  S-   [        S-  S[        -  [$        -  [&        -  -   [$        S-  -   [        5      4[        [        * [        [        S-  -  -   [
        [        -  -   ["        [        [        -   -  -   [        [        -   [        5      4[        [
        * [        -  [        -
  [
        [        -  [        -
  [        S-  S[        -  [$        -  [&        -  -   [$        S-  -   -  -   [
        [        -  [        -   [        S-  S[        -  [$        -  [&        -  -   [$        S-  -   -  [        5      445      :X  d   e   eg )Nr/   c                     > T T-   [         -   $ r|   )rj  r  s   r>   r?   -test_MIMOParallel_functions.<locals>.<lambda>  s    td{S0r=   c                     > T T-
  [         -
  $ r|   r  r  s   r>   r?   r    s    dTkB.r=   c                  "   > T T-
  [         S-
  -
  $ r   r   r  r  s   r>   r?   r    s    dTkQU3r=   c                     > T* T -
  S-
  $ r  r<   r  s   r>   r?   r    s    tedlQ.r=   c                  (   > S[         S-  -
  T-
  T -
  $ r   r   r  s   r>   r?   r    s    q1a4x4/$6r=   c                     > TT -
  T-
  $ r|   r<   )r  r  r  s   r>   r?   r        td{T1r=   c                     > TT -
  T-   $ r|   r<   )r  r  r  s   r>   r?   r    r  r=   c                     > T T-   T-   $ r|   r<   r  s   r>   r?   r    s    dTkD0r=   c                     > T T-
  T-
  $ r|   r<   r  s   r>   r?   r    s    td{d2r=   c                     > T T-   [         -  $ r|   r  r  s   r>   r?   r    s    tS0r=   c                     > T T-
  [         -  $ r|   )rQ   r  s   r>   r?   r    s    td{B.r=   c                  "   > TT -   [         S-
  -  $ )Nr5   r   r  s   r>   r?   r    s    td{QU3r=   c                     > T T-   T-   S-  $ rC   r<   )r  r  r  s   r>   r?   r    s    td{T114r=   c                  (   > S[         S-  -
  T T-   -  $ r   r   )r  r  s   r>   r?   r    s    q1a4x$+6r=   c                     > TT -
  T-  T-  $ r|   r<   )r  r  r  r  s   r>   r?   r    s    tT1$6r=   c                     > T T-
  T-  $ r|   r<   )r  r  r  s   r>   r?   r    s    tT1r=   Try   r.   )r   rO   rJ   rP   r;   rQ   r"   rk  rj  ri  r$   r#   r-   rY   rZ   r   r}  r   r   r*  )	r_   ra   r  r  r  r  r  r  r  s	      @@@@@@r>   test_MIMOParallel_functionsr    s   
2a4!R%<!+Q
2C
2ad7RT>B.B
:C!C53%#"78D!SD6C5C4&"9:D!C5C4&3%"89D!C#;c
";<D!C:cT{";<D!SD6(+D!C5C4&3%"89D$;dD$!?o<P\]acgPhjnCoooooo$;dTED5!AAAA$;4%*dU*+|D4%UYTY[_bfafIg/hhhh$;4%*%dD:dUYTYCZBZ)[[[[$;$TD54%(NNNN$;$T4$(NNNN
:01
9./
934
9./
967
:12
:12
901
9234KD,tT2J!KKKK4Kte#z4%|DSWRW?X'YYYY4K$-L<TVbcgjninqupuVv1wwww
:01
9./
934
945
967 :67
:12 td3|D$7O7T7T7V VD$''(>?V 0!QTAaCF4K5G"a%5O1PST1TVWYZVZ]^_`]`ac]cdh]hVhkmopkpVprs tv	2#1a4-"Q$.BF;R!VQ	GIL\^`]`ab]bef]fjlmnjnqrjr	
A!Bt	b!e	#j% ^%')!tax!Q$1R2Dr1u2L&MqMR LTU VV W V W Vr=   c                  	  ^^	^
^^ [        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        [        S[        5      m	[        [
        [        -  [        -
  [
        [        -  [        -   [        5      m
[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        [        [        S-  -  [
        [        -  -   [        -
  [        [        -   [        5      m[        [        [        -
  [        [        -   [        5      n [        [        SS[        5      TT	-  T
-  5      nUR                  [        SS[        5      [        TT	T
5      S4:X  d   eUR                  [        SS[        5      :X  d   eUR                  [        TT	T
5      :X  d   eUR                  [        :X  d   e[        TT	T
-  5      nUR                  T[        T	T
5      S4:X  d   eUR                  T:X  d   eUR                  [        T	T
5      :X  d   eUR                  [        :X  d   e[        TT	-  T5      nUR                  [        TT	5      TS4:X  d   eUR                  [        TT	5      :X  d   e[        TU 5      nUR                  TU S4:X  d   eUR                  T:X  d   eUR                  [        :X  d   e[        T[        SS[        5      5      nUR                  T[        SS[        5      S4:X  d   eUR                  [        :X  d   eU[        T5      :X  d   e[        [        SS[        5      T5      nUR                  [        SS[        5      TS4:X  d   eUR                  [        :X  d   e[        TU -  [        SS[        5      5      * nUR                  [        [        SS[        5      [        TU 5      5      [        SS[        5      * S4:X  d   eUR                  [        [        SS[        5      [        TU 5      5      :X  d   e[        [         UU	U
4S j5        [        [         U4S j5        [        [         S 5        [        [         S 5        [        ["        U	UU4S j5        [        ["        UU	4S	 j5        [        ["        U4S
 j5        [        ["        UU4S j5        g )Nr.   r/   rx   c                  "   > [        T TT-   5      $ r|   r!   r\   r]   r^   s   r>   r?   ,test_Feedback_construction.<locals>.<lambda>  s    hsC#I6r=   c                  2   > [        T [        / SQ5      5      $ rF   )r!   r   r   s   r>   r?   r    s    hsF9,=>r=   c                  F    [        [        SS[        5      [        S-
  5      $ r   )r!   r   r;   r<   r=   r>   r?   r    s    h'71a'@!a%Hr=   c                      [        SS5      $ r   r  r<   r=   r>   r?   r    s
    hq!nr=   c                  "   > [        T TT-  5      $ r|   r  )r]   r_   ra   s   r>   r?   r    s    xSW5r=   c                     > [        TT S5      $ )N      ?r  r\   r]   s   r>   r?   r    s    xS#6r=   c                  $   > [        T T S-  * 5      $ )Nrx   r  r   s   r>   r?   r    s    xc2gX6r=   c                     > [        T T5      $ r|   r  r   s   r>   r?   r    s    xS1r=   )r   r;   r*  r   r   rQ   rJ   rO   rP   r!   rN   r   sys1sys2r4  r-   rZ   rY   )rc   f1f2f3f4f5f6f7r\   r]   r^   r_   ra   s           @@@@@r>   test_Feedback_constructionr    s   
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+C	"1a+SWS[	9B77'1a0&c32GLLLL77&q!Q////77fS#s++++66Q;;	#s3w	B77sF3,b111177c>>77fS#&&&&66Q;;	#c'3	B77vc3'b111177fS#&&&&	#s	B77sCn$$$77c>>66Q;;	#'1a0	1B77s,Q15r::::66Q;;#	"1a+S	1B77'1a0#r::::66Q;;
3s7,Q15
6	6B77v.r1a8&c:JKN^_`bcefNgMgikllll77f-b!Q7S9IJJJJ 967
9>?
9HI
9,-
:56
:67
:67
:12r=   c            
        ^^^^^ [        SS[        5      m[        S[        S-  S[        -  [        -  [        -  -   [        S-  -   [        5      m[        [        S[        5      m[        [
        [        -  [        -
  [
        [        -  [        -   [        5      m[        [        [        -  [        [        -  -   [        -
  [        [        5      m[        [        [        S-  -  [
        [        -  -   [        -
  [        [        -   [        5      n [        [        [        -
  [        [        -   [        5      nTT-  T-  T-  U -  [        TTT[        TS5      U 5      :X  d   eTT-  T-  TU -  -  [        TT-  T-  R                  5       [        TU -  R                  5       S5      5      :X  d   eTTT-   -  [        TT5      :X  d   eTTTT-  T-  -   -  [        TTT-  T-  5      :X  d   eTTTT-  T-  -   -  [        TTT-  5      :X  d   eTT-  TTT-  -   -  [        TT-  T5      :X  d   eTT-  TTT-  U -  -   -  [        TT-  U 5      :X  d   eTT-  TTT-  U -  T-  -   -  [        TT-  U T-  5      [        TT-  TU -  5      4;   d   eT[        SS[        5      TU-  -   -  [        TU5      :X  d   eU TU -   -  [        U T5      :X  d   e[        [        UUU4S j5        [        [        UUUU4S j5        [        TTT-  T-  5      R                  5       [        [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [
        [        -  [        -
  -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        5      :X  d   e[        TTT-  T-  5      R                   S[        [
        [        -  [        -
  -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -  S-   -  :X  d   e[        TTT-  5      R                  5       [        [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [
        [        -  [        -
  -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TTT-  5      R                   S[        [
        [        -  [        -
  -  [
        [        -  [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -  S-   -  :X  d   e[        TT-  U 5      R                  5       [        [        [        [        -   -  [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [        * [        [        S-  -  -   [
        [        -  -   -  [        [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        TT-  U S5      R                   S[        * [        * [        [        S-  -  -   [
        [        -  -   -  [        [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -  S-   -  :X  d   e[        TU5      R                  5       [        [        [        [        -   -  [        [        -  [        [        -  -   [        -
  -  [        [        [        [        -   -  [        * [        -   [        [        -  [        [        -  -   [        -
  -  -   -  [        5      :X  d   e[        TU-  [        SS[        5      5      R                  5       * [        [        * [        * [        -   -  [        [        -   -  [        [        -  [        [        -  -   [        -
  -  [        [        [        -   -  [        [        [        -   -  [        * [        -   [        [        -  [        [        -  -   [        -
  -  -   -  [        5      :X  d   e[        TT5      R                  5       [        SS[        5      :X  d   e[        TTU -  5      R#                  [         5      [        [        [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        [        * [        [        S-  -  -   [
        [        -  -   -  [        [        -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  -   [        S-  S[        -  [        -  [        -  -   [        S-  -   -  [        5      :X  d   e[        [        SS[        5      T5      R#                  [         5      [        [        [        [        -  [        -   [        [        -  -   [        -
  [        5      :X  d   eg )Nr.   r/   rx   c                  ,   > T T-  T-  ST T-  T-  -   -  $ r   r<   r  s   r>   r?   )test_Feedback_functions.<locals>.<lambda>  s    c#gckQS_=r=   c                  &   > TT-  T TT-  T-  -   -  $ r|   r<   rD  s   r>   r?   r    s    s3w"s3ws{*:;r=   )r   r;   r*  r   r   rQ   rJ   rO   rP   r   r   r   r!   r-   rZ   rY   sensitivityr}  )ra   rc   r[   r\   r]   r^   r_   s     @@@@@r>   test_Feedback_functionsr    s	   	!Q	"B
1adQtVBYq[02q58!
<C
1a
#C
2a4!8RTAXq
1C
2a4!R%<!+Q
2C
2ad7RT>B.B
:C
1q5!a%
+CGCK#c!fS#sCRL#&NNNNGCKCG$C/A/A/CS#c'IYZ\E](^^^^c?hr3////c#gck!"hr3s73;&????"s3ws{"#xSW'====GSW%#c'2)>>>>GSWS[()Xc#gs-CCCCGSWS[_,-(3s7CG2LhWZ[^W^`cdg`gNh1iiii"1a+c#g56(3:LLLL"s(xR0000
9=>
:;<BC$))+"Q$(QTAaCF4K%7"a%%?@!RTAX,	AAqD1Q3r6$;&Q./C012	44 4 4 BC$00	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCS!&&("Q$(QTAaCF4K%7"a%%?@1bdQh<	AAqD1Q3r6$;&Q./D023Q$1R2Dr1u2LCNOP	RR R R CS!--	1bdQh<"Q$(QTAaCF4K%7"a%%?@AAEFG G GCGS!&&(BFQTAaCF4K%7"a%%?@1rcBqRStGmVXYZVZFZC[	a!Q$1R$r1u,-D.011qs2vd{0BRU0JCLMN	PP P P CGS!$00	A2sR1W}r!t#$rAv1qs2vd{0BRU0J&KLqPQR R RC""$AEBqD1b5L1$45q!QU)rAvPRSTPTWXZ\W\P\_`P`Fa:a7bdefg g gSW.q!Q78==??!aR!Va!e,bdQUlQ.>?AEAqSTuIZ[Y[^_Y_bdefbfijlninbnqrbrXsLsAtvwxy y yB  "&6q!Q&????CS!))*:;"q&1a4!A#b&+#5A#=>RC"QPQT'MTVWXTXDXAY	a!Q$1R$r1u,-B.011qs2vd{0BRU0JALMN	PP P P $Q1-s3;;<LMBqD1Hq"u,q0!45 5 5r=   c                     [        [        S-   S[        5      n [        [        S-   S[        5      n[        XS5      n[        XS5      n[        SS[        5      n[        U[        5      (       d   e[        U[        5      (       d   eUR
                  U :X  d   eUR
                  U :X  d   eUR                  [        U[        X5      5      :X  d   eUR                  [        U[        X5      * 5      :X  d   e[        X5      n[        X5      nX-  U:X  d   eX-   U:X  d   eUR                  5       [        [        S-   S-  [        S-   [        S-   -  S-   [        5      :X  d   eUR                  5       [        [        [        S-   [        S-   [        S-   -  S-   -  -   S-   [        S-   [        S-   -  S-   [        5      :X  d   e[        X-  US5      nU[        [        X5      U5      :X  d   eUR
                  X-  :X  d   eUR                  [        U[        U[        X5      5      5      :X  d   e[        X-  U[        5      nU[        [        X5      U[        5      :X  d   eUR
                  X-  :X  d   eg )Nr.   r/   rx   )
r   r;   r!   r3  r   rL   rM   r    r   r   )	r\   r]   fd1fd2unitrO  r   fd3r^   s	            r>   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r=   c                     [        SSSS9u  pp#pE[        SSS9u  pgnXUS-  -  -   U-  [        -  U-  n	XH-  n
XU-   -  nUS-  [        -  XT-   -  n[        U* U
[        -  S-   -  U	[        S-  -  S-
  [        5      n[        SU[        S-  -  [        [        -  -   [        5      n[        SU[        -  [        5      n[        U[        -  S[        5      n[        U[        [        5      n[        SS[        5      n[        UU-  U5      n[        UU-  U-  U5      nU[        [        U[        UU5      5      U5      :X  d   eUR                  [        U[        UU5      5      :X  d   eUR                  [        U[        U[        U[        UU5      5      5      5      :X  d   eXg-  [        -  [        S-  -  US-  -  XT-   -  U[        S-  -  [        [        -  -   S-  -  [        * U-  U-  [        S-  XS-  U-  -   -  -   -  U* [        -  U-  U-  [        -  US-  -  U[        -  U-   -  [        U-  XT-   -  U[        S-  -  [        [        -  -   -  [        * U-  U-  [        S-  XS-  U-  -   -  -   -  -   -  [        S-  U-  U[        S-  -  [        [        -  -   -  U* [        -  U-  U-  [        -  US-  -  U[        -  U-   -  [        U-  XT-   -  U[        S-  -  [        [        -  -   -  [        * U-  U-  [        S-  XS-  U-  -   -  -   -  -   -  Xg-  [        -  [        -  U-  XT-   S-  -  U[        S-  -  [        [        -  -   -  [        * U-  U-  [        S-  XS-  U-  -   -  -   -  [        S-  U-  U[        S-  -  [        [        -  -   -  U* [        -  U-  U-  [        -  US-  -  U[        -  U-   -  [        U-  XT-   -  U[        S-  -  [        [        -  -   -  [        * U-  U-  [        S-  XS-  U-  -   -  -   -  -   -  -   -  XT-   -  -  nUR                  5       U-
  R                  5       S	:X  d   eg )
NzI_b, I_s, m, h, l2, l1T)realnonnegativezK_D, K_P, v)r  r/   r.   r3   r   )r   rV   r   r;   r   r!   r   rL   rM   r    r   r   )IbIsmhl2l1KDKPvtau1_sqtau2tau3KGthetaGdeltaGpsiDcontPIcontGunityGinnerGouterexprs                         r>   test_issue_26161r  F  s   "#;154I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4r=   c                      [        S[        [        5      n [        [        [        S-  S-
  [        5      n[        [        [        S-   [        5      n[        [        [        S-  S-   [        5      n[        X/X#//5      n[        X/X0//5      n[        X#/X//5      n[        XE5      nUR                  XES4:X  d   eUR
                  U:X  d   eUR                  U:X  d   eUR                  [        :X  d   eUR                  S:X  d   eU* * U:X  d   e[        XTS5      nUR                  XTS4:X  d   eUR
                  U:X  d   eUR                  U:X  d   eUR                  [        :X  d   eUR                  S:X  d   e[        U[        Xe5      5      n	U	R                  U[        Xe5      S4:X  d   eU	R
                  U:X  d   eU	R                  [        Xe5      :X  d   eU	R                  [        :X  d   eU	R                  S:X  d   e[        SS[        -  /SS//5      n
[        R                  " U
[        5      =p[        X5      nUR                  XS4:X  d   eUR
                  UR                  s=:X  a  U:X  d   e   eg )Nr.   r3   r/   rx   r   )r   r;   r"   r%   rN   r  r  r4  signr#   r   rl  )r\   r]   r^   r_   r]  r`  rb  r  r  r  matr  
controllerr  s                 r>   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%%%%%%r=   c                    ^^^^^^	^
^^^ [        S[        [        5      m[        [        [        S-  S-
  [        5      m[        [        [        S-
  [        5      n [        [        [        S-  S-   [        5      n[        SS[        5      n[        S[        S-
  [        5      n[        TT/X//5      m[        TU /UT//5      m[        R                  " [	        S5      [        S9m[        TU/X"//5      m	[        U * U /X//5      m
[        U * //5      m[        X//5      m[        [        UU4S j5        [        [        UUU4S j5        [        [        UU4S j5        [        [        U4S	 j5        [        [        UU4S
 j5        [        [        U	U
4S j5        [        [        U	U
4S j5        [        [        U4S j5        [        R                  " [	        S5      [        S9m[        [        UU4S j5        g )Nr.   r3   r/   rx   r4  c                     > [        T T5      $ r|   r%   r  s   r>   r?   *test_MIMOFeedback_errors.<locals>.<lambda>  s    l34r=   c                  0   > [        [        T T5      T5      $ r|   )r%   r$   )r]  r`  rb  s   r>   r?   r(    s    l<u+EuMr=   c                     > [        T TS5      $ r   r'  )r]  tfm_6s   r>   r?   r(        |E5!<r=   c                     > [        T T 5      $ r|   r'  )tfm_7s   r>   r?   r(    s    |E59r=   c                     > [        T TS5      $ )Nr   r'  r_  s   r>   r?   r(    s    |E5"=r=   c                     > [        TT S5      $ r   r'  rr  rc  s   r>   r?   r(    r,  r=   c                     > [        T T* 5      $ r|   r'  r1  s   r>   r?   r(    s    |EE6:r=   c                     > [        T T S5      $ r   r'  rh  s   r>   r?   r(    r,  r=   c                     > [        T TS5      $ r   r'  )r]  tfm_8s   r>   r?   r(    r,  r=   )	r   r;   r"   rl  r   r-   rZ   rY   rJ   )r^   r_   ra   rc   r\   r]   r]  r`  rb  rr  rc  r+  r.  r5  s       @@@@@@@@@@r>   test_MIMOFeedback_errorsr6    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
:<=r=   c            
      ~   [        S[        [        5      n [        [        [        S-
  [        5      n[        SS[        5      n[        S[        S-
  [        5      n[        R                  " [	        S5      [        S9n[        X/X"//5      n[        U* U/X//5      n[        X/U* U //5      n[        XV5      n[        U[        Xt* 5      S5      n	UR                  [        [        R                  S/S[        R                  //5      :X  d   eU	R                  [        S[        S-  -  [        S-  -   [        S-  [        -
  S-   -  S[        S-  -  [        S-  -
  [        S-  [        -
  S-   -  /[        S-  * [        //5      :X  d   eUR                  5       [        [        SS[        -  [        5      [        SS[        5      4[        SS[        5      [        SS[        5      445      s=:X  a  UR                  [        5      :X  d   e   eU	R                  S	S
S9[        [        [        S-  * S[        S-  -  -   S[        S-  -  -
  [        S-  -   [        S-  S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  [        -   [        5      [        S[        S-  -  S[        S-  -  -   [        S-  [        -
  S-   [        5      4[        SS[        5      [        [        S-  * [        -   S[        5      445      :X  d   eU	R                  S	S9[        [        [        S[        S-  -  [        S-  -
  -  [        S-  [        -
  S-   -  S[        S-  -  [        S-  -   [        S-  [        -
  S-   -  -   [        [        S-  [        -
  S-   S-  -  [        5      [        S[        S-  -  S[        S-  -  -   [        S-  [        -
  S-   [        5      4[        SS[        5      [        [        S-  * [        -   S[        5      445      :X  d   eU	R                  5       [        [        [        S[        S-  -  [        S[        -  S-
  -  -   S-   -  [        S-  [        -
  S-   [        5      [        S[        S-  -  [        S-
  -  [        S-  [        -
  S-   [        5      4[        SS[        5      [        [        S[        -
  -  S[        5      445      :X  d   eU	R                  S
S9[        [        [        S-  * [        -   [        S-  [        -
  S-   [        5      [        S[        S-  -  S[        S-  -  -   [        S-  [        -
  S-   [        5      4[        SS[        5      [        [        S-  * [        -   S[        5      445      :X  d   eUR                  5       * U* R                  5       :X  d   eg )Nr.   rx   r/   r%  r   r   r1   r3   FT)cancelr   r2   )r8  )r   )r   r;   r"   rl  r   r%   r#   r  r   r   Halfr   r}  )
r\   r]   r^   r_   r]  r`  rb  rr  F_1F_2s
             r>   test_MIMOFeedback_functionsr<    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)))r=   c                    ^^ [        [        [        S-  -  [        [        -  -   [        -
  [        [        -   [        5      m[        [        [
        -  [
        [        -  -   [        -
  [
        [
        5      m[        [        * //5      n U R                  U R                  U R                  4s=:X  a  S:X  d   e   eU R                  [        [        [        [        * 5      5      5      :X  d   eU R                  [        :X  d   e[        [        [        * /[        T//5      nUR                  UR                  UR                  4s=:X  a  S:X  d   e   eUR                  [        [        [        [        [        * 5      [        [        T5      5      5      :X  d   eUR                  [        :X  d   e[        [        [        /[        T* /T* [        //5      nUR                  UR                  UR                  4s=:X  a  S:X  d   e   eUR                  [        [        [        [        [        5      [        [        T* 5      [        T* [        5      5      5      :X  d   eUR                  [        :X  d   e[!        ["        U4S j5        [!        ["        UU4S j5        [!        ["        U4S j5        [!        ["        U4S j5        [!        [$        S	 5        [!        [$        S
 5        [!        ["        U4S j5        [!        ["        S 5        g )Nr/   )r.   r.   r  )r3   r/   c                  6   > [        [        /[        /T //5      $ r|   r"   rk  rj  r   s   r>   r?   :test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KLr=   c                  6   > [        [        T /[        T//5      $ r|   r"   rk  ri  r   s   r>   r?   r@    s    5SzC:6NOr=   c                  4   > [        [        /[        T //5      $ r|   rB  r   s   r>   r?   r@    s    5usCj6IJr=   c                  4   > [        [        [        /T //5      $ r|   rB  r   s   r>   r?   r@    s    5SzC56IJr=   c                  R    [        [        [        /[        [	        SS/5      //5      $ Nr.   r/   )r"   rk  rj  ri  r   r<   r=   r>   r?   r@    s"    4sCj3PQSTvBW5XYr=   c                  R    [        [        [        SS/5      /[        [        //5      $ rF  )r"   rk  r   ri  rj  r<   r=   r>   r?   r@    s!    4sFAq6N6KcSVZ5XYr=   c                  0   > [        [        [        T /5      $ r|   r?  r   s   r>   r?   r@    s    5sCoFr=   c                  "    [        [        /5      $ r|   )r"   rk  r<   r=   r>   r?   r@    s    5se<r=   )r   rP   r;   rQ   rO   rJ   r"   ri  rm  rn  ro  rN   r   r4  rk  rj  r-   rY   rZ   )tfm3_r  r  r_   ra   s      @@r>   (test_TransferFunctionMatrix_constructionrK    s1   
2ad7RT>B.B
:C
2a4!R%<!+Q
2C"cTF8,E;;5,,e.>.>?I6IIIII::uUC4[1222299>>!C#;c
";<D::$**DOO<FFFFFF99eE#t$4eCoFGGGG88q==!C:cT{cT3K"HID::$**DOO<FFFFFF99eE#sOU35EucTSVGWXYYYY88q== :LM
:OP :JK
:JK 9YZ
9YZ :FG
:<=r=   c                  $   [        [        [        S-  -  [        [        -  -   [        -
  [        [        -   [        5      n [        [        [        S-   -  [        S-
  -  [        S-  S-   -  S/[        [        [        S-   -  [        [        S-  S-   -  -  //5      n[        S[        -  S-   [        S-  S-
  -  //5      n[        SS/SS//5      n[        R                  " U[        5      [        [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      /[        [        S[        5      [        [        [        [        5      //5      :X  d   e[        R                  " U[        5      [        [        S[        -  S-   [        S-  S-
  [        5      //5      :X  d   e[        R                  " U[        5      [        [        SS[        5      [        SS[        5      /[        SS[        5      [        SS[        5      //5      :X  d   e[        [        /[        //5      nU* [        [        * /[        * //5      :X  d   e[        [        [        [        /U [        * [        * //5      nU* [        [        * [        * [        * /U * [        [        //5      :X  d   e[        R                  " U[        5      n[        [        [        [        -  [        -  [        [        S-  -  [        5      [        [        [        -  [        [        S-  [        -
  -  [        5      //5      nUR                  [        S5      [        [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      /[        SS[        5      [        S[        [        5      //5      :X  d   eUR                  [        S05      [        [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      /[        SS[        5      [        S[        [        5      //5      :X  d   eUR                  [        S[        S05      [        [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      /[        SS[        5      [        S[        [        5      //5      :X  d   eUR                  [        S5      [        [        S[        -  [        -  [        [        S-  -  [        5      [        S[        -  [        [        * [        S-  -   -  [        5      //5      :X  d   eUR                  [        S5      [        [        [        [        -  [        -  [        S-  [        5      [        [        [        -  [        * [        S-  -   [        5      //5      :X  d   eUR                  [        S5      [        [        S[        [        S-  -  [        5      [        [        [        -  [        [        S-  -  [        5      //5      :X  d   eUR                  [        S[        S[        [        05      [        [        [        [        -  [        S-  [        5      [        [        [        * [        S-  -   [        5      //5      :X  d   eUR                  [!        S5      S-  ["        -   5      [%        S[        -  [        -  S[        -  -  S["        -  [        -  [        -  S[        -  -  -
  ["        [        -  [        * [        -  S[        -  S-  -
  ["        [        -  -   -  [        S[        -  [        -  S[        -  S-  -
  S["        -  [        -  -   -  -   //5      :X  d   eUR'                  5       [        [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        [        S[        5      /[        SS[        5      [        [        [        [        5      //5      :X  d   eUR'                  5       [        [        [        [        -  [        -  [        [        S-  -  [        5      /[        [        [        -  [        [        * [        S-  -   -  [        5      //5      :X  d   eUR'                  5       R'                  5       U:X  d   eUR'                  5       R'                  5       U:X  d   eUR)                  5       [+        S5      * S-  [+        S5      ["        -  S-  -
  [+        S5      * S-  [+        S5      ["        -  S-  -   [+        S5      S-  [+        S5      ["        -  S-  -
  [+        S5      S-  [+        S5      ["        -  S-  -   // // S///:X  d   eUR)                  5       SS/[+        [        5      [+        [        5      * ///:X  d   eUR)                  5       [,        [.        * [+        [.        S-
  [.        S-   -  5      -   -  [,        [.        * [+        [.        S-
  [.        S-   -  5      -
  -  // [        * [        -  //[        * /[,        [.        * [+        [.        S-
  [.        S-   -  5      -   -  [,        [.        * [+        [.        S-
  [.        S-   -  5      -
  -  /[        * [        -  ///:X  d   eUR1                  5       / S	Q/ // / //:X  d   eUR1                  5       S/S///:X  d   eUR1                  5       / / [        [        -  //[        * S[        -  -  [+        S[        -  [        -  [        S-  -   5      S[        -  -  -
  [        * S[        -  -  [+        S[        -  [        -  [        S-  -   5      S[        -  -  -   // [        [        -  ///:X  d   e[        [3        [        S[        S-  S-
  [        5      [        [        S-  S[        -  -
  S-   S[        5      [        S[        [        5      5      //5      n[        [5        [        [        S-  S-
  S[        S-  -  [        S-  -
  S[        -  -
  S-   [        5      [        S[        S-  -
  S[        S-  -  [        S-  -
  S[        -  -
  S-   [        5      5      //5      n	UR7                  5       [        [        [        S-  S[        -  -
  S-   [        [        S-  S-
  -  [        5      //5      :X  d   eU	R7                  5       [        [        SS[        S-  -  [        S-  -
  S[        -  -
  S-   [        5      //5      :X  d   eUR9                  5       [        [        [        S-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      [        [        S[        5      [        [        [        [        5      /:X  d   eUR9                  5       [        [        [        -  [        -  [        [        S-  -  [        5      [        [        [        -  [        [        * [        S-  -   -  [        5      /:X  d   eUR9                  5       [3        [        S[        S-  S-
  [        5      [        [        S-  S[        -  -
  S-   S[        5      [        S[        [        5      5      /:X  d   eU	R9                  5       [5        [        [        S-  S-
  S[        S-  -  [        S-  -
  S[        -  -
  S-   [        5      [        S[        S-  -
  S[        S-  -  [        S-  -
  S[        -  -
  S-   [        5      5      /:X  d   eUR;                  5       [        [        [        [        S
-
  -  [        S-   -  [        S-  S-   [        5      [        SS[        5      4[        S[        -  S[        5      [        [        [        [        5      445      :X  d   eUR                  [        S[        S[        S05      R;                  5       [        [        S[        [        5      [        S[        -  S[        S-  -  S-
  [        5      445      :X  d   e[        [        [        S-  [        S-  -   [        -   [        [        S-  -
  [        5      [        [        S-   [        S-
  -  [        S-
  [        S-   -  [        5      //5      n
U
R=                  5       [=        U
5      s=:X  a[  [        [        [        S-  * [        S-  -
  S-
  [        S-
  [        5      [        [        S-   [        S-   [        5      445      :X  d   e   eUR?                  5       [        [        [        S-  S[        S-  -  -
  S[        -  -
  [        S-  S-   [        5      [        SS[        5      4[        [        S[        5      [        [        [        [        5      445      :X  d   eU
R?                  5       [        [        [        S-  [        S-  -   [        -   [        S-  * [        -   [        5      [        [        S-  S[        -  -   S-
  [        S-  S[        -  -   S-
  [        5      445      :X  d   eg )Nr/   r.   r3   r1   r4   r   r2   r   )rx   r   r3   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @) r   rP   r;   rQ   rO   r   rJ   r"   rl  rk  rj  ri  rT   r   r   r   r   r   r   	transpose
elem_polesr   r   r*  
elem_zerosr   r    r   _flatr   r   r   )ra   r  r  mat_3r  r  H_1H_2H_3H_4H_5s              r>   %test_TransferFunctionMatrix_functionsrW    s3   
2ad7RT>B.B
:C 	
AEAE	AqD1H	%q)	
Aq1uIq!Q$(|$%
 E qsQwA2345EaVaV,-E!--eQ7!1!QU)QU2CQTAXq!QScdeghjkSl m	!Q	"$4Q1$=> @ 	AA A A "--eQ7!1!A#'1a4!8Q!G HIJK K K!--eQ7!1!Q!:<LQPQST<U V	!Q	"$4Q1$=> @ 	AA A A "C53%.1D5*cTFcTF+;<<<<!Cc?S3$4E"FGD5*cTC4#,>#sC@P+QRRRR !
,
,UA
6C
 #3AaCE1QT61#EGWXYZ[X[]^`acd`dgh`h]iklGm"n!o
pC88Aq>36Fq!a%yRSVWRWGXZ[]^Z^abZbde6fhxyz|}  @A  iB  6C  FV  WX  Z[  ]^  F_  aq  rs  uv  xy  az  E{  5|  }  }  }  }88QF58HAPQETUXYTYIZ\]_`\`cd\dfg8hjz{|~  BC  kD  8E  HX  YZ  \]  _`  Ha  cs  tu  wx  z{  c|  G}  7~         88Q1aL!%;>NqRSVWRWyZ[^_Z_O`bcefbfijbjlm>n  qA  BC  EF  HI  qJ  >K  N^  _`  bc  ef  Ng  iy  z{  }~  @A  iB  MC  =D  &E  E  E  E88Aq>36Fqs1uaPQSTPTfVW6XZjklmnknpqtusuxy{|x|s|p}  @A  [B  6C  5D  E  E  E  E88Aq>36Fqs1uaQRdTU6VXhijklilopnpstvwswnwyzX{5|4}~~~~88Aq>36Fq!AqD&RS6TVfghijgjlmnoqrnrlrtuVv5w4xyyyy88Q1aB'(,BEUVXYZVZ\]_`\`bcEdfvwx{}z}  AB  DE  AE  {E  GH  gI  EJ  DK  -L  L  L  L ad1fqj)Vac!eQqSkAaCE!GQqSM6QSTUVSVYZXZ[\X\_`ab_bcd_dXdghijgjXjSknoqstuquvwqwz{|}z}~zq  CD  EF  CF  GH  CH  rH  oI  TI  6J  5K  .L  L  L  L ==?47G1q5	STWXSXHY[\^_[_bc[cef7giyz{}~  AB  jC  7D  GW  XY  [\  ^_  G`  br  st  vw  yz  b{  F|  6}  ~  ~  ~  ~==?47G!AqQRTUQUvWX7Y6Z]mnopqnqstwxvx{|~{v  tA  CD  ^E  ]F  6G  H  H  H  H==?$$&#---==?$$&#--- >>47(1*tAwqy{":T!WHQJaQRST<TVZ[\V]^_V_bfghbijkbklmbmVmostuovwxox{  AB  |C  DE  |E  FG  |G  pG  "H  JL  !M	aS	    >>!Q$q'DG8)< =>>>>??2utTAXq4I/J'J#KRRVQVY]_cfg_gjnqrjr^sYtQtMu"vxz~}  AC  ~C  }D  "E#dUT4!8dQh"78892utTTUXX\_`X`LaGb?b;cdhigijlglfmn!p p p p
 >>R 02r(;;;;>>!qc
|+++??"b2a4&!1#qt*tAbDGb!eO,ad3
3bS!B$Z$qtBwQSUVQVBWYZ[]Y]B^5^	_acfhijfjekl!n n n n
 !6*:1adQh*JL\]^`a]adefgdg]gjk]kmnpqLr  uE  FG  IJ  LM  uN  $O  #P  "Q  RC
 8,<QTAXqAvPQSTPT}WXYZWZGZ]^G^`a,bdtuvyz|}y}u}  @A  BC  EF  BF  @F  IJ  LM  IM  @M  PQ  RS  PS  @S  VW  @W  YZ  e[  $\  #]  "^  _C88:/2B1a4!A#:PQ>STVWYZVZ]^V^S_ab2c1d0effff88:/2B1a1fqRStmVWXYVYFY\]F]_`2a1b0cdddd 99;+Aq1uIq1u,=q!taxKM]^_abdeMfhxyz|}  @A  iB  DT  UV  XY  [\  D]  ^  ^  ^  ^99;+AaCE1QT61=?OPQRSPSUVYZXZ]^`a]aXaUbde?fgggg99;6"21adQh"BDTUVXYUY\]^_\_U_bcUcefhiDjl|}~  AB  DE  mF  G  H  H  H  H99;8$4QTAXqAv1}qQRs?RUV?VXY$Z\lmnqrtuqumuwxyz|}y}w}  AB  DE  AE  xE  HI  JK  HK  xK  NO  xO  QR  ]S  T  U  U  U  U 99;!1!QW+q3w2GAPSUV!WYijmoprsYt u  yI  JM  NO  JO  QR  TU  yV  Xh  ij  lm  op  Xq  xr   s  	tt t t88Quaa*+113!12eghjk!lMaOQTUVXYUYQY  ]O  RO  QR  	S!T  V 	WW W W !#3AqD1a4K!OQAXq#Q!a%!a%1q51q5/1=#? "@ AC <<>Xc] u!11a4%!Q$,2BAE1!MO_`ade`eghklglnoOp qstu u u u u
 JJL%(8A!Q$19LaQRdUVhXY(Z\lmnpqst\u'vaA&(8Aq(AB'D EE F E ::<!1!Q$A+/AqD519a!PRbcdfgcgjklmjmcmpqcqstvwswz{|}z}s}  AB  tB  DE  SF  !G   I  	JJ J Jr=   c                     [        S[        [        -  [        -   [        5      n [	        U [
        S5      u  p[        [        US   -  US   -   [        US   -  US   -   [        5      n[        [        [
        -  S[        [        [
        -  S-  -   -  -  [
        S[        [        [
        -  S-  -   -  -  -   [        [        * [        [
        -  S-  -   [        [        [
        -  S-  -   -  -   [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   e[        S[        [        -  [        -   [        5      n [	        U [
        S5      u  p[        US   [        US   -  US   -   [        5      n[        [
        [        -  [        [        * [        [
        -  -   [        -  -   [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   e[        S[        [        -  [        -   [        5      n [	        U [
        S5      u  p[        [        US   -  [        US   -  US   -   [        5      n[        [        [
        -  [        [        [
        -  -   -  [        [        [        [        [
        -  -   -  -
  [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   e[        S[        [        -  [        -   [        5      n [	        U [
        S5      u  p[        [        US   -  US   -   [        US   -  US   -   [        5      n[        [        S-  [
        -  S[        S[        -  [
        -  S-  -   -  -  S[
        -  S[        S[        -  [
        -  S-  -   -  -  -   [        [        * S[        -  [
        -  S-  -   [        S[        -  [
        -  S-  -   -  -   [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   eg )	Nr.   r6   r   r/   g333333?r3   r   r8   )
r   rT   r;   rU   r'   Tr   Zeror   rL   )r[   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r>   test_TransferFunction_gbtrb  b  s   	!QqSUA	&BRCJD'DGd1g(=q47{TRSW?TVWX%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqN66&//1.2I2I2KKUUW[[[[[	!QqSUA	&BRAJD&tAw$q'	$q'0A1EO%ac1QqS!|+;Q?N66o..01H1H1JJTTVZZZZZ	!QqSUA	&BRAJD'$q'	1T!W9T!W3DaH%a!eQ1Woq1a!A#g;JN66&//1.2I2I2KKUUW[[[[[	!QqSUA	&BRCJD"1T!W9T!W#4aQiQ6GKK%ac!eRQqSU2X->&?!A#r1qQRsSTuUWx<GXBY&Y[\ab`befghehijejkmem`mpqtuvwtwxytyz|t|p|_}[}  @A  BN66k**,^-D-D-FFPPRVVVVVr=   c                     [        S[        [        -  [        -   [        5      n [	        U [
        5      u  p[        [        US   -  US   -   [        US   -  US   -   [        5      n[        [        [
        -  S[        [        [
        -  S-  -   -  -  [
        S[        [        [
        -  S-  -   -  -  -   [        [        * [        [
        -  S-  -   [        [        [
        -  S-  -   -  -   [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   eg )Nr.   r   r/   )
r   rT   r;   rU   r(   rY  r   rZ  r   rL   )r[   r[  r\  r]  r^  s        r>   test_TransferFunction_bilinearrd    s   	!QqSUA	&B"aJD'$q'	$q'(91T!W9T!W;LaP%a!eQAaCE	]&;aA!AI>O&OQRWXVX[\]^[^_`[`V`cdghijgjklglclUmQmopqN66&//1.2I2I2KKUUW[[[[[r=   c                     [        S[        [        -  [        -   [        5      n [	        U [
        5      u  p[        US   [        US   -  US   -   [        5      n[        [
        [        -  [        [        * [        [
        -  -   [        -  -   [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   eg Nr.   r   )
r   rT   r;   rU   r)   rY  r   rZ  r   rL   )r[   r[  r\  r_  r^  s        r>   "test_TransferFunction_forward_diffrg    s    	!QqSUA	&Bb!$JD&tAw$q'	$q'0A1EO%ac1QqS!|+;Q?N66o..01H1H1JJTTVZZZZZr=   c                     [        S[        [        -  [        -   [        5      n [	        U [
        5      u  p[        [        US   -  US   -   [        US   -  US   -   [        5      n[        [        [
        -  [        [        [
        -  -   -  [        [        [        [        [
        -  -   -  -
  [        5      n[        R                  UR                  5       UR                  5       -
  R                  5       R                  :X  d   eg rf  )
r   rT   r;   rU   r*   rY  r   rZ  r   rL   )r[   r[  r\  r`  r^  s        r>   #test_TransferFunction_backward_diffri    s    	!QqSUA	&Br1%JD'$q'	$q'(91T!W9T!W;LaP%a!eQ1Woq1a!A#g;JN66&//1.2I2I2KKUUW[[[[[r=   c            	      F  ^^^ [        S[        S-  S-   [        5      n [        [        S-  S[        5      n[        S[        [        -  [        -   [        5      m[        [        S-   [        [        [        -  5      -  [        S-  S-   [        5      m[        U/T//5      m[        U 5      SS[        S[        S5      -  5      -  [        -  -   :X  d   e[        U5      S:X  d   e[        [        U4S	 j5        [        [        U4S
 j5        [        [        U4S j5        g )Nr   r3   r.   r/   iL      r   c                     > [        T 5      $ r|   r+   r   s   r>   r?   4test_TransferFunction_phase_margin.<locals>.<lambda>  s
    S(9r=   c                     > [        T 5      $ r|   rn  r   s   r>   r?   ro    s
    |C0r=   c                  ,   > [        [        T 5      5      $ r|   )r+   r#   tf_ms   r>   r?   ro    s    |Jt,<=r=   )r   rJ   r;   rT   rU   r   r   r"   r+   r   r   r   r-   r   rY   r\   r]   r^   r_   rs  s     @@@r>   "test_TransferFunction_phase_marginru    s    
2q!tax
+C
1a4Q
'C
1ac!eQ
'C
AE3qu:-q!tax
;C!C5#-0Ds4$r(
+;';B'> >>>>!!!
 9:
:01
:=>r=   c                    ^^^ [        [        S-  S[        S-   -  [        S-
  -  [        S-
  -  [        5      n [        [        S-  S[        -  -   S-   S[        5      n[        S[        [        -  [        -   [        5      m[        [        S-   [	        [        [
        -  5      -  [        S-  S-   [        5      m[        U/T//5      m[        U 5      S[        [        S5      S-  5      -  [        S5      -  :X  d   e[        U5      [        :X  d   e[        [        U4S j5        [        [        U4S	 j5        [        [        U4S
 j5        g )Nr/   r2   r.   r   ir8   i  c                     > [        T 5      $ r|   r,   r   s   r>   r?   3test_TransferFunction_gain_margin.<locals>.<lambda>  s
    C(8r=   c                     > [        T 5      $ r|   rx  r   s   r>   r?   ry    s
    {3/r=   c                  ,   > [        [        T 5      5      $ r|   )r,   r#   rr  s   r>   r?   ry    s    {:d+;<r=   )r   r;   rT   rU   r   r   r"   r,   r   r   r	   r-   r   rY   rt  s     @@@r>   !test_TransferFunction_gain_marginr|    s    
1a4AaC!A#"!5q
9C
1a4!A#:>1a
0C
1ac!eQ
'C
AE3qu:-q!tax
;C!C5#-0Dss3qtCx=0R8888sr!!!
 89
:/0
:<=r=   c            
      d   [        SS/SS//5      n [        SS/5      n[        SS//5      n[        S/5      n[        XX#5      nUR                  [        SS/SS//5      :X  d   eUR                  [        SS/5      :X  d   eUR                  [        SS//5      :X  d   eUR
                  [        S/5      :X  d   eUR                  [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      4:X  d   e[        [        [        /5      [        [        /5      [        [        /5      [        [        /5      5      nUR                  [        [        //5      :X  d   eUR                  [        [        //5      :X  d   eUR                  [        [        //5      :X  d   eUR
                  [        [        //5      :X  d   eUR                  [        [        //5      [        [        //5      [        [        //5      [        [        //5      4:X  d   e[        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      nUR                  [        SS/SS//5      :X  d   eUR                  [        SS/SS//5      :X  d   eUR                  [        SS/SS//5      :X  d   eUR
                  [        SS/SS//5      :X  d   eUR                  [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      4:X  d   e[        [        [        /[        [        //5      n[        [        [        /[        [        //5      n[        [        [         /["        [$        //5      n	[        [&        [(        /[*        [,        //5      n
[        XxX5      nUR                  [        [        [        /[        [        //5      :X  d   eUR                  [        [        [        /[        [        //5      :X  d   eUR                  [        [        [         /["        [$        //5      :X  d   eUR
                  [        [&        [(        /[*        [,        //5      :X  d   eUR                  [        [        [        /[        [        //5      [        [        [        /[        [        //5      [        [        [         /["        [$        //5      [        [&        [(        /[*        [,        //5      4:X  d   e[        5       nUR                  [        S//5      [        S//5      [        S//5      [        S//5      4:X  d   e[        SS/SS//5      n[        SS/5      n[        X5      nUR                  [        SS/SS//5      :X  d   eUR                  [        SS/5      :X  d   eUR                  [        SS//5      :X  d   eUR
                  [        S//5      :X  d   eUR                  [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      4:X  d   eUR.                  S:X  d   eUR.                  S:X  d   eUR.                  S:X  d   eUR.                  S:X  d   eUR.                  S:X  d   eUR.                  S:X  d   e[1        [2        S	 5        [1        [2        S
 5        [1        [2        S 5        [1        [2        S 5        [1        [4        S 5        [1        [4        S 5        g )Nr   r.         r   r6   r/   TFc            	          [        [        [        [        S-   S-  /5      [        [        S-   /5      [        [        S-  S-
  /5      [        S[        -  /5      5      $ rF  r&   r   r;   r<   r=   r>   r?   .test_StateSpace_construction.<locals>.<lambda>%  sG    z&!acAX*?1*0!Q$(*<facUm Mr=   c            	          [        [        [        /5      [        [        S-   [        S-  S-   /5      [        [        S-  S-
  /5      [        S[        -  /5      5      $ )Nr.   r3   r/   r  r<   r=   r>   r?   r  '  sG    z&!+vqsAqD1Ho7N*0!Q$(*<facUm Mr=   c            
          [        [        [        /5      [        [        S-   /5      [        [        S-  S-
  /[        S-  S[        -  -   S-   //5      [        S[        -  /5      5      $ rF  r  r<   r=   r>   r?   r  )  sZ    z&!+vqse}*01a4!8*q!taczA~>N1O*PRXZ[\]Z]Y^R_ ar=   c            
          [        [        [        * [        * /[        S//5      [        [        S-  S/S[        //5      [        S[        //5      [        S[        -  S[        -  /[        [        //5      5      $ )Nr   r/   r  r<   r=   r>   r?   r  +  sf    z&A2r(QF1C*D061a1a&7I0J06Ax0@061ac
QF7K0L Nr=   c                  H    [        [        S-  [        S-   S[        -  S5      $ r   )r&   r;   r<   r=   r>   r?   r  1  s    jAqsAaC;r=   c                  \    [        [        SS/5      [        S/5      [        S/5      S5      $ )Nr/   r6   rx   r.   r   )r&   r   r<   r=   r>   r?   r  2  s'    jC)962$<)/a9r=   )r   r&   state_matrixinput_matrixoutput_matrixfeedforward_matrixrN   rO   rP   rQ   a3rR   rS   rX   b3c0r   c2c3r   r   r   d3is_SISOr-   r   rZ   )A1B1C1D1ss1ss2ss3A4B4C4D4ss4ss5A6B6ss6s                   r>   test_StateSpace_constructionr    s   	!Q!Q 	!B	AB	!Q	B	B
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 :r=   c                  Z  ^
^^^ [        SS/SS//5      n [        SS/SS//5      n[        SS/SS//5      n[        SS/SS	//5      n[        XX#5      m
[        / S
Q/ SQ/ SQ/5      n[        SS/SS/SS//5      n[        / SQ/ SQ/5      n[        SS/SS//5      n[        XEXg5      m[        5       m[        [        S/5      [        S/5      [        S/5      [        S/5      5      m[        [        / SQ/ SQ/ SQ/ SQ/ SQ/5      [        SS/SS/SS/SS/SS//5      [        / SQ/ SQ/5      [        SS/SS//5      5      n[        [        / SQ/ SQ/ SQ/ SQ/ SQ/5      [        SS/SS/SS/SS/SS//5      [        / S Q/ S!Q/5      [        S"S#/SS//5      5      n	T
T-   U:X  d   eT
T-  U	:X  d   eTS$-   [        [        S//5      [        S//5      [        S//5      [        S$//5      5      :X  d   eTS%-  [        [        S//5      [        S//5      [        S&//5      [        S'//5      5      :X  d   eS%T-  [        [        S//5      [        S(//5      [        S//5      [        S'//5      5      :X  d   e[        [        U
U4S) j5        [        [        UU4S* j5        g )+Nr1   r.   r/   r   r2   r   r3   rx   r   r1   r/   rx   r   r   r/   r2   r3   r   r1   r/   r   r.   r1   r3   r1   r.   r   r   r   r/   r   r   r   r   r   r   r   r1   r/   r   r   rx   r   r   r   r   r/   r2   r3   r/   r  r1   r/   r   r   r.   r.   r1   r3   r5   )r   r1   r/   r   r   )rx   r   r   r   r   )r/   r2   r3   r   r   )      r1   r.   )r   r/   r   r  r  )r   r   r   r/   r  )r3   r   r   r.   r  r   r6   r        @g      @r   c                     > T T-   $ r|   r<   )r  r  s   r>   r?   %test_StateSpace_add.<locals>.<lambda>r  r   r=   c                     > T T-  $ r|   r<   )r  r  s   r>   r?   r  s  s	    s3wr=   )r   r&   r-   r   )r  r  r  r  A2B2C2D2expected_addexpected_mulr  r  r  r  s             @@@@r>   test_StateSpace_addr  4  s   	!QB 	!B	!QR!	"B	!R!Q 	!B	!QB 	!B
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_````
:()
:'r=   c                     [        [        [        /[        [        //5      n [        [
        [        /[        [        //5      n[        [        [        /[        [        /[        [        //5      n[        [        [        /[        [        /[        [         //5      n[#        XX#5      nU* n[        SS/SS//5      n[        SS/5      n[        SS//5      n[        S/5      n	[#        XgX5      n
U[#        [        [        [        /[        [        //5      [        [
        [        /[        [        //5      [        [        * [        * /[        * [        * /[        * [        * //5      [        [        * [        * /[        * [        * /[        * [         * //5      5      :X  d   eU
* [#        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      :X  d   eU* U:X  d   eU
* * * * U
:X  d   eg )Nrx   r.   )r   rO   rP   rQ   r  rR   rS   rX   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              r>   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%%%r=   c                  p   [        [        [        /5      [        [        S-   S-  /5      [        [        S-  S-
  /5      [        S[        -  /5      5      n [        [        [        [        -   /5      [        [        S-   [        S-
  -  /5      [        [        S-  [        S-  -
  /5      [        [        [        -
  /5      5      nU R	                  [        S05      [        [        S//5      [        S//5      [        S//5      [        S//5      5      :X  d   eUR	                  [        S05      [        [        [        S-   //5      [        S//5      [        S[        S-  -
  //5      [        [        S-
  //5      5      :X  d   eU R                  [        [        05      [        [        [        //5      [        [        S-   S-  //5      [        [        S-  S-
  //5      [        S[        -  //5      5      :X  d   eUR                  [        [        [        [        05      [        [        [        [        -   //5      [        [        S-   [        S-
  -  //5      [        [        S-  * [        S-  -   //5      [        [        [        -
  //5      5      :X  d   e[        [        -  [        -   n[        [        S-  -  [        [        -  -   [        -   n[        [        U/5      [        U/5      5      n[        [        S[        -  S-   //5      [        S[        S-  -  S	[        -  -   S-   //5      [        S//5      [        S//5      5      n[        [        S
[        -  S-   //5      [        S[        S-  -  S[        -  -   S-   //5      [        S//5      [        S//5      5      nUR	                  [        S[        S[        S[        S	[        S05      U:X  d   eUR	                  [        S[        S[        S[        S	[        S05      R                  5       U:X  d   eUR                  5       U:X  d   eg )Nr.   r/   r3   r2   $      r   r   r1   r   r   r   r   r   )r&   r   r;   rJ   r   r   rT   rU   rP   rO   rX   rS   rR   r   )r  r  r   r   Gexpectexpect_s          r>   !test_SymPy_substitution_functionsr    s   
VQC[&1q51*"61qz8JFTUVWTWSXM
ZC
VQUG_fq1uq1uo->&?APQSTPTAVX^`ade`e_fXg
hC88QqE?j!vQSPTvX^ac`d_eXfgggg88QqE?j!a%	):FQC5M6TUXY[\X\T\S]R^K_agjknojoiphqarssss <<16A3%=&AEA:,"8&1a4!8*:NPVYZ[\Y\X]W^P_`a a a<<1a
#6AE7)$fAA.?-@&A6QPQTETUWXTXL>JZC[]cfgjkfkeldm]nop p p 
AB	AqD2a4"	B62$<.A1q	{+Va1fqslQ6F5G4H-I6TUSVRW=Z`cdbeafZghF#a%#+0&3q!t8c!e;Kc;Q:R9S2TV\_`^a]bVceknomplqersG662q"aQAr156&@@@662q"aQAr156<<>'III<<>W$$$r=   c            	         [        SS/SS//5      n [        SS/5      n[        SS//5      n[        S/5      n[        XX#5      n[        [        [        [        /[        [
        //5      [        [        /[        //5      [        [        [        //5      S9nUR                  [        5      nU* R                  [        5      nUS   S   nUS   S   n	U[        S	[        -  S
-   [        S-  S[        -  -   S-   [        5      :X  d   eU	R                  UR                  * :X  d   eU	R                  UR                  :X  d   e[        / SQ/ SQ/ SQ/5      n
[        / SQ/ SQ/ SQ/5      n[        / SQ/ SQ/ SQ/5      n[        / SQ/ SQ/ SQ/5      n[        XX5      nUR                  [        5      nUS   S   [        S[        S-  -  S[        S-  -  -   S[        -  -
  S-   S[        S-  -  S[        S-  -  -   S[        -  -
  S-
  [        5      :X  d   eUS   S   [        S[        S-  -  S[        S-  -  -   S[        -  -
  S -
  S[        S-  -  S[        S-  -  -   S[        -  -
  S-
  [        5      :X  d   eUS   S   [        S[        S-  -  S![        -  -   S-
  S[        S-  -  S[        S-  -  -   S[        -  -
  S-
  [        5      :X  d   eUR                  [        5      [        [        * [        [        -  [
        [        -  -
  [        [        -  -   -  [        [        * [        -  [        [        -  -   [        [        -  -   -  -
  [        * [
        -  [        [        -  -   [        [        -  -   [
        [        -  -   [        S-  -
  [        5      //:X  d   e[        R                  [        5      nU[        [        SS/[         S-  * S"[         -  ["        -  //5      [        S/S//5      [        SS//5      [        S//5      5      :X  d   eUR                  [        5      S   S   [        :X  d   e[%        [&        S# 5        g )$Nr   rx   r3   r/   r2   r.   r   )r  r  r   ;   r5   r7   )r~  r   r3   )r.   r   r.   )r/   r.   r.   )r6   r   r.   )r   r.   r/   )r/   r/   r3   r   r.   r   )r   r/   r.   )r.   r   r/   )r/   r/   r   )r.   r.   r.   )r3   r/   r.   r   r   g      %@r  r6   g      @g      @g      @r   r   c                      [        [        [        S-  -  [        S-  -   [        [        -  -
  [        -   [        [        S-  -
  [        5      R                  [        5      $ r   )r   rU   r;   rJ   rT   r}  r&   r<   r=   r>   r?   !test_conversion.<locals>.<lambda>  sB    /!Q$A!0Ca0GQPQTSTU]]^hir=   )r   r&   rO   rP   rQ   r  rS   rX   r   r  r}  r   r;   rL   rM   rk  r   r*  r-   rY   )r  r  r  r  r   H3tm1tm2r\   r]   r  r  r  r  r   tm3r  s                    r>   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jr=   c                  <
   [        SS/SS//5      n [        S/S//5      n[        SS//5      n[        S/5      n[        S/S//5      n[        S5      n[        XX#5      nUR                  5       [        S//5      :X  d   eUR                  US9[        S	[	        U* 5      -  S
[	        SU-  5      -  -
  //5      :X  d   e[        SS/SS//5      n[        SS5      n[        SS/5      n	[        XxS9n
U
R                  U	S9[        S[	        SU-  5      -  /S[	        U* 5      -  S[	        SU-  5      -  -
  //5      :X  d   e[        SS/SS//5      n[        S/S//5      n[        SS//5      n[        S/5      n[        S/5      n[        XX5      nUR                  XS9n[        UR                  5       R                  5       R                  5       S   5      [        SS[	        SU-  S-  5      -  [        [        S5      U-  S-  5      -  -   S[	        SU-  S-  5      -  [        [        S5      U-  S-  5      -  -
  5      :X  d   e[        SS/SS//5      n[        S/S//5      n[        SS//5      n[        S[        U5      -  //5      n[        UUU5      n[        UR                  UUS9S   R                  5       R                  5       R                  5       5      nU[        S[        U5      -  S[	        SU-  S-  5      -  [        [        S5      U-  S-  5      -  [        U5      -  -   S[	        SU-  S-  5      -  [        [        S5      U-  S-  5      -  [        U5      -  -
  5      :X  d   e[        S5      u  nnn[        SS/SS//5      n[        S/SU-  //5      n[        SS//5      n[        U/S//5      n[        [	        U* U-  5      //5      n[        UUU5      n U R                  UUUS9R                  5       n!U!S   R                  S   S   UUUU-  -  -   SUS-  U-  -  -
  [	        U* U-  5      US-  U-  -  -   :X  d   e[        S5      u
  n"n#n$n%n&n'n(n)n*n+[        U"U#/U$U%//5      n,[        U&U'/5      n-[        U(U)//5      n.[        U*U+/5      n/[        U,U-U.5      n0U0R                  U/S9S   n1U1R                  U"S4U#S4U$S4U%S4U&S4U'S4U(S4U)S4U*S4U+S4/
5      n1U1S	[	        U* 5      -  S
[	        SU-  5      -  -
  :X  d   eg )Nr   r.   r   r   rx   r/   r   )initial_conditionsr7   r4   r3   )r  r  r2   r  r1   r   )input_vectorr4  r   gY8b4@r   r8   )r4  r  zm a x_0)r  r  r4  z+a_11 a_12 a_21 a_22 b_1 b_2 c_1 c_2 i_1 i_2)r   r   r&   dsolver   r   r   r   r   r   r   r   r   r   rN   r   )2r  r  r  r  I1r   r  r  r  I2r  A3B3C3D3U3r  opr  r  r  U4r  op4r
  rT   x0A5B5C5I5U5r  op5a11a12a21a22rS   rX   r   r  i1i2r  r  C6I6r  expr6s2                                                     r>   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)++++r=   c            	      f   [        SS/SS//5      n [        SS/5      n[        SS//5      n[        S/5      n[        XX#5      n[        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      n[        [        SS/SS//5      [        SS/SS//5      5      n[        [        [        [        /[        [
        //5      [        [        /[        //5      [        [        [        //5      5      nUR                  5       S	:X  d   eUR                  5       S
:X  d   eUR                  5       [        SS/SS//5      :X  d   eUR                  5       [        SS/SS/SS/SS//5      :X  d   eUR                  5       [        S/S//5      [        S/S//5      /:X  d   eUR                  5       [        S/S/S/S//5      /:X  d   eUR                  5       R                  [        S4[        S4[        S4[
        S4[        S4[        S4/5      nU[        SS/SS//5      :X  d   eUR                  5       S	:X  d   eUR                  5       S
:X  d   eUR                  5       [        SS/SS//5      :X  d   eUR                  5       [        / SQ/ SQ/5      :X  d   eUR!                  5       [        S/S//5      [        S/S//5      /:X  d   eUR!                  5       [        S/S//5      /:X  d   eUR!                  5       [        [        /[        //5      [        [        [        -  [        [        -  -   /[        [        -  [
        [        -  -   //5      /:X  d   eUR                  5       R                  [        S4[        S4[        S4[
        S4[        S4[        S4/5      n	U	[        SS/SS//5      :X  d   e[        SS/SS//5      n
[        S/S//5      n[        SS//5      n[        S//5      n[        XX5      n[        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      nUR#                  U5      nUR#                  U5      nUR$                  UR$                  UR$                  -   :X  d   eUR&                  UR&                  UR&                  -   :X  d   eUR(                  UR(                  UR(                  -   :X  d   eUR*                  [        / SQ/ SQ/ SQ/ SQ/5      :X  d   eUR,                  [        SS/SS/SS/SS//5      :X  d   eUR.                  [        / SQ/ SQ/5      :X  d   eUR0                  [        SS/SS//5      :X  d   eUR$                  UR$                  UR$                  -   :X  d   eUR&                  UR&                  UR&                  -   :X  d   eUR(                  UR(                  UR(                  -   :X  d   eUR*                  [        [        [        SS/[        [
        SS// SQ/ SQ/5      :X  d   eUR,                  [        [        S/[        S/SS/SS//5      :X  d   eUR.                  [        [        [        SS// SQ/5      :X  d   eUR0                  [        SS/SS//5      :X  d   eg )Nr~  r   r.   r   r6   r1   r/   rx   TFr3   r   r  r   g      )r.   rx   r/   r   r   r.   r   r   r.   r   r   r   r   r   r.   r   r   r   r   r.   )r   r&   rO   rP   rQ   r  rS   rX   r   r  is_observableobservability_matrixobservable_subspacer   is_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesro  rn  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                     r>   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,<%====r=   c                     [        SS/SS//5      n [        S/S//5      n[        SS//5      n[        S//5      n[        SS/SS//5      n[        S/S//5      n[        SS//5      n[        S//5      n[        XX#5      n[        XEXg5      n	[        [        [        S-   [        5      n
[	        X5      nU[	        [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      5      :X  d   eUR                  5       [        [        / SQ/ SQ/ SQ/ SQ/5      [        S/S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   eUR                  S:X  d   eUR                  S:X  d   eUR                  [        5      [        [        S-  [        S-  [        S-  -
  [        -
  S-   [        5      :X  d   e[	        U5      n[	        X5      nUR                  5       UR                  5       :X  d   e[	        X5      nU[	        [        [        [        S-   [        5      [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      5      :X  d   eUR                  5       [        [        / S	Q/ S
Q/ SQ/5      [        S/S/S//5      [        / S
Q/5      [        S//5      5      :X  d   eUR                  [        5      [        [        S-  [        S-  [        S-  -   [        -
  S-
  [        5      :X  d   e[        SS/SS//5      n[        SS/SS//5      n[        SS/SS//5      n[        SS/SS//5      n[        / SQ/ SQ/ SQ/5      n[        SS/SS/SS//5      n[        / SQ/ SQ/5      n[        SS/SS//5      n[        UUUU5      n[        UUUU5      n[        UU5      nU[        [        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      [        [        / SQ/ SQ/ SQ/5      [        SS/SS/SS//5      [        / SQ/ SQ/5      [        SS/SS//5      5      5      :X  d   eUR                  5       [        [        / SQ/ SQ/ SQ/ SQ/ SQ/5      [        SS/SS/SS/SS/SS//5      [        / SQ/ S Q/5      [        SS!/SS//5      5      :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   e[        U5      n[        UU5      nUR                  5       UR                  5       :X  d   eUR                  [        5      UR                  [        5      :X  d   e[        S[        [        5      n[        S[        S-   [        5      n[        [        [        S-   [        5      n[        U
U/UU//5      n[        UU5      nU[        [        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      [        [        [        [        S-   [        5      [        S[        [        5      4[        S[        S-   [        5      [        [        [        S-   [        5      445      5      :X  d   eg )"Nr   r.   r  r  r   r.   r.   r   r  r/   r3   )rx   r   r   )r   r   r.   )rx   r.   r   r1   r   r2   r  rx   r  r  r  r   r  r  r  r  )r/   r   r   r1   r/   )r  r4   rx   r   r   )r  r4   r/   r2   r3   r8   r   )r  r   r1   r/   r   r  )r   r&   r   r;   r   r   ro  rn  r}  r#   r"   ) rP   rS   r   r   rQ   rX   r  r   r  r  r\   r9  ser2ser3ser_tfr  r  r  r  a4b4c4d4r  r  ser4ser5ser6r]   r^   r_   tfms                                    r>   test_StateSpace_seriesr'  ]  s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
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r=   c                     [        SS/SS//5      n [        S/S//5      n[        SS//5      n[        S//5      n[        SS/SS//5      n[        S/S//5      n[        SS//5      n[        S//5      n[        XX#5      n[        XEXg5      n	[        X5      n
U
[        [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      5      :X  d   eU
R                  5       [        [        / SQ/ SQ/ SQ/ SQ/5      [        S/S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   eU
R	                  [
        5      [        [        [        S-   -  [        S-  S-
  [        5      :X  d   e[        [        [        S-   [        5      n[        X5      nU[        [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      [        [        [        S-   [        5      5      :X  d   eUR                  5       [        [        / S	Q/ S
Q/ SQ/5      [        S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   eUR	                  [
        5      [        [        S-  [        S-  S-
  [        5      :X  d   e[        SS/SS//5      n[        SS/SS//5      n[        SS/SS//5      n[        SS/SS//5      n[        / SQ/ SQ/ SQ/5      n[        SS/SS/SS//5      n[        / SQ/ SQ/5      n[        SS/SS//5      n[        XUU5      n[        UUUU5      n[        UU5      nU[        [        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      [        [        / SQ/ SQ/ SQ/5      [        SS/SS/SS//5      [        / SQ/ SQ/5      [        SS/SS//5      5      5      :X  d   eUR                  5       [        [        / SQ/ SQ/ SQ/ SQ/ SQ/5      [        SS/SS/SS/SS/SS//5      [        / SQ/ SQ/5      [        SS /SS//5      5      :X  d   e[        S[        [        5      n[        S[        S-   [        5      n[        [        [        S-   [        5      n[        UU/UU//5      n[        UU5      nU[        [        [        [        [        S-   [        5      [        S[        [        5      4[        S[        S-   [        5      [        [        [        S-   [        5      445      [        [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      [        SS/SS//5      5      5      :X  d   eg )!Nr   r.   r  r  r  r  r  r/   r  )r.   r   r   )r   r   rx   r   r.   rx   r1   r   r2   r  r3   rx   r  r  r  r   r  r  r  r  r  r  r  r  r  r5   )	r   r&   r    r   r}  r   r;   r$   r"   )rP   rS   r   r   rQ   rX   r  r   r  r  r   r\   r   r  r  r  r  r  r   r!  r"  r  r  r   r]   r^   r_   r&  r   s                                r>   test_StateSpace_parallelr*    s   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
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*! #"#$ $ $ $r=   c                  n   [        SS/SS//5      n [        S/S//5      n[        SS//5      n[        S//5      n[        SS/SS//5      n[        S/S//5      n[        SS//5      n[        S//5      n[        XX#5      n[        XEXg5      n	[        X5      n
U
[        [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      S5      :X  d   eU
R                  5       [        [        / SQ/ SQ/ SQ/ SQ/5      [        S/S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   eU
R	                  [
        5      [        [        [        S-
  -  [        S-  [        -
  S-   [        5      :X  d   e[        XS5      nUR                  5       [        [        / SQ/ S	Q/ SQ/ SQ/5      [        S/S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   eUR	                  [
        5      [        [        [        S-
  -  [        S-  S
[        S
-  -  -
  [        -
  S-   [        5      :X  d   e[        [        [        S-   [        5      n[        X5      nU[        [        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      5      [        [        [        S-   [        5      S5      :X  d   eUR                  5       [        [        / SQ/ SQ/ SQ/5      [        S/S/S//5      [        / SQ/5      [        S//5      5      :X  d   e[        SS/S
S//5      n[        SS
/SS//5      n[        S
S/SS//5      n[        SS
/SS//5      n[        / SQ/ SQ/ SQ/5      n[        SS/SS/SS//5      n[        / SQ/ SQ/5      n[        SS/SS//5      n[        XUU5      n[        UUUU5      n[        UU5      nU[        [        [        SS/S
S//5      [        SS
/SS//5      [        S
S/SS//5      [        SS
/SS//5      5      [        [        / SQ/ SQ/ SQ/5      [        SS/SS/SS//5      [        / SQ/ SQ/5      [        SS/SS//5      5      S5      :X  d   eUR                  5       [        [        [        S5      [        SS5      [        SS5      [        SS
5      [        S5      /[        SS
5      [        SS5      [        SS5      [        SS5      [        S5      /[        S5      [        SS5      [        S S5      [        S!S
5      [        S"5      /[        S#S
5      [        S$S5      [        S%S5      [        S&S5      [        S'5      /[        SS
5      [        S(S5      [        S)S5      [        S*S5      [        S+5      //5      [        [        SS5      [        S,S5      /[        SS5      [        S-S5      /[        SS5      [        S.S5      /[        SS5      [        S/S5      /[        SS5      [        S0S5      //5      [        [        S5      [        SS5      [        S1S5      [        S-S
5      [        S#5      /[        SS
5      [        S2S5      [        S2S5      [        S"S5      [        S5      //5      [        [        SS5      [        S3S5      /[        SS5      [        SS5      //5      5      :X  d   e[        UUS5      nUR                  5       [        [        [        SS5      [        S4S5      [        S5      [        S55      [        S6S5      /[        S7S5      [        S8S95      [        SS
5      [        S5      [        S'S5      /[        S:S5      [        S;S5      [        S5      [        S<5      [        S=S5      /[        S>S5      [        S?S95      [        S@S
5      [        S+5      [        S&S5      /[        S
S5      [        SAS95      [        SS
5      [        SB5      [        SCS5      //5      [        [        SDS5      [        SES5      /[        S#S95      [        SFS95      /[        SDS5      [        SGS5      /[        SHS95      [        SIS95      /[        SS95      [        SJS95      //5      [        [        SS5      [        S3S5      [        S5      [        S5      [        SS5      /[        SS5      [        SFS95      [        SS
5      [        S5      [        SKS5      //5      [        [        SS5      [        S#S5      /[        SS95      [        SLS95      //5      5      :X  d   eg )MNr   r.   rx   r  )r.   rx   rx   r   r  r  r3   )r.   r.   r.   r   r/   r  )r.   rx   r.   r)  r1   r   r2   r  r  r  r  r   r  r  r  ir8   ir7   r4   '   iiiir     I      r  /      U   r     i   iir   irl  >   r  i    iyr   r  )   r  ir   ir   ir   Q   r5   ir   iiW   r   r  i)	r   r&   r!   r   r}  r   r;   r%   r   )rP   rS   r   r   rQ   rX   r  r   r  r  r   r  r\   r  r  r  r  r  r  r   r!  r"  r  r  fd4fd5s                             r>   test_StateSpace_feedbackr<  `  s
   	!Q!Q 	!B	!qc
	B	!Q	B	!B	!Q!Q 	!B	!qc
	B	!Q	B	!B
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r=   N)sympy.core.addr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r   r   r	   sympy.core.powerr
   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   r   'sympy.functions.special.delta_functionsr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   sympy.physics.control.ltir   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   r   r   r   sympy.physics.controlr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   sympy.testing.pytestr-   rT   r   rU   r   r;   rV   rW   rJ   r   r   r*  r   rY  rO   rP   rQ   r  rR   rS   rX   r  r  r   r  r  r   r   r   r  rk  rj  ri  rv   r   r  r&  r+  r.  r1  r;  rV  rv  r  r  r  r  r  r  r  r  r  r  r#  r6  r<  rK  rW  rb  rd  rg  ri  ru  r|  r  r  r  r  r  r  r  r'  r*  r<  r<   r=   r>   <module>rQ     s    (  4 4   " % = = 9 9 $ = ( + , ' > > =W W W W W (.5 7 / +1aAq!Q3b!AH J B >BBBBBBBBq!Q$41,r1u4a8q!Qr!taxA1-^9B^8B1D(6V		&	(FV(AV)@X;|@iF+C\2EjEP1Wh33l05f#L5@$&N>D%*P!>FfJP$WL	\	[	\?> k:X?(B &D%0,k^;,|>>BHZVu$pADr=   