
    Цi=                       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#J$r$J%r%  S SK&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7  \" S5      u  r8r9r:r;r<r=r>r?r@rArBrCrD\" S5      u  rErFrGrHrIrJrKrLrMrNrOrPrQrRrSrT\'" S\<S-  S\B-  \C-  \<-  -   \CS-  -   \<5      rU\'" \@S\<5      rV\'" \G\?-  \<-
  \G\<-  \?-   \<5      rWS rXS rYS rZS r[S r\S r]S r^S r_S r`S  raS! rbS" rcS# rdS$ reS% rfS& rgS' rhS( riS) rjS* rkS+ rlS, rmS- rnS. roS/ rpS0 rqS1 rrS2 rsS3 rtS4 ruS5 rvS6 rwS7 rxS8 ryS9 rzS: r{g;)<    )Add)Function)Mul)IpiRationaloo)Pow)S)symbols)explog)sqrt)atan)eye)factor)CRootOf)simplify)Tuple)ImmutableMatrixMatrix
ShapeError)TransferFunctionSeriesParallelFeedbackTransferFunctionMatrix
MIMOSeriesMIMOParallelMIMOFeedback
StateSpacegbtbilinearforward_diffbackward_diffphase_margingain_margin)raisesz.a, x, b, c, s, g, d, p, k,    tau, zeta, wn, Tza0:4,    b0:4, c0:4, d0:4      c                     [        [        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      $ )Nr,   r   r   s     c/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sympy/physics/control/tests/test_lti.py<lambda>4test_TransferFunction_construction.<locals>.<lambda>u       /1a8r8   c                  ,    [        [        S[        5      $ Nr   r5   r7   r8   r9   r:   r;   v   s    /1a8r8   c                  $    [        SS[        5      $ r>   r5   r7   r8   r9   r:   r;   w   r<   r8   c                  B    [        [        / SQ5      [        [        5      $ Nr)   r*   r.   )r   r   r6   r7   r8   r9   r:   r;   y   s    .vi/@!QGr8   c                  R    [        [        S-  S[        -  -   S-
  [        S-   S5      $ )Nr*   r)   r.   r5   r7   r8   r9   r:   r;   {   s"    .q!taczA~q1uaHr8   c                  8    [        [        S-   S[        -
  S5      $ )Nr)   r-   r,   )r   pr7   r8   r9   r:   r;   |   s    .q1ua!eQ?r8   c                      [        SSS5      $ )Nr.   r,   r2   )r   r7   r8   r9   r:   r;   }   s    .q!Q7r8   )r   r6   numdenargsrE   a0a1a2b0b1abgdb2r   r(   
ValueError	TypeError)tftf1tf2tf3tf4tf4_tf5tf5_tf6tf6_tf7tf8tf7_tf8_tf9tf10tf10_tf11tf12tf13tf14tf15omega_ok_pk_ok_itf18s                              r9   "test_TransferFunction_constructionrq      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8r8   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*   r-   r)   r.   r0   r/   r,   r2   c                  0   > [         R                  " T 5      $ Nr   from_rational_expression)expr_2s   r9   r:   1test_TransferFunction_functions.<locals>.<lambda>   s    &6&O&OPV&Wr8   c                  0   > [         R                  " T 5      $ rw   rx   )expr_3s   r9   r:   r{          /HHPr8   c                  0   > [         R                  " T 5      $ rw   rx   )expr_4s   r9   r:   r{      r~   r8   )r.   r,   r-   rB   c                  <   > [         R                  " TT [        5      $ rw   )r   from_coeff_listsr6   )den3num3s   r9   r:   r{      s    &6&G&GdTU&Vr8   y             @y                      ?       @      @      @      @zc1, d0:3g      @r3   i      
   g      пgS?g3pUcgH8?gٿg%1C9?c                      [        [        S-  [        [        S-  -  [        -   [        S-  -   [        5      R                  5       $ )Nr*   r   )r   xrJ   polesr7   r8   r9   r:   r{     s2    (8Ar!R%x!|aQRd?RTU(V(\(\(^r8   zq, rT)negativet)positive   g      ?gv-k?g3ٿc                      [        [        [        S-  -  [        -   [        S-  -   [        S-  [        5      R                  5       $ )Nr   r*   )r   rJ   r   zerosr7   r8   r9   r:   r{   /  s2    (8ArEA19LaQRdTU(V(\(\(^r8   c                  0   > T [         S-  [         -   S-
  -  $ Nr*   r)   r6   rZ   s   r9   r:   r{   B  s    sQTAX\2r8   c                     > T [         -  $ rw   r   r\   s   r9   r:   r{   C  s	    sAvr8   c                     > T T-  $ rw   r7   rZ   r\   s   r9   r:   r{   D  s	    sCxr8   c                  D   > T R                  [        [        S5      05      $ Nr*   )xreplacerE   r   rY   s   r9   r:   r{   O  s    cllAs1v;7r8   )2r   r
   r6   rE   r   r   tauto_exprry   r   r(   ZeroDivisionErrorrT   r   from_zpkr   r   rL   rK   rJ   rM   rN   rS   expandsubsevalfr   eval_frequencywnr   dc_gainr   r	   r   kr   strr   NotImplementedError	is_stabler   r   doitpowr   r   rG   rH   r   rU   )Gexpr_1expr_5expr_6rV   delayexpr_7H1H2expr_8rW   num2den2rX   r   r   gaintf0rO   rP   G1G2crR   efrQ   G3G4p1p2SP1expect1expect1_c1d0d1d2p3p4SP2expect2expect2_SP3expect3expect3_SP4expect4expect4_tf__tfTF__TFqrr   	stable_tf
stable_tf_r^   r`   ra   rd   re   rg   r   rz   r}   r   r   rY   rZ   r\   sG                                                                  @@@@@@@@r9   test_TransferFunction_functionsr      s    C2.?FqSF1fqslQUQJ&FF1Q3wQqS!Q1Wq1QT6z$:;F1fqAvo!QUQUO4F	!a%A1	-B3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7r8   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 )Nr0   r-   r.   r)   r*   r   Fcommutativec                  $   > T [        / SQ5      -   $ rA   r   rW   s   r9   r:   @test_TransferFunction_addition_and_subtraction.<locals>.<lambda>m      sVI%66r8   c                     > TT -   $ rw   r7   )r   rX   s   r9   r:   r   n  	    sQwr8   c                     > T T-   $ rw   r7   rY   rZ   s   r9   r:   r   o  	    sSyr8   c                     > T [         S-
  -   $ Nr)   r   r   s   r9   r:   r   p      sa!e}r8   c                     > T S-   $ Nr2   r7   r   s   r9   r:   r   q  r   r8   c                  "   > S[         S-  -
  T -   $ Nr)   r.   rE   r   s   r9   r:   r   r      AqDC/r8   c                  $   > T [        / SQ5      -
  $ rA   r   r   s   r9   r:   r   z  r   r8   c                     > T T-
  $ rw   r7   r   s   r9   r:   r   {  r   r8   c                     > T [         S-
  -
  $ r   r   r   s   r9   r:   r   |  r   r8   c                     > T S-
  $ r   r7   r   s   r9   r:   r   }  r   r8   c                     > [         S-   T -
  $ )Nr-   r   )rX   s   r9   r:   r   ~  s    A}r8   c                  "   > S[         S-  -   T -
  $ )Nr)   r,   r   r   s   r9   r:   r     r   r8   )r   r6   rE   r   r   r(   rT   )r   rW   rX   rY   rZ   s   @@@@@r9   .test_TransferFunction_addition_and_subtractionr  `  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
:()
:,-
:'
:,-
:/0r8   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 )Nr.   r/   r)   r-   r,   r0   rs   r   Fr   c                  $   > T [        / SQ5      -  $ rA   r   r   s   r9   r:   Ctest_TransferFunction_multiplication_and_division.<locals>.<lambda>      rF9$55r8   c                     > T T-  $ rw   r7   )r   r   s   r9   r:   r    	    rAvr8   c                     > T T-  $ rw   r7   r   G5s   r9   r:   r    	    rBwr8   c                     > T [         S-
  -  $ r   r   r  s   r9   r:   r    s    rQU|r8   c                     > ST -  $ Nr/   r7   r  s   r9   r:   r    	    q2vr8   c                  $   > T [        / SQ5      -  $ rA   r   r  s   r9   r:   r    r  r8   c                     > T S-  $ r>   r7   )G6s   r9   r:   r    r	  r8   c                     > T T-  $ rw   r7   r  s   r9   r:   r    r  r8   c                     > T S-  $ r   r7   r  s   r9   r:   r    r	  r8   c                     > T [         S-  -  $ r   r   r  s   r9   r:   r    s    rAqDyr8   c                  0   > [         S[         S-  -  -
  T -  $ )Nr,   r*   r   )r   s   r9   r:   r    s    AadF
b0r8   c                     > ST -  $ r>   r7   )r   s   r9   r:   r    r  r8   c                     > TST -   -  $ r   r7   )r  G7s   r9   r:   r    s    rQV}r8   c                     > TT T-  -  $ rw   r7   r  r  r  s   r9   r:   r    s    rR"W~r8   c                     > TTT T-   -   -  $ rw   r7   r  s   r9   r:   r    s    rR27^4r8   )	r   r6   rE   r   r   r   r   r(   rT   )r   r   r   r   r  r  r  r   s   @@@@@@@@r9   1test_TransferFunction_multiplication_and_divisionr     s   	!a%!Q$A	.B	!a%Q	*B	!QTAXq	)B	!a%Q	*B	!a%Q	*B	!a%Q	*B	!Q	"B 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5r8   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*   r.   r,   )r   r   r6   rE   rO   rP   	is_proper)rl   zetar   r   r   r   r   s          r9   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<<<<<<<<<|||r8   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   r6   rE   rO   rP   is_strictly_proper)rl   r$  r   rW   rX   rY   rZ   s          r9   (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%%%%%%%%!!!!%%%%%r8   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*   r.   r,   )r   r   r6   rE   rO   rP   is_biproper)r   rl   r$  rW   rX   rY   rZ   s          r9   !test_TransferFunction_is_biproperr+    s    !56C$
7A:q!tainQ.>'>!'KW
UC
3A:sQTz3
7C
1Q3q!t8ad?QqS014a!AqD&j!
DC
1QT6AqD=1Q3.2A1Ha
@C??????r8   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 )Nr.   r*   r,   r)   X_dXc                     > [        T T5      $ rw   r   rV   rY   s   r9   r:   *test_Series_construction.<locals>.<lambda>  s    vb#r8   c                      > [        T TTT5      $ rw   r0  rV   rX   rY   rZ   s   r9   r:   r2    s    vb#sC8r8   c                     > [        T* T 5      $ rw   r0  rX   rY   s   r9   r:   r2    s    vsdC0r8   c                     > [        ST T5      $ r   r0  rV   rZ   s   r9   r:   r2    s    fQC0r8   c                  H   > [        [        S-  [        [        -  -   TT 5      $ r   )r   r6   rE   r6  s   r9   r:   r2    s    fQTAaCZc:r8   c                  2   > [        T [        / SQ5      5      $ N)r)   r*   r.   r,   )r   r   r   s   r9   r:   r2    s    fS&*>?r8   )r   rJ   r6   rK   rL   rM   rE   rN   rS   r$  r   r   r   rI   varr   r(   rT   rU   )inpouts0s1tf3_r[   s2s3s4s6s7rV   rX   rY   rZ   s              @@@@r9   test_Series_constructionrG    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?@r8   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 )Nr.   r*   r,   r)   )r*   r)   c                      [        5       $ rw   r   r7   r8   r9   r:   .test_MIMOSeries_construction.<locals>.<lambda>  s    z|r8   c                     > [        TT 5      $ rw   rJ  )tf_1tfm_1s   r9   r:   rK    s    j5r8   c                      > [        T TT * 5      $ rw   rJ  rN  tfm_2s   r9   r:   rK    s    z%?r8   c                     > [        T T5      $ rw   rJ  )tfm_3tfm_5s   r9   r:   rK     s    z%7r8   c                     > [        ST T5      $ r   rJ  rQ  rS  s   r9   r:   rK  #  s    jE59r8   c                  J   > [        [        S-  [        [        -  -   T * T5      $ r   )r   r6   rE   rV  s   r9   r:   rK  $  s    jA!eVUCr8   c                  >   > [        [        S[        -  /5      T 5      $ r   )r   r   rE   rS  s   r9   r:   rK  %  s    j1>r8   )r   rJ   r6   rK   rL   rM   rE   rN   rS   r$  r   r   TF3TF2TF1from_Matrixr   r   rI   r<  shapenum_outputs
num_inputsr   r(   rT   rU   )tf_2tf_3tfm_4s8s9s11rM  rN  rQ  rS  rT  s         @@@@@r9   test_MIMOSeries_constructionrg    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>?r8   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*   rs   c                     > T T-  T-  $ rw   r7   rW   rX   rZ   s   r9   r:   'test_Series_functions.<locals>.<lambda><  s    s3ws{r8   c                     > T TT-
  -  $ rw   r7   rj  s   r9   r:   rk  =  s    sC#Ir8   c                  $   > T [        / SQ5      -  $ rA   r   r   s   r9   r:   rk  >  s    s6)#44r8   Trt   F)r   r6   r$  r   r   rL   rE   rJ   rK   r   r   r(   rT   r   rewriter#  r'  r*  )r\   S1S2S3rW   rX   rY   rZ   s       @@@@r9   test_Series_functionsrr  (  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<<<    ~~~r8   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-  [         -   $ rw   r\  tfm1tfm2s   r9   r:   +test_MIMOSeries_functions.<locals>.<lambda>u  s    tDy3r8   c                     > T T-  [         -   $ rw   )rJ   rv  s   r9   r:   ry  v  s    d4i"nr8   c                  "   > T T-  [         S-
  -
  $ r   r   tfm4tfm6s   r9   r:   ry  w  s    d4i1q51r8   c                     > T T* -  S-
  $ r   r7   r|  s   r9   r:   ry  x  s    dD5j1nr8   c                  (   > S[         S-  -   T T-  -   $ )Nrs   r-   r   rv  s   r9   r:   ry  y  s    rAqDyDI5r8   c                     > T * T-  T-   $ rw   r7   rw  rx  r}  s   r9   r:   ry  }  s    teDj4/r8   c                     > T T-  T-
  T-   $ rw   r7   rw  rx  r}  tfm5s   r9   r:   ry  ~  s    d4i$.5r8   c                     > T T-  TT-  -
  $ rw   r7   r  s   r9   r:   ry    s    d4i$t)3r8   c                     > T T-  [         -  $ rw   ru  r}  r  s   r9   r:   ry    s    tDy}r8   c                     > T T-  [         -  $ rw   rK   r  s   r9   r:   ry    s    d4ilr8   c                  $   > T T* -  [         S-
  -  $ r   r   r  s   r9   r:   ry    s    dD5j!a%0r8   c                     > TT -  S-  $ r  r7   r  s   r9   r:   ry    s    d4ikr8   c                  *   > [         S-  * S-   T-  T -  $ )Nr.   r)   r   r  s   r9   r:   ry    s    1uqy$.t3r8   Trt   r*   r)   r.   )r   r\  r[  rZ  r   r   r(   rT   rU   r   r   r   rL   r6   rE   r   r$  r   r]  r   rn  )tfm3tfm7mat_1mat_2tm_1tm_2rw  rx  r}  r  r~  s         @@@@@r9   test_MIMOSeries_functionsr  f  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r8   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 )Nr.   r*   r,   r)   r-  r.  c                     > [        T T5      $ rw   r   r1  s   r9   r:   ,test_Parallel_construction.<locals>.<lambda>  s    xC0r8   c                      > [        T TTT5      $ rw   r  r4  s   r9   r:   r    s    xCc:r8   c                     > [        T * T5      $ rw   r  r   s   r9   r:   r    s    xc2r8   c                     > [        ST T5      $ r   r  r8  s   r9   r:   r    s    hq"c2r8   c                  H   > [        [        S-  [        [        -  -   TT 5      $ r   )r   r6   rE   r6  s   r9   r:   r    s    hq!tacz3<r8   c                  2   > [        T [        / SQ5      5      $ r;  )r   r   r   s   r9   r:   r    s    hsF<,@Ar8   )r   rJ   r6   rK   rL   rM   rE   rN   rS   r$  r   r   r   rI   r<  r   r(   rT   rU   )r=  r>  p0r   rA  r[   r   r   r   p5p6p7rV   rX   rY   rZ   s               @@@@r9   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Br8   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)   )r.   r)   r*   r*   c                      [        S5      $ )Nr7   r   r7   r8   r9   r:   0test_MIMOParallel_construction.<locals>.<lambda>  s	    l2.r8   c                  &   > [        T T[        5      $ rw   )r   r\  rv  s   r9   r:   r    s    l4s;r8   c                     > [        T TT5      $ rw   r  )rw  r  r}  s   r9   r:   r    s    l4t<r8   c                     > [        T T5      $ rw   r  )r  r  s   r9   r:   r    s    |D$7r8   c                     > [        ST T5      $ r   r  )rw  r}  s   r9   r:   r    s    l1dD9r8   c                  J   > [        [        S-  [        [        -  -   T* T 5      $ r   )r   r6   rE   )rx  r}  s   r9   r:   r  	  s    l1a4!A#:udCr8   )r   r\  r[  rZ  r]  r   rE   r   rI   r<  r6   r^  r_  r`  r   r(   rU   rT   )r  r~  p8p9p10p11p12p13rw  rx  r  r}  r  s           @@@@@r9   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Dr8   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*   rs   c                     > T T-   T-   $ rw   r7   rj  s   r9   r:   )test_Parallel_functions.<locals>.<lambda>   s    sSy3r8   c                     > T TT-  -
  $ rw   r7   rj  s   r9   r:   r  !  s    sSW}r8   c                  $   > T [        / SQ5      -   $ rA   r   r   s   r9   r:   r  "  r   r8   Trt   F)r   r6   r$  r   r   rL   rE   rJ   rK   r   r   r(   rT   r   rn  r#  r'  r*  )r\   P1P2P3rW   rX   rY   rZ   s       @@@@r9   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<<<$$$$>>>r8   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-   [         -   $ rw   )r[  rv  s   r9   r:   -test_MIMOParallel_functions.<locals>.<lambda>f  s    td{S0r8   c                     > T T-
  [         -
  $ rw   r  rv  s   r9   r:   r  g  s    dTkB.r8   c                  "   > T T-
  [         S-
  -
  $ r   r   rx  r  s   r9   r:   r  h  s    dTkQU3r8   c                     > T* T -
  S-
  $ r  r7   r  s   r9   r:   r  i  s    tedlQ.r8   c                  (   > S[         S-  -
  T-
  T -
  $ r   r   r  s   r9   r:   r  j  s    q1a4x4/$6r8   c                     > TT -
  T-
  $ rw   r7   )rx  r  r  s   r9   r:   r  l      td{T1r8   c                     > TT -
  T-   $ rw   r7   )rw  rx  r  s   r9   r:   r  m  r  r8   c                     > T T-   T-   $ rw   r7   r  s   r9   r:   r  o  s    dTkD0r8   c                     > T T-
  T-
  $ rw   r7   r  s   r9   r:   r  p  s    td{d2r8   c                     > T T-   [         -  $ rw   ru  r  s   r9   r:   r  u  s    tS0r8   c                     > T T-
  [         -  $ rw   )rL   r  s   r9   r:   r  v  s    td{B.r8   c                  "   > TT -   [         S-
  -  $ )Nr0   r   r  s   r9   r:   r  w  s    td{QU3r8   c                     > T T-   T-   S-  $ r>   r7   )rw  rx  r  s   r9   r:   r  x  s    td{T114r8   c                  (   > S[         S-  -
  T T-   -  $ r   r   )rw  r  s   r9   r:   r  y  s    q1a4x$+6r8   c                     > TT -
  T-  T-  $ rw   r7   )rx  r  r}  r  s   r9   r:   r  |  s    tT1$6r8   c                     > T T-
  T-  $ rw   r7   )rw  rx  r  s   r9   r:   r  ~  s    tT1r8   Trt   r)   )r   rJ   rE   rK   r6   rL   r   r\  r[  rZ  r   r   r(   rT   rU   r   rn  r   r   r$  )	rZ   r\   r~  rw  rx  r  r}  r  r  s	      @@@@@@r9   test_MIMOParallel_functionsr  T  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r8   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*   rs   c                  "   > [        T TT-   5      $ rw   r   rW   rX   rY   s   r9   r:   ,test_Feedback_construction.<locals>.<lambda>  s    hsC#I6r8   c                  2   > [        T [        / SQ5      5      $ rA   )r   r   r   s   r9   r:   r    s    hsF9,=>r8   c                  F    [        [        SS[        5      [        S-
  5      $ r   )r   r   r6   r7   r8   r9   r:   r    s    h'71a'@!a%Hr8   c                      [        SS5      $ r   r  r7   r8   r9   r:   r    s
    hq!nr8   c                  "   > [        T TT-  5      $ rw   r  )rX   rZ   r\   s   r9   r:   r    s    xSW5r8   c                     > [        TT S5      $ )N      ?r  rW   rX   s   r9   r:   r    s    xS#6r8   c                  $   > [        T T S-  * 5      $ )Nrs   r  r   s   r9   r:   r    s    xc2gX6r8   c                     > [        T T5      $ rw   r  r   s   r9   r:   r    s    xS1r8   )r   r6   r$  r   r   rL   rE   rJ   rK   r   rI   r   sys1sys2r<  r(   rU   rT   )r^   f1f2f3f4f5f6f7rW   rX   rY   rZ   r\   s           @@@@@r9   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2r8   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*   rs   c                  ,   > T T-  T-  ST T-  T-  -   -  $ r   r7   r  s   r9   r:   )test_Feedback_functions.<locals>.<lambda>  s    c#gckQS_=r8   c                  &   > TT-  T TT-  T-  -   -  $ rw   r7   r4  s   r9   r:   r    s    s3w"s3ws{*:;r8   )r   r6   r$  r   r   rL   rE   rJ   rK   r   r   r   r   r(   rU   rT   sensitivityrn  )r\   r^   rV   rW   rX   rY   rZ   s     @@@@@r9   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 5r8   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*   rs   )	r   r6   r   
isinstancerG   rH   r   r   r   )	rW   rX   fd1fd2unitr@  r   fd3rY   s	            r9   !test_Feedback_as_TransferFunctionr    sC   
1Q31
%C
1Q31
%C
3R
 C
3Q
CAq!$D c+,,,,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r8   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)   r.   r   )r   rQ   r   r6   r   r   r   rG   rH   r   r   r   )IbIsmhl2l1KDKPvtau1_sqtau2tau3KGthetaGdeltaGpsiDcontPIcontGunityGinnerGouterexprs                         r9   test_issue_26161r    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4r8   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)   r.   r*   rs   r   )r   r6   r   r    rI   r  r  r<  signr   r   r]  )rW   rX   rY   rZ   rN  rQ  rS  r  r  r  matr  
controllerr  s                 r9   test_MIMOFeedback_constructionr  6  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%%%%%%r8   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)   r.   r*   rs   r<  c                     > [        T T5      $ rw   r    r  s   r9   r:   *test_MIMOFeedback_errors.<locals>.<lambda>o  s    l34r8   c                  0   > [        [        T T5      T5      $ rw   )r    r   )rN  rQ  rS  s   r9   r:   r  p  s    l<u+EuMr8   c                     > [        T TS5      $ r   r  )rN  tfm_6s   r9   r:   r  r      |E5!<r8   c                     > [        T T 5      $ rw   r  )tfm_7s   r9   r:   r  s  s    |E59r8   c                     > [        T TS5      $ )Nr   r  rP  s   r9   r:   r  u  s    |E5"=r8   c                     > [        TT S5      $ r   r  rc  rT  s   r9   r:   r  w  r  r8   c                     > [        T T* 5      $ rw   r  r#  s   r9   r:   r  x  s    |EE6:r8   c                     > [        T T S5      $ r   r  rY  s   r9   r:   r  y  r  r8   c                     > [        T TS5      $ r   r  )rN  tfm_8s   r9   r:   r  |  r  r8   )	r   r6   r   r]  r   r(   rU   rT   rE   )rY   rZ   r\   r^   rW   rX   rN  rQ  rS  rc  rT  r  r   r'  s       @@@@@@@@@@r9   test_MIMOFeedback_errorsr(  ]  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
:<=r8   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)   rs   r*   r  r   r   r,   r.   FT)cancelr   r-   )r*  )r   )r   r6   r   r]  r   r    r   r  r   r   Halfr   rn  )
rW   rX   rY   rZ   rN  rQ  rS  rc  F_1F_2s
             r9   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)))r8   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  )r.   r*   c                  6   > [        [        /[        /T //5      $ rw   r   r\  r[  r   s   r9   r:   :test_TransferFunctionMatrix_construction.<locals>.<lambda>  s    5usecU6KLr8   c                  6   > [        [        T /[        T//5      $ rw   r   r\  rZ  r   s   r9   r:   r2    s    5SzC:6NOr8   c                  4   > [        [        /[        T //5      $ rw   r4  r   s   r9   r:   r2    s    5usCj6IJr8   c                  4   > [        [        [        /T //5      $ rw   r4  r   s   r9   r:   r2    s    5SzC56IJr8   c                  R    [        [        [        /[        [	        SS/5      //5      $ Nr)   r*   )r   r\  r[  rZ  r   r7   r8   r9   r:   r2    s"    4sCj3PQSTvBW5XYr8   c                  R    [        [        [        SS/5      /[        [        //5      $ r8  )r   r\  r   rZ  r[  r7   r8   r9   r:   r2    s!    4sFAq6N6KcSVZ5XYr8   c                  0   > [        [        [        T /5      $ rw   r1  r   s   r9   r:   r2    s    5sCoFr8   c                  "    [        [        /5      $ rw   )r   r\  r7   r8   r9   r:   r2    s    5se<r8   )r   rK   r6   rL   rJ   rE   r   rZ  r^  r_  r`  rI   r   r<  r\  r[  r(   rT   rU   )tfm3_r  r  rZ   r\   s      @@r9   (test_TransferFunctionMatrix_constructionr=    s1   
2ad7RT>B.B
:C
2a4!R%<!+Q
2C"cTF8,E;;5,,e.>.>?I6IIIII::uUC4[1222299>>!C#;c
";<D::$**DOO<FFFFFF99eE#t$4eCoFGGGG88q==!C:cT{cT3K"HID::$**DOO<FFFFFF99eE#sOU35EucTSVGWXYYYY88q== :LM
:OP :JK
:JK 9YZ
9YZ :FG
:<=r8   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)   r.   r,   r/   r   r-   r   )rs   r   r.   r   r   r   gT㥛 	@g
ףp=
@g9̗@gT㥛 @) r   rK   r6   rL   rJ   r   rE   r   r]  r\  r[  rZ  rO   r   r   r   r   r   r   	transpose
elem_polesr   r   r$  
elem_zerosr   r   r   _flatr   r   r   )r\   r  r  mat_3rw  rx  H_1H_2H_3H_4H_5s              r9   %test_TransferFunctionMatrix_functionsrI    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r8   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)   r1   r   r*   g333333?r.   r   r3   )
r   rO   r6   rP   r"   Tr   Zeror   rG   )rV   numZdenZtf_test_bilineartf_test_manualtf_test_forwardtf_test_backwardtf_test_gbts           r9   test_TransferFunction_gbtrT  2  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Vr8   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   rO   r6   rP   r#   rK  r   rL  r   rG   )rV   rM  rN  rO  rP  s        r9   test_TransferFunction_bilinearrV  X  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[[[[[r8   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   rO   r6   rP   r$   rK  r   rL  r   rG   )rV   rM  rN  rQ  rP  s        r9   "test_TransferFunction_forward_diffrY  c  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Zr8   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 rX  )
r   rO   r6   rP   r%   rK  r   rL  r   rG   )rV   rM  rN  rR  rP  s        r9   #test_TransferFunction_backward_diffr[  n  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[[[[[r8   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   r.   r)   r*   iL      r   c                     > [        T 5      $ rw   r&   r   s   r9   r:   4test_TransferFunction_phase_margin.<locals>.<lambda>  s
    S(9r8   c                     > [        T 5      $ rw   r`  r   s   r9   r:   ra    s
    |C0r8   c                  ,   > [        [        T 5      5      $ rw   )r&   r   tf_ms   r9   r:   ra    s    |Jt,<=r8   )r   rE   r6   rO   rP   r   r   r   r&   r   r   r   r(   r   rT   rW   rX   rY   rZ   re  s     @@@r9   "test_TransferFunction_phase_marginrg  y  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
:=>r8   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*   r-   r)   r   ir3   i  c                     > [        T 5      $ rw   r'   r   s   r9   r:   3test_TransferFunction_gain_margin.<locals>.<lambda>  s
    C(8r8   c                     > [        T 5      $ rw   rj  r   s   r9   r:   rk    s
    {3/r8   c                  ,   > [        [        T 5      5      $ rw   )r'   r   rd  s   r9   r:   rk    s    {:d+;<r8   )r   r6   rO   rP   r   r   r   r'   r   r   r	   r(   r   rT   rf  s     @@@r9   !test_TransferFunction_gain_marginrn    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
:<=r8   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   r1   r*   TFc            	          [        [        [        [        S-   S-  /5      [        [        S-   /5      [        [        S-  S-
  /5      [        S[        -  /5      5      $ r8  r!   r   r6   r7   r8   r9   r:   .test_StateSpace_construction.<locals>.<lambda>  sG    z&!acAX*?1*0!Q$(*<facUm Mr8   c            	          [        [        [        /5      [        [        S-   [        S-  S-   /5      [        [        S-  S-
  /5      [        S[        -  /5      5      $ )Nr)   r.   r*   rr  r7   r8   r9   r:   rs    sG    z&!+vqsAqD1Ho7N*0!Q$(*<facUm Mr8   c            
          [        [        [        /5      [        [        S-   /5      [        [        S-  S-
  /[        S-  S[        -  -   S-   //5      [        S[        -  /5      5      $ r8  rr  r7   r8   r9   r:   rs    sZ    z&!+vqse}*01a4!8*q!taczA~>N1O*PRXZ[\]Z]Y^R_ ar8   c            
          [        [        [        * [        * /[        S//5      [        [        S-  S/S[        //5      [        S[        //5      [        S[        -  S[        -  /[        [        //5      5      $ )Nr   r*   rr  r7   r8   r9   r:   rs    sf    z&A2r(QF1C*D061a1a&7I0J06Ax0@061ac
QF7K0L Nr8   c                  H    [        [        S-  [        S-   S[        -  S5      $ r   )r!   r6   r7   r8   r9   r:   rs    s    jAqsAaC;r8   c                  \    [        [        SS/5      [        S/5      [        S/5      S5      $ )Nr*   r1   rs   r)   r   )r!   r   r7   r8   r9   r:   rs    s'    jC)962$<)/a9r8   )r   r!   state_matrixinput_matrixoutput_matrixfeedforward_matrixrI   rJ   rK   rL   a3rM   rN   rS   b3c0r   c2c3r   r   r   d3is_SISOr(   r   rU   )A1B1C1D1ss1ss2ss3A4B4C4D4ss4ss5A6B6ss6s                   r9   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 :r8   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 )+Nr,   r)   r*   r   r-   r   r.   rs   )r   r,   r*   )rs   r   r   )r*   r-   r.   r   )r,   r*   r   )r)   r,   r.   )r,   r)   r   r   r   )r*   r   r   r   r   )r   r   r   r,   r*   )r   r   rs   r   r   )r   r   r*   r-   r.   )r*   r  r,   r*   r   )r   r)   r)   r,   r.   r0   )r   r,   r*   r   r   )rs   r   r   r   r   )r*   r-   r.   r   r   )      ir,   r)   )ir   r*   r   ir  r  )r   r   r   r*   r  )r.   r   r   r)   r  r   r1   r        @g      @r   c                     > T T-   $ rw   r7   )r  r  s   r9   r:   %test_StateSpace_add.<locals>.<lambda>B  r   r8   c                     > T T-  $ rw   r7   )r  r  s   r9   r:   r  C  s	    s3wr8   )r   r!   r(   r   )r  r  r  r  A2B2C2D2expected_addexpected_mulr  r  r  r  s             @@@@r9   test_StateSpace_addr    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_````
:()
:'r8   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 )Nrs   r)   )r   rJ   rK   rL   r}  rM   rN   rS   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              r9   test_StateSpace_negationr  E  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%%%r8   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*   r.   r-   $      r   r   r,   r   r   r   r   r   )r!   r   r6   rE   r   r   rO   rP   rK   rJ   rS   rN   rM   r   )r  r  r   r   Gexpectexpect_s          r9   !test_SymPy_substitution_functionsr  g  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$$$r8   c            	      \   [        SS/SS//5      n [        SS/5      n[        SS//5      n[        S/5      n[        XX#5      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[        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   rs   r.   r*   r-   r)   r   r   ;   r0   r2   )rp  r   r.   )r)   r   r)   )r*   r)   r)   )r1   r   r)   )r   r)   r*   )r*   r*   r.   )r   r)   r   )r   r*   r)   )r)   r   r*   )r*   r*   r   )r)   r)   r)   )r.   r*   r)   r   r   g      %@r  r1   g      @g      @g      @r   r   c                      [        [        [        S-  -  [        S-  -   [        [        -  -
  [        -   [        [        S-  -
  [        5      R                  [        5      $ r   )r   rP   r6   rE   rO   rn  r!   r7   r8   r9   r:   !test_conversion.<locals>.<lambda>  sB    /!Q$A!0Ca0GQPQTSTU]]^hir8   )r   r!   rn  r   r6   rG   rH   r\  r   r$  r(   rT   )r  r  r  r  r   tm1tm2rW   rX   r  r  r  r  r   tm3r  s                   r9   test_conversionr    sB   	"bAr7#	$B	AB	!Q	B	B	BB	#B
**%
&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 
Z	 B6Q/UFBrE$J/1 2A33  !Aq6(#A3%=	"" " " ::&'*1-444 :ijr8   c            	         [        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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       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[        SS/SS//5      n[        S/S//5      n[        SS//5      n	[        S//5      n
[        XxX5      n[        [        SS/SS//5      [        S/S//5      [        SS//5      [        S//5      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R                  [        SS/SS//5      :X  d   eg )Nrp  r   r)   r   r1   r,   r*   rs   TFr.   r   g      )r)   rs   r*   r   )r   r)   r   r   )r)   r   r   r   )r   r   r)   r   )r   r   r   r)   )r   r!   is_observableobservability_matrixobservable_subspaceis_controllablecontrollability_matrixcontrollable_subspaceappend
num_statesr`  r_  ry  rz  r{  r|  )A_matB_matC_matD_matSS1SS2SS3r  r  r  r  r  r  r  s                 r9   test_StateSpace_functionsr    s8    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 $&&&%'''##%!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  D((( E)))%%'FS%LQ#,3O,PPPP%%'6>>2R+SSSS$$&6C5Q%.+A6E7WZT[J\C]*^^^^$$&6A3*+=*>>>> 
!Q!Q 	!B	!qc
	B	!Q	B	!B
RR
$C
VaVaV,-vsQCj/A6Aq6(CSU[^_]`\aUb
cC
**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,<%====r8   N)|sympy.core.addr   sympy.core.functionr   sympy.core.mulr   sympy.core.numbersr   r   r   r	   sympy.core.powerr
   sympy.core.singletonr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   sympy.polys.polytoolsr   sympy.polys.rootoftoolsr   sympy.simplify.simplifyr   sympy.core.containersr   sympy.matricesr   r   r   sympy.physics.controlr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   sympy.testing.pytestr(   rO   r   rP   r   r6   rQ   rR   rE   r   r   r$  r   rK  rJ   rK   rL   r}  rM   rN   rS   r~  r  r   r  r  r   r   r   r  r\  r[  rZ  rq   r   r  r   r%  r(  r+  rG  rg  rr  r  r  r  r  r  r  r  r  r  r  r(  r.  r=  rI  rT  rV  rY  r[  rg  rn  r  r  r  r  r  r  r7   r8   r9   <module>r     s    (  4 4   " % = 9 9 $ ( + , ' > >W W W W W (.5 7 / +1aAq!Q3b!AH J B >BBBBBBBBq!Q$41,r1u4a8q!Qr!taxA1-^9B^8@1D(6V		&	(AV)@X;|@iF+C\2EjEP1Wh33l05f#J5@$&N>D%*P!>FfJP$WL	\	[	\?> k:X?(B &D%0*kZ*>r8   