a
    {þdê  ã                   @   s<  d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- edƒ\Z.Z/Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<Z=Z>Z?e"de1d de= e> e1  e>d  e1ƒZ@e"e5de1ƒZAe"e8e4 e1 e8e1 e4 e1ƒZBdd„ ZCdd„ ZDdd„ ZEdd„ ZFdd„ ZGdd „ ZHd!d"„ ZId#d$„ ZJd%d&„ ZKd'd(„ ZLd)d*„ ZMd+d,„ ZNd-d.„ ZOd/d0„ ZPd1d2„ ZQd3d4„ ZRd5d6„ ZSd7d8„ ZTd9d:„ ZUd;d<„ ZVd=d>„ ZWd?d@„ ZXdAdB„ ZYdCdD„ ZZdES )Fé    )ÚAdd)ÚFunction)ÚMul)ÚIÚRationalÚoo)ÚPow)ÚS)Úsymbols)Úexp)Úsqrt)Úeye)Úfactor)ÚCRootOf)Úsimplify)ÚTuple)ÚImmutableMatrixÚMatrix)
ÚTransferFunctionÚSeriesÚParallelÚFeedbackÚTransferFunctionMatrixÚ
MIMOSeriesÚMIMOParallelÚMIMOFeedbackÚbilinearÚbackward_diff)Úraisesz7a, x, b, s, g, d, p, k,    a0:3, b0:3, tau, zeta, wn, Té   é   c                  C   s  t td td t d tƒ} | jtd ks.J ‚| jtd t d ksHJ ‚| jtd td t d tfkslJ ‚t td td tƒ}|jtd ks’J ‚|jtd ks¤J ‚|jtd td tfksÀJ ‚t td td d tƒ}|jtd ksêJ ‚|jtd d ksJ ‚|jtd td d tfks$J ‚t td dtd   d td dt  d tƒ}|jtd dtd   d td dt  d tfksŽJ ‚t td td  td td  tƒ}|jtd td  ksÎJ ‚|jtd td  td td  tfksüJ ‚t td td tƒ}|jtd td tfks.J ‚t td dt tƒ}|jtd dt tfks`J ‚t td td tƒ}|jtd td tfks’J ‚t ddtƒ}|jdks®J ‚|jdks¾J ‚|jddtfksÔJ ‚t ddtƒ}	|	jdksðJ ‚|	jdks J ‚|	jddtfksJ ‚t dtd  dt  dt  d	td  d
t  tƒ}
t dtd  dt  dt  d	td  d
t  tƒ}|
|krŒJ ‚t tt ttd   ttd   t	t t
t  tƒ}t tt ttd   ttd   t	t t
t  tƒ}||ksJ ‚|  |  kr&|    ks,n J ‚t ttd  ttd   tt  t tt ttd   tt  tƒ}|jttd  ttd   t tt  tt ttd   tt  tfks¾J ‚t td t ttd  tt  t tƒ}t td t ttd  tt  t tƒ}|jttd  ttt  ttd   tfks@J ‚||ksNJ ‚t tt t ttd  t
t  t	 tƒ}|jttt  ksŽJ ‚|jt	t
t  ttd   ks²J ‚|jttt  t	t
t  ttd   tfksäJ ‚t dtd t d tƒ}|jdtd t d tfksJ ‚t ddtƒ}|jddtfks@J ‚t ttd  ttd   t ttd  tƒ}|jttd  t ttd   ttd  tfks¢J ‚t td td  ttd   tt t tƒ}|jttd  td td   tt t tfksJ ‚tdƒ\}}}}t ||t  |t  td d| t  |d  tƒ}|j|t |t  | kshJ ‚|j|t |t  | |d d| t  td  tfks¦J ‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ d S )Nr   r    é   é   é   é	   é   g      à?é   é   r   g333333ã?gffffff!Àg      Ð?gš™™™™™é¿zomega_o, k_p, k_o, k_ic                   S   s   t ddtƒS )Nr!   r   ©r   Ús© r*   r*   úm/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/physics/control/tests/test_lti.pyÚ<lambda>r   ó    z4test_TransferFunction_construction.<locals>.<lambda>c                   S   s   t tdtƒS ©Nr   r(   r*   r*   r*   r+   r,   s   r-   c                   S   s   t ddtƒS r.   r(   r*   r*   r*   r+   r,   t   r-   c                   S   s   t tg d¢ƒttƒS ©N)r   r    r#   )r   r   r)   r*   r*   r*   r+   r,   v   r-   c                   S   s    t td dt  d td dƒS )Nr    r   r#   r(   r*   r*   r*   r+   r,   x   r-   c                   S   s   t td dt dƒS )Nr   r"   r!   )r   Úpr*   r*   r*   r+   r,   y   r-   c                   S   s   t dddƒS )Nr#   r!   r&   )r   r*   r*   r*   r+   r,   z   r-   )r   r)   ÚnumÚdenÚargsr0   Úa0Úa1Úa2Úb0Úb1ÚaÚbÚgÚdÚb2r
   r   Ú
ValueErrorÚ	TypeError)ÚtfÚtf1Útf2Útf3Útf4Útf4_Útf5Ztf5_Útf6Ztf6_Útf7Útf8Ztf7_Ztf8_Útf9Útf10Ztf10_Útf11Ztf12Ztf13Ztf14Ztf15Úomega_oZk_pZk_oZk_iZtf18r*   r*   r+   Ú"test_TransferFunction_construction   s†    $"0:$.4444*DN((2($2",6,64 >rN   c            :         s¼  t dttddddd} td ‰ ttd  dt  td d  ‰d	‰ddt  ddt   d
dt  ddtd     }d
td  dtd   d td td
   }ttd td d tƒ}tt t ƒ}|| ¡  }t |t¡}ttd td d ttt ƒ tƒ}t	ddt td d  dd}t | ¡tdttƒks@J ‚t
t‡ fdd„ƒ t
t‡fdd„ƒ t ˆt¡tttd  dt  td d tƒksšJ ‚t ˆt¡tttd  dt  td d tƒksÐJ ‚t
t‡fdd„ƒ t ˆt¡td	dtƒks J ‚t |t¡tddt  ddt   d
dt  ddtd    tƒksJJ ‚t |t¡td
td  dtd   d td td
  tƒksŒJ ‚||ksšJ ‚t |t¡tdtd  dt  d td d tƒksÔJ ‚ttd td  t ttd  tƒ}	ttd td  d  td tƒ}
|	 ¡ t|	ƒ  kr:|
ks@n J ‚ttd td  td td  tƒ}ttd td tƒ}| ¡ t|ƒ  kr˜|ksžn J ‚tdt d td d d tƒ}tddtƒ}ttt  ttt   ttt   tt tt   }ttt  ttt   tt t tt   }ttt  tt  ttt  tt   ttt  tt   ttt  tt   ttt  tt   ttdt    }tt t t tt  ttt  tt   tt t tt  t  ttt  tt   }tt t tt  tt t  tt t t tt   ttd  t  }t||tƒ}tttt  ttt   tt tt t  ttt  t  tƒ}| ¡ ttd dt  d td dtd   d tƒksÈJ ‚| ¡ ttd dt  d td dt  d tƒksJ ‚| ¡ |ksJ ‚| ¡ t||tƒks.J ‚| ¡ tttt  ttt   |tƒks\J ‚tt t }ttd  tt  t }t||tƒ}tdt d dtd  dt  d tƒ}tdt d dtd  dt  d tƒ}| tdtdtdtdtdi¡|ksJ ‚| tdtdtdtdtdi¡ ¡ |ks0J ‚| ¡ |ksBJ ‚tdƒ\}}}}|t |td  |td   |  }} t|| tƒ}!tdt dtd  dtd   d tƒ}"tdt dtd  dtd   d tƒ}#|! |d|d|d|di¡|#ksøJ ‚|! |d|d|d|di¡ ¡ |"ks J ‚|# ¡ |"ks2J ‚tttd  ttd   tt  t tt t tƒ}$tdtd  dtd   t d tdt  tƒ}%tdtd  dtd   t d tdt  tƒ}&|$ tdtdtdtdi¡|&ksêJ ‚|$ tdtdtdtdi¡ ¡ |%k	sJ ‚|& ¡ |%k	s$J ‚ttttd   tt t tƒ}'tdtd  t tt tƒ}(tdtd  t tt tƒ})|' tdtdi¡|)k	s˜J ‚|' tdtdi¡ ¡ |(k	s¸J ‚|) ¡ |(k	sÊJ ‚|	 ¡ dk	sÜJ ‚| ¡ tddƒk	sôJ ‚|! ¡ dk
sJ ‚|( ¡ dk
sJ ‚|# ¡ dk
s*J ‚tdttƒ ¡ tk
sDJ ‚ttd t ttƒ}*tttd t tƒ}+ttd td t td  tƒ},ttd t td  td tƒ}-| ¡ ttt t gk
sÊJ ‚| ¡ g k
sÜJ ‚| ¡ ddgk
sòJ ‚|) ¡ tgksJ ‚|' ¡ t t gks J ‚|% ¡ dt gks8J ‚t|" ¡ ƒtddd t  dd t  gƒkshJ ‚t| ¡ ƒtd!d"t  d!d"t  gƒks–J ‚|+ ¡ ttddƒ ttddƒ  tttddƒ  t ttddƒ  gksäJ ‚|, ¡ t td
 t d dƒdt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d d	ƒt td
 t d dƒt td
 t d dƒg
ks¬J ‚t
t!d#d„ ƒ td$d%d&\}.}/td'd%d(}0ttd t tt  |.t |/ tƒ},ttd t tt  |.t d tƒ}1ttd t tt  |.t |0 tƒ}2| "¡ du sTJ ‚| "¡ d%u sfJ ‚| "¡ du sxJ ‚|" "¡ du sŠJ ‚| "¡ d%u sœJ ‚|1 "¡ d%u s®J ‚|2 "¡ d%u sÀJ ‚|, "¡ du sÒJ ‚|) "¡ d u säJ ‚|' "¡ d u söJ ‚| #¡ ddgksJ ‚| #¡ g ksJ ‚| #¡ ddgks4J ‚|) #¡ dtddƒ t tddƒ  d dtddƒ  t tddƒ  d) t$dƒdtddƒ  t t tddƒ  d)  dtddƒ  t tddƒ  d) t$dƒdtddƒ  t t tddƒ  d)  gksJ ‚|' #¡ tt tddƒ tt tddƒ  d t$dƒt tt tddƒ  d  tt tddƒ  d t$dƒt tt tddƒ  d  gks˜J ‚t|% #¡ ƒtd*d+t$d,td  d ƒ  d+t$d,td  d ƒ d* gƒksæJ ‚|* #¡ ttddƒ ttddƒ  d t$dƒt ttddƒ  d  ttddƒ  d t$dƒt ttddƒ  d  gksdJ ‚|- #¡ t td
 t d dƒdt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d dƒt td
 t d d	ƒt td
 t d dƒt td
 t d dƒg
ks,J ‚t
t!d-d„ ƒ ttd td td  d
 tƒ}3tdt d dt tƒ‰|3 tt d td td  d
 tƒks J ‚ˆ tdt d dt tƒksÄJ ‚ttd td tƒ‰ttd d dt tƒ‰ttd d d dt d tƒ}"ttd d td d tƒ}ˆˆ  %¡ ˆd   krbt&ˆdƒ  krb|kshn J ‚ˆˆ ˆ  %¡ ˆd   kr¢t&ˆdƒ  kr¢|"ks¨n J ‚ˆd t&ˆdƒ  krÒtddtƒksØn J ‚t'ˆƒ %¡ d ˆd   kr"t&ˆdƒ  kr"ttd td tƒks(n J ‚ˆˆ  %¡ d ˆd.   kr~t&ˆd.ƒ  kr~tdt d td d d tƒks„n J ‚t
t‡fd/d„ƒ t
t‡fd0d„ƒ t
t‡‡fd1d„ƒ ttd td dt  d tƒ}ttt td d tƒ}4t(|ƒttd td d tƒksJ ‚|j) td¡|j* td¡  krFdksLn J ‚| td¡ttd td dt  d tƒks~J ‚|4 td¡ttd dtƒks J ‚ˆ +tti¡tdt d dt tƒksÌJ ‚t
t,‡fd2d„ƒ ˆ ttdƒ¡ˆksøJ ‚tttt  ttt   tt t tƒ}5|5 +tti¡tttt  ttt   tt t tƒks\J ‚|5 tt¡tttt  ttt   tt t tƒks–J ‚tttd  dtd   d td	 d tƒ}6tdt dt d	t  tƒ}7tddtƒ}8tddtƒ}9|6 ¡ t ttd  dtd   d ttd	 d dddddks<J ‚|7 ¡ t td tdt d	t  dddddksrJ ‚|8 ¡ t t-dƒtddddddksœJ ‚|9 ¡ tddddks¸J ‚d S )3Nr   éÿÿÿÿF©Úevaluater    r"   r   r#   r%   r$   r!   r&   c                      s
   t  ˆ ¡S ©N©r   Úfrom_rational_expressionr*   )Úexpr_2r*   r+   r,      r-   z1test_TransferFunction_functions.<locals>.<lambda>c                      s
   t  ˆ ¡S rR   rS   r*   )Úexpr_3r*   r+   r,   Ž   r-   c                      s
   t  ˆ ¡S rR   rS   r*   )Úexpr_4r*   r+   r,   ‘   r-   éýÿÿÿç       @ç      ð?g      @g      @ç      @zc1, d0:3g      @r'   iùÿÿÿé
   éûÿÿÿg      Ð¿gÞÍúSç?g3pUÍcâ¿gãH«8ó¹æ?gš™™™™™Ù¿gÄ%1Cõ9å?c                   S   s(   t td ttd  t td  tƒ ¡ S )Nr    r\   )r   Úxr4   Úpolesr*   r*   r*   r+   r,   ï   r-   zq, rT)ÚnegativeÚt)Zpositiveé   g      À?gv¸-kÁÆñ?gâ3•ŽìÙ¿c                   S   s(   t ttd  t td  td tƒ ¡ S )Nr\   r    )r   r4   r^   Úzerosr*   r*   r*   r+   r,     r-   éþÿÿÿc                      s   ˆ t d t  d  S )Nr    r   ©r)   r*   ©rD   r*   r+   r,   %  r-   c                      s   ˆ t  S rR   re   r*   ©rF   r*   r+   r,   &  r-   c                      s   ˆ ˆ S rR   r*   r*   ©rD   rF   r*   r+   r,   '  r-   c                      s   ˆ   ttdƒi¡S ©Nr    )Úxreplacer0   r   r*   ©rC   r*   r+   r,   2  r-   ).r   r   r)   r0   r   r   ÚtauZto_exprrT   r   r   ÚZeroDivisionErrorr>   r   r6   r5   r4   r7   r8   r=   ÚexpandÚsubsÚevalfr
   Zdc_gainr   r   r^   Úkr_   r   Ústrr   ÚNotImplementedErrorZ	is_stablerc   r   ÚdoitÚpowr   r   r1   r2   rj   r?   r	   ):Zexpr_1Zexpr_5Zexpr_6r@   ÚdelayZexpr_7ZH1ZH2Zexpr_8Ztf0r9   rA   r:   ÚG1ÚG2Úcr<   ÚeÚfr;   ÚG3ÚG4Úp1Úp2ZSP1Zexpect1Zexpect1_Zc1Zd0Úd1Zd2Úp3Úp4ZSP2Zexpect2Zexpect2_ZSP3Zexpect3Zexpect3_ZSP4Zexpect4Zexpect4_Ztf_Z_tfZTF_Z_TFÚqÚrra   Z	stable_tfZ
stable_tf_rB   rG   rH   rI   rJ   rK   rL   r*   )rU   rV   rW   rC   rD   rF   r+   Útest_TransferFunction_functions}   s\    4,$66
6ÿ

.ÿ

&ÿ
$"&$& 4,tXH@>:.(((,&(($(400$(    0.NDP(þ$$$H,ÿPÿN8ÿ&ÿB0ÿDP(þ .$ <@0P\ &22",(<:,F6*r…   c                      s  t td td tƒ‰t td td tƒ‰t td td t d tƒ‰t tdt tƒ‰ˆˆ tˆˆƒksjJ ‚ˆˆ tˆˆƒks€J ‚ˆ ˆ ˆ tˆ ˆˆƒks J ‚ˆˆˆ  tˆˆˆƒks¼J ‚tddd‰ tt‡fd	d
„ƒ tt‡ ‡fdd
„ƒ tt‡‡fdd
„ƒ tt‡fdd
„ƒ tt‡fdd
„ƒ tt‡fdd
„ƒ ˆˆ tˆˆ ƒksRJ ‚ˆˆ tˆˆ ƒkslJ ‚ˆ ˆ tˆ ˆ ƒksŠJ ‚ˆˆ ˆ tˆˆ ˆƒksªJ ‚tt‡fdd
„ƒ tt‡‡fdd
„ƒ tt‡fdd
„ƒ tt‡fdd
„ƒ tt‡fdd
„ƒ tt‡fdd
„ƒ d S )Nr%   r"   r#   r   r    ry   F©Zcommutativec                      s   ˆ t g d¢ƒ S r/   ©r   r*   ©rA   r*   r+   r,   P  r-   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>c                      s   ˆˆ  S rR   r*   r*   )ry   rB   r*   r+   r,   Q  r-   c                      s   ˆ ˆ S rR   r*   r*   ©rC   rD   r*   r+   r,   R  r-   c                      s   ˆ t d  S ©Nr   re   r*   rˆ   r*   r+   r,   S  r-   c                      s   ˆ d S ©Nr&   r*   r*   rˆ   r*   r+   r,   T  r-   c                      s   dt d  ˆ  S ©Nr   r#   ©r0   r*   rˆ   r*   r+   r,   U  r-   c                      s   ˆ t g d¢ƒ S r/   r‡   r*   rˆ   r*   r+   r,   ]  r-   c                      s   ˆ ˆ S rR   r*   r*   r‰   r*   r+   r,   ^  r-   c                      s   ˆ t d  S rŠ   re   r*   rˆ   r*   r+   r,   _  r-   c                      s   ˆ d S r‹   r*   r*   rˆ   r*   r+   r,   `  r-   c                      s   t d ˆ  S )Nr"   re   r*   )rB   r*   r+   r,   a  r-   c                      s   dt d  ˆ  S )Nr   r!   r   r*   rˆ   r*   r+   r,   b  r-   )r   r)   r0   r   r
   r   r>   r*   r*   )ry   rA   rB   rC   rD   r+   Ú.test_TransferFunction_addition_and_subtractionC  s2      rŽ   c                      sÜ  t td td  d tƒ‰ t td td tƒ‰t ttd d tƒ‰t td td tƒ‰t td td tƒ‰t td td tƒ‰t ddtƒ‰ˆ ˆ tˆ ˆƒks J ‚ˆ  ˆ tˆ  ˆƒksºJ ‚ˆ ˆ ˆ  tˆ ˆˆ ƒksÞJ ‚ˆ  ˆ  ˆ  ˆ  tˆ  ˆ ˆ ˆ ƒksJ ‚ˆˆ tˆˆƒks*J ‚ˆ ˆ ˆˆ   tˆ ˆt ddtƒtˆˆƒƒks^J ‚ˆ ˆ ˆˆ  tˆ ˆtˆˆƒƒks†J ‚tdd	d
‰tt‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡‡fdd„ƒ tt‡‡‡fdd„ƒ d S )Nr#   r$   r   r"   r!   r%   rO   ry   Fr†   c                      s   ˆ t g d¢ƒ S r/   r‡   r*   ©r|   r*   r+   r,   y  r-   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>c                      s   ˆ ˆ S rR   r*   r*   )rw   ry   r*   r+   r,   z  r-   c                      s   ˆ ˆ S rR   r*   r*   ©r|   ÚG5r*   r+   r,   {  r-   c                      s   ˆ t d  S rŠ   re   r*   ©r‘   r*   r+   r,   |  r-   c                      s   dˆ  S ©Nr$   r*   r*   r’   r*   r+   r,   }  r-   c                      s   ˆ t g d¢ƒ S r/   r‡   r*   r   r*   r+   r,     r-   c                      s   ˆ d S r.   r*   r*   )ÚG6r*   r+   r,   €  r-   c                      s   ˆ ˆ S rR   r*   r*   r   r*   r+   r,     r-   c                      s   ˆ d S ri   r*   r*   r’   r*   r+   r,   ‚  r-   c                      s   ˆ t d  S ri   re   r*   r’   r*   r+   r,   ƒ  r-   c                      s   t dt d   ˆ  S )Nr!   r    re   r*   )rx   r*   r+   r,   „  r-   c                      s   dˆ  S r.   r*   r*   )r}   r*   r+   r,   …  r-   c                      s   ˆ ˆ S rR   r*   r*   )r‘   r”   r*   r+   r,   †  r-   c                      s
   ˆ  ˆ S rR   r*   r*   )r|   r}   r*   r+   r,   ‡  r-   c                      s   ˆdˆ   S rŠ   r*   r*   )r”   ÚG7r*   r+   r,   ˆ  r-   c                      s   ˆˆ ˆ  S rR   r*   r*   ©r‘   r”   r•   r*   r+   r,   ‰  r-   c                      s   ˆˆˆ ˆ   S rR   r*   r*   r–   r*   r+   r,   Š  r-   )r   r)   r0   r   r   r
   r   r>   r*   r*   )rw   rx   r|   r}   r‘   r”   r•   ry   r+   Ú1test_TransferFunction_multiplication_and_divisione  sD    $4ÿ
(r—   c                  C   sê   t dƒ\} }}t| d td t|  | t  | d  | ƒ}t|td  |td  |ƒ}ttt td  td  tt  t tttd   tƒ}tttd  td  tt  t ttd  tƒ}|jsÈJ ‚|jsÒJ ‚|jsÜJ ‚|jræJ ‚d S ©Nzomega_o, zeta, taur    r#   r!   )r
   r   r)   r0   r9   r:   Ú	is_proper)rM   Úzetarl   rw   rx   r|   r}   r*   r*   r+   Útest_TransferFunction_is_proper  s    ,80


r›   c                  C   sê   t dƒ\} }}t| d td t|  | t  | d  | ƒ}t|td  |td  |ƒ}ttt td  td  tt  t tttd   tƒ}tttd  td  tt  t ttd  tƒ}|jrÈJ ‚|jrÒJ ‚|jsÜJ ‚|jræJ ‚d S r˜   )r
   r   r)   r0   r9   r:   Úis_strictly_proper)rM   rš   rl   rA   rB   rC   rD   r*   r*   r+   Ú(test_TransferFunction_is_strictly_proper™  s    ,80


r   c                  C   sê   t dƒ\} }}t|d td t| | t  |d  |ƒ}t| td  | td  | ƒ}ttt td  td  tt  t tttd   tƒ}tttd  td  tt  t ttd  tƒ}|jsÈJ ‚|jsÒJ ‚|jrÜJ ‚|jræJ ‚d S )Nztau, omega_o, zetar    r#   r!   )r
   r   r)   r0   r9   r:   Úis_biproper)rl   rM   rš   rA   rB   rC   rD   r*   r*   r+   Ú!test_TransferFunction_is_biproper¥  s    ,80


rŸ   c                     sš  t ttd  ttd   tt  ttd  ttd   tt t  tƒ‰ t tt t tt t tƒ‰t tt tt  t ttƒ‰t dtd dt	 t
 t  t
d  tƒ‰tdƒtƒ} tdƒtƒ}tˆ ˆƒ}|jˆ ˆfksÜJ ‚|jtksêJ ‚ttˆ ˆ ƒˆƒ}|jtˆ ˆ ƒˆfksJ ‚|jtks(J ‚t | dtƒ}t | dtƒ}tˆ t||ƒˆƒ}|jˆ t||ƒˆfkspJ ‚tˆ ˆˆƒ}|jˆ ˆˆfks’J ‚t||ƒ}|j||fks°J ‚|jtksÀJ ‚tˆˆtˆˆ  ƒˆƒ}	|	jˆˆtˆˆ  ƒˆfksöJ ‚tˆ ˆƒ}
||
ksJ ‚||krJ ‚tt‡ ‡fdd„ƒ tt‡ ‡‡‡fd	d„ƒ tt‡‡fd
d„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ d S )Nr#   r    r!   r   ÚX_dÚXc                      s
   t ˆ ˆƒS rR   ©r   r*   ©r@   rC   r*   r+   r,   Ô  r-   z*test_Series_construction.<locals>.<lambda>c                      s   t ˆ ˆˆˆƒS rR   r¢   r*   ©r@   rB   rC   rD   r*   r+   r,   Õ  r-   c                      s   t ˆ ˆ ƒS rR   r¢   r*   ©rB   rC   r*   r+   r,   Ö  r-   c                      s   t dˆ ˆƒS ri   r¢   r*   ©r@   rD   r*   r+   r,   ×  r-   c                      s   t td tt  ˆˆ ƒS ri   )r   r)   r0   r*   r¥   r*   r+   r,   Ø  r-   c                      s   t ˆ tg d¢ƒƒS ©N)r   r    r#   r!   )r   r   r*   rk   r*   r+   r,   Ù  r-   )r   r4   r)   r5   r6   r7   r0   r8   r=   rš   Úwnr   r   r3   Úvarr   r   r>   r?   )ÚinpÚoutÚs0Ús1Útf3_rE   Ús2Zs3Zs4Zs6Zs7r*   r¤   r+   Útest_Series_construction±  s@    H(

 
r°   c                     s’  t ttd  ttd   tt  ttd  ttd   tt t  tƒ‰ t tt t tt t tƒ} t dtd dt	 t
 t  t
d  tƒ}tˆ | |g| |  ˆ ggƒ‰t|  g|  g| ggƒ‰t| ggƒ‰ttgtgt ggƒ}t tdt gƒt¡‰tˆˆƒ}|jˆˆfksJ ‚|jtks*J ‚|j|j|jf  krLdksRn J ‚tˆˆˆƒ}|jˆˆˆfkstJ ‚|jtks„J ‚|j|j|jf  kr¦dks¬n J ‚tˆtˆ | ƒˆƒ}|jˆtˆ | ƒˆfksâJ ‚|j|j|jf  krdks
n J ‚ttdd„ ƒ tt‡ ‡fdd„ƒ tt‡‡fd	d„ƒ tt‡‡fd
d„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ d S )Nr#   r    r!   r   )r    r   c                   S   s   t ƒ S rR   ©r   r*   r*   r*   r+   r,   ö  r-   z.test_MIMOSeries_construction.<locals>.<lambda>c                      s
   t ˆˆ ƒS rR   r±   r*   )Útf_1Útfm_1r*   r+   r,   ù  r-   c                      s   t ˆ ˆˆ  ƒS rR   r±   r*   ©r³   Útfm_2r*   r+   r,   ý  r-   c                      s
   t ˆ ˆƒS rR   r±   r*   )Útfm_3Útfm_5r*   r+   r,      r-   c                      s   t dˆ ˆƒS ri   r±   r*   ©rµ   r¶   r*   r+   r,     r-   c                      s   t td tt  ˆ  ˆƒS ri   )r   r)   r0   r*   r¸   r*   r+   r,     r-   c                      s   t tdt gƒˆ ƒS rŠ   )r   r   r0   r*   ©r¶   r*   r+   r,     r-   )r   r4   r)   r5   r6   r7   r0   r8   r=   rš   r¨   r   ÚTF3ÚTF2ÚTF1Úfrom_Matrixr   r   r3   r©   ÚshapeÚnum_outputsÚ
num_inputsr   r   r>   r?   )Ztf_2Ztf_3Útfm_4Zs8Zs9Zs11r*   )r²   r³   rµ   r¶   r·   r+   Útest_MIMOSeries_constructionÜ  s4    H(
(( (rÂ   c                     s¤  t dtd dt t t  td  tƒ‰ t tdtƒ‰t tt t tt t tƒ‰t tt tt  t ttƒ‰t ttd  tt  t tt tƒ} ˆ ˆ ˆ t	ˆ ˆˆƒ  krÖt	t	ˆ ˆƒˆƒ  krÖt	ˆ t	ˆˆƒƒksÜn J ‚ˆ ˆˆ  t	ˆ t
ˆˆƒƒksüJ ‚ˆ ˆ |  t
t	ˆ ˆƒ| ƒksJ ‚ˆ ˆ |  t
t	ˆ ˆƒ|  ƒksBJ ‚ˆ ˆ ˆ |  t
t	ˆ ˆƒˆ| ƒksjJ ‚ˆ ˆ ˆ |  t
t	ˆ ˆƒˆ |  ƒks–J ‚ˆ ˆ ˆ |  t
t	ˆ ˆƒˆ | ƒksÀJ ‚ˆ ˆ ˆ|   t
t	ˆ ˆƒt	ˆ| ƒƒksìJ ‚ˆ ˆ ˆ|   t
t	ˆ ˆƒt	t ddtƒt	ˆ| ƒƒƒks&J ‚ˆˆ ˆˆ   ˆ t	ˆˆt
ˆˆ  ƒˆƒksVJ ‚ˆ  ˆ t	ˆ  ˆƒksrJ ‚ˆ ˆ  t	t ddtƒt	ˆ ˆƒƒksšJ ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡fdd„ƒ t	ˆ ˆdd	t	ˆ ˆƒ ¡   kr(t ttd dt t t  td  tƒks.n J ‚t	ˆ ˆt
ˆ ˆ ƒdd	t	ˆ ˆt
ˆ ˆ ƒƒ ¡   krÜt ttt t t t t td dt t t  td     tt t td dt t t  td  d  tƒksân J ‚t	ˆˆ ˆ dd	t	ˆˆ ˆ ƒ ¡   krTt tt t t  tt t td dt t t  td   tƒksZn J ‚t	ˆ ˆ d
d	t	ˆ ˆ ƒ ¡ kr€J ‚t	t
ˆ ˆƒt
ˆˆ ƒƒ ¡ t ttd dt t t  td   d t t ttt t   t  tt t td dt t t  td   tƒksJ ‚t	ˆ  ˆ ˆ ƒ ¡ t tt t t  tt t td dt t t  td   tƒksvJ ‚t	ˆ ˆˆƒ ¡  t t tt t  tt t td dt t t  td   tƒksÐJ ‚t	ˆˆt
ˆˆ  ƒˆƒ ¡ t ttt t d  ttd dt t t  td   d  tt t d td dt t t  td   tƒks`J ‚t	ˆ ˆƒ t ¡t ttd dt t t  td  tƒksžJ ‚t	ˆˆ ˆ ƒ t ¡t tt t t  tt t td dt t t  td   tƒksúJ ‚t	t
ˆ ˆƒt
ˆˆ ƒƒ}|jsJ ‚|jr*J ‚|js6J ‚t	ˆ ˆˆƒ}|jsNJ ‚|jsZJ ‚|jrfJ ‚t	ˆ ˆ t
ˆ ˆ ƒƒ}|jsˆJ ‚|js”J ‚|jr J ‚d S )Nr   r    rO   c                      s   ˆ ˆ ˆ S rR   r*   r*   ©rA   rB   rD   r*   r+   r,     r-   z'test_Series_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S rR   r*   r*   rÃ   r*   r+   r,     r-   c                      s   ˆ t g d¢ƒ S r/   r‡   r*   rk   r*   r+   r,     r-   TrP   F)r   r)   rš   r¨   rq   r6   r0   r4   r5   r   r   r   r>   rt   Úrewriter™   rœ   rž   )rF   ZS1ZS2ZS3r*   ©rA   rB   rC   rD   r+   Útest_Series_functions  sx    ($2ÿ "$(,*,:0("&ÿ6pÿ*@ÿ&tÿ
@ÿ
@ÿ
nÿ
>@ÿ
rÆ   c               
      sJ	  t tttgt t tggƒ‰ t t gt gt ggƒ‰t t ggƒ} t t t gt tggƒ‰t tt gt t ggƒ‰t t gtggƒ‰t tgt ggƒ}ˆ ˆ ˆ ttˆˆ ƒˆƒks¼J ‚ˆ ˆ | ˆ ttˆˆ ƒ|ˆƒksâJ ‚ˆ ˆ ˆ | ttˆˆ ƒˆ | ƒksJ ‚ˆˆ ˆˆ  ttˆˆƒˆˆ ƒks8J ‚ˆˆ  ˆ ˆ  ttˆ ˆƒtˆˆ ƒƒkslJ ‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡ ‡‡‡fdd„ƒ tt‡ ‡‡‡fd	d„ƒ ˆ ˆ |   t|  ˆˆ ƒks8J ‚ˆ ˆ  |  t| ˆ ˆ ƒksZJ ‚tt‡‡fd
d„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tˆˆ ddtˆˆ ƒ 	¡   kr˜t t
td  tt t d  td dt t t  td  d  t t t tt t  td dt t t  td  d   tt t d  tt t d td dt t t  td  d  tƒft
td tt t d  td dt t t  td  d  t t t tt t  td dt t t  td    tt t tt t  td dt t t  td    tt t d td dt t t  td  d  tƒffƒksžn J ‚tddt  dt dtd  dt  d  ggƒ}tdt gdtd  dt  d dt  ggƒ}t  |t¡t  |t¡ }}t||ƒ 	¡ t t
dtd d  td dt  d d  td d td dt  d d  tƒffƒks†J ‚t||ƒ 	¡  ¡ t t
ddtƒffƒks²J ‚t|  ˆ ˆ ddt|  ˆ ˆ ƒ 	¡   krŽt t
td tt t d  td dt t t  td  d  tt t d td dt t t  td  d   tt t d  tt t d td dt t t  td  d  tƒft
td  tt t d  td dt t t  td  d  t t t tt t  td dt t t  td    tt t tt t  td dt t t  td    tt t d td dt t t  td  d  tƒffƒks”n J ‚ttˆˆƒˆddttˆˆƒˆƒ 	¡   k	r@t t
t t t t t t t td dt t t  td     tt t td dt t t  td   tƒt
tt t ttt t   t  tt t tƒft
t t t t t t t td dt t t  td     tt t td dt t t  td   tƒt
t t t t t ttt t   t  tt t d tƒffƒ  k	r@ttˆˆƒˆƒ t ¡k	sFn J ‚d S )Nc                      s   ˆ ˆ t  S rR   ©r¼   r*   ©Útfm1Útfm2r*   r+   r,   U  r-   z+test_MIMOSeries_functions.<locals>.<lambda>c                      s   ˆ ˆ t  S rR   )r4   r*   rÈ   r*   r+   r,   V  r-   c                      s   ˆ ˆ t d  S rŠ   re   r*   ©Útfm4Útfm6r*   r+   r,   W  r-   c                      s   ˆ ˆ  d S r‹   r*   r*   rË   r*   r+   r,   X  r-   c                      s   dt d  ˆ ˆ  S )NrO   r"   r   r*   rÈ   r*   r+   r,   Y  r-   c                      s   ˆ  ˆ ˆ S rR   r*   r*   ©rÉ   rÊ   rÌ   r*   r+   r,   ]  r-   c                      s   ˆ ˆ ˆ ˆ S rR   r*   r*   ©rÉ   rÊ   rÌ   Útfm5r*   r+   r,   ^  r-   c                      s   ˆ ˆ ˆˆ  S rR   r*   r*   rÏ   r*   r+   r,   _  r-   c                      s   ˆ ˆ t  S rR   rÇ   r*   ©rÌ   rÐ   r*   r+   r,   f  r-   c                      s   ˆ ˆ t  S rR   ©r5   r*   rÑ   r*   r+   r,   g  r-   c                      s   ˆ ˆ  t d  S ri   re   r*   rÑ   r*   r+   r,   h  r-   c                      s   ˆˆ  d S r“   r*   r*   rÑ   r*   r+   r,   i  r-   c                      s   t d  d ˆ ˆ  S )Nr#   r   r   r*   rÑ   r*   r+   r,   j  r-   TrP   r    r   r#   )r   r¼   r»   rº   r   r   r   r>   r?   rt   r   rq   r6   r)   r0   r¨   rš   r   r½   r   rÄ   )Útfm3Útfm7Úmat_1Úmat_2Ztm_1Ztm_2r*   )rÉ   rÊ   rÌ   rÐ   rÍ   r+   Útest_MIMOSeries_functionsF  sŽ     &,*4"""Ž4ÿ®4ÿþÿ20Vÿ
,ÿ
‚4ÿ°4ÿþþÿ
~ÿÿÿp>ÿÿþ
ür×   c                     sÐ  t ttd  ttd   tt  ttd  ttd   tt t  tƒ‰ t tt t tt t tƒ‰t tt tt  t ttƒ‰t dtd dt	 t
 t  t
d  tƒ‰tdƒtƒ} tdƒtƒ}tˆ ˆƒ}|jˆ ˆfksÜJ ‚|jtksêJ ‚ttˆ ˆ ƒˆƒ}|jtˆ ˆ ƒˆfksJ ‚|jtks(J ‚t | dtƒ}t | dtƒ}tˆ t|| ƒˆƒ}|jˆ t|| ƒˆfkstJ ‚tˆ ˆˆƒ}|jˆ ˆˆfks–J ‚t||ƒ}|j||fks´J ‚|jtksÄJ ‚tˆ ˆƒ}	||	ksÜJ ‚||krêJ ‚tˆˆtˆˆ ƒƒ}
|
jˆˆtˆˆ ƒfksJ ‚tˆˆtˆˆ  ƒˆƒ}|jˆˆtˆˆ  ƒˆfksRJ ‚tt‡ ‡fdd„ƒ tt‡ ‡‡‡fd	d„ƒ tt‡‡fd
d„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ d S )Nr#   r    r!   r   r    r¡   c                      s
   t ˆ ˆƒS rR   ©r   r*   r£   r*   r+   r,   ¯  r-   z,test_Parallel_construction.<locals>.<lambda>c                      s   t ˆ ˆˆˆƒS rR   rØ   r*   r¤   r*   r+   r,   °  r-   c                      s   t ˆ  ˆƒS rR   rØ   r*   r‰   r*   r+   r,   ±  r-   c                      s   t dˆ ˆƒS ri   rØ   r*   r¦   r*   r+   r,   ²  r-   c                      s   t td tt  ˆˆ ƒS ri   )r   r)   r0   r*   r¥   r*   r+   r,   ³  r-   c                      s   t ˆ tg d¢ƒƒS r§   )r   r   r*   rk   r*   r+   r,   ´  r-   )r   r4   r)   r5   r6   r7   r0   r8   r=   rš   r¨   r   r   r3   r©   r   r   r>   r?   )rª   r«   Zp0r~   r®   rE   r   r   r‚   Zp5Zp6Zp7r*   r¤   r+   Útest_Parallel_construction‰  sD    H(


 rÙ   c                     s
  t tgtgtggƒ‰ t t gtgtggƒ‰t tggƒ‰t tgtgtggƒ‰t ttgttggƒ} t ttgttggƒ}t  tdt ggƒt¡‰tˆ ˆƒ}|jˆ ˆfks¦J ‚|j	t
ks´J ‚|j|j|jf  krÒdksØn J ‚ttˆˆ ƒˆƒ}|jtˆˆ ƒˆfksJ ‚|j	t
ksJ ‚|j|j|jf  kr4dks:n J ‚tˆ tˆˆƒˆƒ}|jˆ tˆˆƒˆfkshJ ‚|j	t
ksxJ ‚|j|j|jf  kršdks n J ‚tˆˆ ˆƒ}|jˆˆ ˆfksÂJ ‚|j|j|jf  krädksên J ‚t|| ƒ}|j|| fksJ ‚|j|j|jf  kr*dks0n J ‚tˆˆtˆ ˆƒˆ ƒ}|jˆˆtˆ ˆƒˆ fksjJ ‚|j|j|jf  krŒdks’n J ‚ttdd„ ƒ tt‡ ‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡fd	d„ƒ tt‡‡fd
d„ƒ d S )Nr   )r#   r   ©r    r    c                   S   s   t dƒS )Nr*   ©r   r*   r*   r*   r+   r,   Ü  r-   z0test_MIMOParallel_construction.<locals>.<lambda>c                      s   t ˆ ˆtƒS rR   )r   r¼   r*   rÈ   r*   r+   r,   ß  r-   c                      s   t ˆ ˆˆƒS rR   rÛ   r*   )rÉ   rÓ   rÌ   r*   r+   r,   â  r-   c                      s
   t ˆ ˆƒS rR   rÛ   r*   )rÓ   rÔ   r*   r+   r,   å  r-   c                      s   t dˆ ˆƒS ri   rÛ   r*   )rÉ   rÌ   r*   r+   r,   è  r-   c                      s   t td tt  ˆ ˆ ƒS ri   )r   r)   r0   r*   )rÊ   rÌ   r*   r+   r,   é  r-   )r   r¼   r»   rº   r½   r   r0   r   r3   r©   r)   r¾   r¿   rÀ   r   r   r?   r>   )rÐ   rÍ   Zp8Zp9Zp10Zp11Zp12Zp13r*   )rÉ   rÊ   rÓ   rÌ   rÔ   r+   Útest_MIMOParallel_construction·  sD    
$(((
("(rÜ   c                     sú	  t dtd dt t t  td  tƒ‰ t tdtƒ‰t tt t tt t tƒ‰t tt tt  t ttƒ‰t ttd  tt  t tt tƒ} ˆ ˆ ˆ t	ˆ ˆˆƒks¬J ‚ˆ ˆ ˆ |  t	ˆ ˆˆ| ƒksÎJ ‚ˆ ˆ ˆ |  t	ˆ ˆˆ |  ƒksôJ ‚ˆ ˆˆ  t	ˆ t
ˆˆƒƒksJ ‚ˆ ˆˆ  t	ˆ t
ˆˆƒ ƒks:J ‚ˆ  ˆ t	ˆ  ˆ ƒksXJ ‚ˆ ˆ  t
t ddtƒt	ˆ ˆƒƒks€J ‚ˆˆ ˆ  t
t	ˆˆƒˆ ƒks¢J ‚ˆ ˆ ˆ|   t
t	ˆ ˆƒˆ| ƒksÊJ ‚ˆˆ  |   t
t ddtƒt	ˆˆƒ|  ƒksüJ ‚ˆˆ ˆˆ   |  t	ˆˆt
ˆˆ ƒ| ƒks*J ‚ˆˆ ˆˆ   ˆ t	ˆˆt
ˆˆ ƒˆ ƒksZJ ‚ˆ ˆ |  ˆ|   t
t	ˆ ˆ| ƒt	ˆ| ƒƒksŒJ ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡fdd„ƒ t	ˆ ˆdd	t	ˆ ˆƒ ¡   kr>t ttd dt t t  td   d td dt t t  td  tƒksDn J ‚t	ˆ ˆt
ˆ  ˆƒdd	t	ˆ ˆt
ˆ  ˆƒƒ ¡   krBt ttt t  td dt t t  td  d  t t t td dt t t  td    tt t td dt t t  td    tt t td dt t t  td  d  tƒksHn J ‚t	ˆˆ ˆ dd	t	ˆˆ ˆ ƒ ¡   krt tt ttt t  td dt t t  td    t t t t td dt t t  td    tt t td dt t t  td   tƒksn J ‚t	ˆ ˆ d
d	t	ˆ ˆ ƒ ¡ kr>J ‚t	t
ˆ ˆƒt
ˆˆƒƒ ¡ t ttt t  td dt t t  td   ttt t   tt t td dt t t  td   tƒksÎJ ‚t	ˆ  ˆ ˆ ƒ ¡ t t t ttt t  td dt t t  td    t t t t td dt t t  td    tt t td dt t t  td   tƒks†J ‚t	ˆ ˆˆƒ ¡  t t t ttt t  td dt t t  td    t tt t td dt t t  td    tt t td dt t t  td   tƒks8J ‚t	ˆˆt
ˆˆ  ƒˆƒ ¡ t ttt t  td dt t t  td   ttt t   dt t dt  td dt t t  td    tt t td dt t t  td   tƒksüJ ‚t	ˆ ˆƒ t ¡t ttd dt t t  td   d td dt t t  td  tƒks^J ‚t	ˆˆ ˆ ƒ t ¡t tt ttt t  td dt t t  td    t t t t td dt t t  td    tt t td dt t t  td   tƒk	sJ ‚t	ˆ t	ˆˆƒƒt	ˆ ˆˆƒ  k	rJt	t	ˆ ˆƒˆƒk	sPn J ‚t	t
ˆ ˆƒt
ˆˆƒƒ}|j	srJ ‚|j	r~J ‚|j	sŠJ ‚t	ˆ ˆ ˆ ƒ}|j	s¦J ‚|j	r²J ‚|j	s¾J ‚t	ˆ ˆ t
ˆ ˆƒƒ}|j	sÞJ ‚|j	rêJ ‚|j	söJ ‚d S )Nr   r    rO   c                      s   ˆ ˆ ˆ S rR   r*   r*   rÃ   r*   r+   r,      r-   z)test_Parallel_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S rR   r*   r*   rÃ   r*   r+   r,     r-   c                      s   ˆ t g d¢ƒ S r/   r‡   r*   rk   r*   r+   r,     r-   TrP   F)r   r)   rš   r¨   rq   r6   r0   r4   r5   r   r   r   r>   rt   rÄ   r™   rœ   rž   )rF   ZP1ZP2ZP3r*   rÅ   r+   Útest_Parallel_functionsì  s¶    ($"&"$("(2.02"Jÿÿ
4,ÿ*ÿÿÿÿþÿ*j,ÿÿ&nÿ
l,ÿÿ
j,ÿÿ
hÿ,ÿÿ
Jÿ
^ÿ,ÿÿ
>rÝ   c               
      sö  t tt tt  t ttƒ} t ttd  tt  t tt tƒ}ttgtgt	ggƒ‰ tt g|gt ggƒ‰t|g| gtggƒ‰tt| gt|ggƒ‰tttgt	| ggƒ‰tt ggƒ}t| g|  g| ggƒ‰ˆ ˆ ˆ t
ˆ ˆˆƒ  krt
t
ˆ ˆƒˆƒksn J ‚ˆˆ  ˆ t
ˆˆ  ˆ ƒks.J ‚ˆˆ ˆ  | |   t
ˆˆ t| |ˆ  ƒƒksfJ ‚ˆ ˆ  ˆ  |  t
ˆ ˆ t|ˆ  ƒ ƒks”J ‚ˆˆ ˆ  ˆ t
ˆˆ ˆ  ˆƒks¼J ‚ˆ ˆ ˆ ˆ  t
ˆ ˆˆ ˆ  ƒksäJ ‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡‡fdd„ƒ tt‡ ‡‡fd	d„ƒ tt‡ ‡‡fd
d„ƒ tt‡ ‡‡fdd„ƒ ˆ ˆ | t|t
ˆ ˆƒƒksÂJ ‚ˆˆ | |  t| |t
ˆˆ ƒƒksðJ ‚ˆˆ  ˆ ||  tt
||ƒt
ˆˆ  ˆ ƒƒks&J ‚tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ t
ˆ ˆddt
ˆ ˆƒ ¡   krìt
ˆ ˆƒ t¡  krìtt t td dt t t  td   d td dt t t  td  tƒft t ttd   tt  ttt   tt tƒft t t t tt t td dt t t  td    tt t td dt t t  td   tƒffƒksòn J ‚d S )Nr    c                      s   ˆ ˆ t  S rR   )r»   r*   rÈ   r*   r+   r,   F  r-   z-test_MIMOParallel_functions.<locals>.<lambda>c                      s   ˆ ˆ t  S rR   rÒ   r*   rÈ   r*   r+   r,   G  r-   c                      s   ˆ ˆ t d  S rŠ   re   r*   ©rÊ   rÓ   r*   r+   r,   H  r-   c                      s   ˆ ˆ  d S r“   r*   r*   rÞ   r*   r+   r,   I  r-   c                      s   dt d  ˆ ˆ  S rŒ   r   r*   rÞ   r*   r+   r,   J  r-   c                      s   ˆˆ  ˆ S rR   r*   r*   )rÊ   rÓ   rÔ   r*   r+   r,   L  r-   c                      s   ˆˆ  ˆ S rR   r*   r*   )rÉ   rÊ   rÔ   r*   r+   r,   M  r-   c                      s   ˆ ˆ ˆ S rR   r*   r*   rÎ   r*   r+   r,   O  r-   c                      s   ˆ ˆ ˆ S rR   r*   r*   rÎ   r*   r+   r,   P  r-   c                      s   ˆ ˆ t  S rR   rÇ   r*   rÑ   r*   r+   r,   U  r-   c                      s   ˆ ˆ t  S rR   )r6   r*   rÞ   r*   r+   r,   V  r-   c                      s   ˆˆ  t d  S )Nr%   re   r*   rÞ   r*   r+   r,   W  r-   c                      s   ˆ ˆ ˆ d S r.   r*   r*   )rÉ   rÊ   rÓ   r*   r+   r,   X  r-   c                      s   dt d  ˆ ˆ  S rŒ   r   r*   )rÉ   rÓ   r*   r+   r,   Y  r-   c                      s   ˆˆ  ˆ ˆ S rR   r*   r*   )rÊ   rÓ   rÌ   rÐ   r*   r+   r,   \  r-   c                      s   ˆ ˆ ˆ S rR   r*   r*   )rÉ   rÊ   rÐ   r*   r+   r,   ^  r-   TrP   r   )r   r4   r0   r5   r)   r6   r   r¼   r»   rº   r   r   r   r>   r?   rt   rÄ   rq   r¨   rš   )rD   rF   rÍ   r*   )rÉ   rÊ   rÓ   rÌ   rÐ   rÔ   r+   Útest_MIMOParallel_functions4  sZ    $:"8.((".6"ÿ
PJÿ,ÿÿþrß   c                     sš  t dtd dt t t  td  tƒ‰ t tdtƒ‰t tt t tt t tƒ‰t tt tt  t ttƒ‰t ttd  tt  t tt tƒ‰t tt tt tƒ} t	t ddtƒˆ ˆ ˆ ƒ}|j
t ddtƒtˆ ˆˆƒdfksâJ ‚|jt ddtƒksøJ ‚|jtˆ ˆˆƒksJ ‚|jtks J ‚t	ˆ ˆˆ ƒ}|j
ˆ tˆˆƒdfksJJ ‚|jˆ ksZJ ‚|jtˆˆƒkspJ ‚|jtks€J ‚t	ˆ ˆ ˆƒ}|j
tˆ ˆƒˆdfksªJ ‚|jtˆ ˆƒksÀJ ‚t	ˆ| ƒ}|j
ˆ| dfksàJ ‚|jˆksðJ ‚|jtks J ‚t	ˆt ddtƒƒ}|j
ˆt ddtƒdfks0J ‚|jtks@J ‚|t	ˆƒksRJ ‚t	t ddtƒˆƒ}|j
t ddtƒˆdfks‚J ‚|jtks’J ‚t	ˆ|  t ddtƒƒ }|j
tt ddtƒtˆ| ƒƒt ddtƒ dfksÞJ ‚|jtt ddtƒtˆ| ƒƒksJ ‚tt‡ ‡‡fdd„ƒ tt‡ fdd„ƒ ttdd„ ƒ ttdd„ ƒ tt‡‡‡fd	d„ƒ tt‡ ‡fd
d„ƒ tt‡ fdd„ƒ tt‡‡fdd„ƒ d S )Nr   r    rO   c                      s   t ˆ ˆˆ ƒS rR   ©r   r*   ©rA   rB   rC   r*   r+   r,   “  r-   z,test_Feedback_construction.<locals>.<lambda>c                      s   t ˆ tg d¢ƒƒS r/   )r   r   r*   rˆ   r*   r+   r,   ”  r-   c                   S   s   t tddtƒtd ƒS rŠ   )r   r   r)   r*   r*   r*   r+   r,   •  r-   c                   S   s
   t ddƒS rŠ   rà   r*   r*   r*   r+   r,   –  r-   c                      s   t ˆ ˆˆ ƒS rR   rà   r*   )rB   rD   rF   r*   r+   r,   ˜  r-   c                      s   t ˆˆ dƒS )Ng      ø?rà   r*   ©rA   rB   r*   r+   r,   ™  r-   c                      s   t ˆ ˆ d  ƒS )NrO   rà   r*   rˆ   r*   r+   r,   š  r-   c                      s
   t ˆ ˆƒS rR   rà   r*   rh   r*   r+   r,   ›  r-   )r   r)   rš   r¨   rq   r6   r0   r4   r5   r   r3   r   Úsys1Úsys2r©   r   r?   r>   )rG   Úf1Úf2Úf3Úf4Zf5Zf6Zf7r*   )rA   rB   rC   rD   rF   r+   Útest_Feedback_constructionh  sR    ($$
4$ré   c               	      s6  t ddtƒ‰ t dtd dt t t  td  tƒ‰t tdtƒ‰t tt t tt t tƒ‰t tt tt  t ttƒ‰t ttd  tt  t tt tƒ‰t tt tt tƒ} ˆ ˆ ˆ  t	ˆ ˆƒksÊJ ‚ˆ ˆ ˆˆ ˆ   t	ˆ ˆˆ ˆ ƒksôJ ‚ˆˆ ˆˆ ˆ   t	ˆˆˆ ƒksJ ‚ˆˆ ˆ ˆˆ   t	ˆˆ ˆ ƒksDJ ‚ˆˆ ˆ ˆˆ ˆ   t	ˆˆ ˆƒkspJ ‚ˆˆ ˆ ˆˆ ˆ ˆ   t	ˆˆ ˆˆ ƒt	ˆˆ ˆˆ ƒfv s¶J ‚ˆt ddtƒˆ|    t	ˆ| ƒksÞJ ‚ˆˆ ˆ  t	ˆˆ ƒksúJ ‚t
t‡‡‡fdd„ƒ t
t‡‡‡‡fdd„ƒ t
t‡ ‡‡‡fdd„ƒ t	ˆ ˆˆ ˆ ƒ ¡ t tt t td dt t t  td   ttt t  tt t td dt t t  td    tƒksÈJ ‚t	ˆ ˆˆ ˆ ƒjdttt t  tt t td dt t t  td    d  ks&J ‚t	ˆˆˆ ƒ ¡ t tt t td dt t t  td   ttt t  tt t td dt t t  td    td dt t t  td   tƒksÊJ ‚t	ˆˆˆ ƒjdttt t  tt t td dt t t  td    d  ks$J ‚t	ˆˆ ˆƒ ¡ t ttt  td dt t t  td   tt ttd   tt   tt td dt t t  td    td dt t t  td   tƒksÒJ ‚t	ˆˆ ˆdƒjdt t ttd   tt   tt td dt t t  td    d  ks:J ‚t	ˆ| ƒ ¡ t ttt  tt tt  t  tttt  t t tt tt  t    tƒks J ‚t	ˆ|  t ddtƒƒ ¡  t t t t  tt  tt tt  t  ttt  ttt  t t tt tt  t    tƒks(J ‚t	ˆ ˆ ƒ ¡ t ddtƒksHJ ‚t	ˆˆˆ ƒ t ¡t tt td dt t t  td   tt ttd   tt   tt td dt t t  td    td dt t t  td   tƒksôJ ‚t	t ddtƒˆƒ t ¡t ttt t tt  t tƒks2J ‚d S )Nr   r    c                      s   ˆ ˆ ˆ dˆ ˆ ˆ   S rŠ   r*   r*   rá   r*   r+   r,   °  r-   z)test_Feedback_functions.<locals>.<lambda>c                      s   ˆ ˆ ˆ ˆ ˆ S rR   r*   r*   )rA   rB   rC   rF   r*   r+   r,   ±  r-   c                      s   ˆˆ ˆ ˆˆ ˆ   S rR   r*   r*   r¤   r*   r+   r,   ²  r-   )r   r)   rš   r¨   rq   r6   r0   r4   r5   r   r   r?   r>   rt   ÚsensitivityrÄ   )rG   r*   )r@   rA   rB   rC   rD   rF   r+   Útest_Feedback_functionsž  sŽ    ($*((,F(:*ÿÿÿ
Bÿ
:*ÿÿÿÿ
Bÿ
H&ÿÿÿÿ
Nÿ
Pÿ
dÿ
 D&ÿÿÿÿ
ÿrë   c                  C   s(  t dttƒ} t ttd d tƒ}t ttd tƒ}t ttd d tƒ}t| |g||ggƒ}t||g|| ggƒ}t||g| |ggƒ}t||ƒ}|j||dfksžJ ‚|j|ks¬J ‚|j|ksºJ ‚|jtksÈJ ‚|jdksÖJ ‚|  |ksæJ ‚t||dƒ}|j||dfksJ ‚|j|ksJ ‚|j|ks(J ‚|jtks8J ‚|jdksHJ ‚t|t	||ƒƒ}	|	j|t	||ƒdfkstJ ‚|	j|ks„J ‚|	jt	||ƒksšJ ‚|	jtksªJ ‚|	jdksºJ ‚t
ddt gddggƒ}
t |
t¡ }}t||ƒ}|j||dfksJ ‚|j|j  kr|ks$n J ‚d S )Nr   r#   r    rO   r   )r   r)   r   r   r3   rã   rä   r©   Úsignr   r   r½   )rA   rB   rC   rD   r³   rµ   r¶   rå   ræ   rç   Úmatrã   Ú
controllerrè   r*   r*   r+   Útest_MIMOFeedback_constructionÐ  s>    

rï   c                     s¨  t dttƒ‰ t ttd d tƒ‰t ttd tƒ} t ttd d tƒ}t ddtƒ}t dtd tƒ}tˆ ˆg| |ggƒ‰tˆ| g|ˆ ggƒ‰tjtdƒtd‰tˆ |g||ggƒ‰t|  | g| |ggƒ‰t|  ggƒ‰t| |ggƒ‰tt‡ ‡fdd„ƒ tt‡‡‡fdd„ƒ tt‡‡fd	d„ƒ tt‡fd
d„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡fdd„ƒ tjtdƒtd‰	tt‡‡	fdd„ƒ d S )Nr   r#   r    rO   ©r©   c                      s
   t ˆ ˆƒS rR   ©r   r*   râ   r*   r+   r,   	  r-   z*test_MIMOFeedback_errors.<locals>.<lambda>c                      s   t tˆ ˆƒˆƒS rR   )r   r   r*   )r³   rµ   r¶   r*   r+   r,   
  r-   c                      s   t ˆ ˆdƒS rŠ   rñ   r*   )r³   Útfm_6r*   r+   r,     r-   c                      s
   t ˆ ˆ ƒS rR   rñ   r*   )Útfm_7r*   r+   r,     r-   c                      s   t ˆ ˆdƒS )Nrd   rñ   r*   r´   r*   r+   r,     r-   c                      s   t ˆˆ dƒS rŠ   rñ   r*   ©rÁ   r·   r*   r+   r,     r-   c                      s   t ˆ ˆ ƒS rR   rñ   r*   rô   r*   r+   r,     r-   c                      s   t ˆ ˆ dƒS rŠ   rñ   r*   r¹   r*   r+   r,     r-   c                      s   t ˆ ˆdƒS rŠ   rñ   r*   )r³   Útfm_8r*   r+   r,     r-   )	r   r)   r   r½   r   r   r?   r>   r0   )rC   rD   rF   rG   r*   )
rA   rB   r³   rµ   r¶   rÁ   r·   rò   ró   rõ   r+   Útest_MIMOFeedback_errors÷  s.    rö   c            
      C   sR  t dttƒ} t ttd tƒ}t ddtƒ}t dtd tƒ}tjtdƒtd}t| |g||ggƒ}t| |g||ggƒ}t| |g| | ggƒ}t||ƒ}t|t|| ƒdƒ}	|jtt	j
dgdt	j
ggƒksÊJ ‚|	jtdtd  td  td t d  dtd  td  td t d  gtd  tggƒks0J ‚| ¡ tt ddt tƒt ddtƒft ddtƒt ddtƒffƒ  kr†| t¡ksŒn J ‚|	jd	d
dtt td  dtd   dtd   td  td dtd   dtd   dtd   t tƒt dtd  dtd   td t d tƒft ddtƒt td  t dtƒffƒksPJ ‚|	jd	dtt tdtd  td   td t d  dtd  td  td t d   ttd t d d  tƒt dtd  dtd   td t d tƒft ddtƒt td  t dtƒffƒksJ ‚|	 ¡ tt tdtd  tdt d   d  td t d tƒt dtd  td  td t d tƒft ddtƒt tdt  dtƒffƒks®J ‚|	jd
dtt td  t td t d tƒt dtd  dtd   td t d tƒft ddtƒt td  t dtƒffƒks4J ‚| ¡  |  ¡ ksNJ ‚d S )Nr   rO   r    rð   r   rd   r!   r#   FT)Úcancelrn   r"   )r÷   )rn   )r   r)   r   r½   r   r   r   rê   r   r	   ZHalfrt   rÄ   )
rA   rB   rC   rD   r³   rµ   r¶   rÁ   ZF_1ZF_2r*   r*   r+   Útest_MIMOFeedback_functions  st    
"("ÿÿ
ÿ

ÿÿÿ
ý^*ÿ ÿÿ

*"ÿÿ*ÿ þÿ
8&ÿÿÿ

N ÿÿ
rø   c                     s  t ttd  tt  t tt tƒ‰t tt tt  t ttƒ‰ tt ggƒ} | j| j	| j
f  krldksrn J ‚| jtttt ƒƒƒksŽJ ‚| jtksœJ ‚ttt gtˆggƒ}|j|j	|j
f  krÐdksÖn J ‚|jttttt ƒttˆƒƒƒksüJ ‚|jtksJ ‚tttgtˆ gˆ tggƒ}|j|j	|j
f  krLdksRn J ‚|jtttttƒttˆ ƒtˆ tƒƒƒks„J ‚|jtks”J ‚tt‡ fdd„ƒ tt‡ ‡fdd„ƒ tt‡fdd„ƒ tt‡fd	d„ƒ ttd
d„ ƒ ttdd„ ƒ tt‡fdd„ƒ ttdd„ ƒ d S )Nr    )r   r   rÚ   )r#   r    c                      s   t tgtgˆ ggƒS rR   ©r   r¼   r»   r*   rf   r*   r+   r,   U  r-   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>c                      s   t tˆ gtˆggƒS rR   ©r   r¼   rº   r*   rh   r*   r+   r,   V  r-   c                      s   t tgtˆ ggƒS rR   rú   r*   rg   r*   r+   r,   Y  r-   c                      s   t ttgˆ ggƒS rR   rú   r*   rg   r*   r+   r,   Z  r-   c                   S   s   t ttgttddgƒggƒS ©Nr   r    )r   r¼   r»   rº   r   r*   r*   r*   r+   r,   ]  r-   c                   S   s   t ttddgƒgttggƒS rû   )r   r¼   r   rº   r»   r*   r*   r*   r+   r,   ^  r-   c                      s   t ttˆ gƒS rR   rù   r*   rg   r*   r+   r,   a  r-   c                   S   s
   t tgƒS rR   )r   r¼   r*   r*   r*   r+   r,   b  r-   )r   r5   r)   r6   r4   r0   r   rº   r¾   r¿   rÀ   r3   r   r©   r¼   r»   r   r>   r?   )Ztfm3_rÐ   rÔ   r*   rh   r+   Ú(test_TransferFunctionMatrix_constructionA  s,    $$$&(2rü   c               
   C   s$  t ttd  tt  t tt tƒ} tttd  td  td d  dgtttd  ttd d   ggƒ}tdt d td d  ggƒ}tddgddggƒ}t |t¡tt ttd  td  td d tƒt ddtƒgt tdtƒt tttƒggƒksüJ ‚t |t¡tt dt d td d tƒggƒks2J ‚t |t¡tt ddtƒt ddtƒgt ddtƒt ddtƒggƒksxJ ‚tt	gt
ggƒ}| tt	 gt
 ggƒks¨J ‚tt	t
tg| t	 t ggƒ}| tt	 t
 t g|  t	tggƒksðJ ‚t |t¡}tt tt t ttd  tƒt tt ttd t  tƒggƒ}| td¡tt ttd  td  td d tƒt ddtƒgt ddtƒt dttƒggƒks˜J ‚| tdi¡tt ttd  td  td d tƒt ddtƒgt ddtƒt dttƒggƒksøJ ‚| tdtdi¡tt ttd  td  td d tƒt ddtƒgt ddtƒt dttƒggƒks\J ‚| td¡tt dt t ttd  tƒt dt tt td   tƒggƒks®J ‚| td¡tt tt t td tƒt tt t td  tƒggƒksøJ ‚| td¡tt dttd  tƒt tt ttd  tƒggƒks<J ‚| tdtdtti¡tt tt td tƒt tt td  tƒggƒksˆJ ‚| ¡ tt ttd  td  td d tƒt tdtƒgt ddtƒt tttƒggƒksâJ ‚| ¡ tt tt t ttd  tƒgt tt tt td   tƒggƒks2J ‚| ¡  ¡ |ksHJ ‚| ¡  ¡ |ks^J ‚| ¡ tdƒ d tdƒt d  tdƒ d tdƒt d  tdƒd tdƒt d  tdƒd tdƒt d  gg gg dgggksêJ ‚| ¡ ddgttƒttƒ gggksJ ‚| ¡ tt ttd td  ƒ  tt ttd td  ƒ  gg t t ggt gtt ttd td  ƒ  tt ttd td  ƒ  gt t gggksºJ ‚| ¡ g d¢g gg g ggksÜJ ‚| ¡ dgdgggksøJ ‚| ¡ g g tt ggt dt  tdt t td  ƒdt   t dt  tdt t td  ƒdt   gg tt gggks~J ‚ttt dtd d tƒt td dt  d dtƒt dttƒƒggƒ}ttt td d dtd  td  dt  d tƒt dtd  dtd  td  dt  d tƒƒggƒ}	| ¡ tt td dt  d ttd d  tƒggƒksjJ ‚|	 ¡ tt ddtd  td  dt  d tƒggƒks¨J ‚| ¡ t ttd  td  td d tƒt ddtƒt tdtƒt tttƒgksúJ ‚| ¡ t tt t ttd  tƒt tt tt td   tƒgk	sBJ ‚| ¡ tt dtd d tƒt td dt  d dtƒt dttƒƒgk	sŽJ ‚|	 ¡ tt td d dtd  td  dt  d tƒt dtd  dtd  td  dt  d tƒƒgk
s J ‚| ¡ tt ttd	  td
  td d
 tƒt ddtƒft d
t dtƒt tttƒffƒk
s^J ‚| tdtdtdi¡ ¡ tt dttƒt dt dtd  d tƒffƒk
s¬J ‚tt td td  t ttd  tƒt td td  td td  tƒggƒ}
|
 ¡ t|
ƒ  krRtt td  td  d td tƒt td td tƒffƒksXn J ‚| ¡ tt td dtd   dt  td d tƒt ddtƒft tdtƒt tttƒffƒksºJ ‚|
 ¡ tt td td  t td  t tƒt td dt  d td dt  d tƒffƒks J ‚d S )Nr    r   r#   r!   r$   r   )rO   r   r#   r"   r[   rZ   rY   gTã¥›Ä 	@g
×£p=
@gÖÿ9Ì—@gTã¥›Ä @)r   r5   r)   r6   r4   r   r0   r   r½   r¼   r»   rº   r9   rq   ro   Z	transposeZ
elem_polesr   r   r¨   rš   Z
elem_zerosr   r   rt   Z_flatrp   r   rn   )rF   rÕ   rÖ   Zmat_3rÉ   rÊ   ZH_1ZH_2ZH_3ZH_4ZH_5r*   r*   r+   Ú%test_TransferFunctionMatrix_functionsd  sž    $"þ 
0ÿÿ
"ÿ

ÿÿ
 ,>^`dRJDLZPxÿ*NLÿ"fÿDj>>RHLrNÿ
ÿÿ
$"ÿ:ÿ8ÿÿ
Vÿrý   c                  C   sž   t dtt t tƒ} t| tƒ\}}t t|d  |d  t|d  |d  tƒ}t tt t ttt dt   tt  dt  tƒ}tj||  ¡ j	ksšJ ‚d S )Nr   r   r    )
r   r9   r)   r:   r   ÚTr	   ÚZeror   r1   ©r@   ZnumZZdenZZtf_test_bilinearZtf_test_manualr*   r*   r+   Útest_TransferFunction_bilinearÉ  s
    ,4r  c                  C   sŠ   t dtt t tƒ} t| tƒ\}}t t|d  |d  t|d  |d  tƒ}t tt ttt t  t tƒ}tj||  ¡ j	ks†J ‚d S )Nr   r   )
r   r9   r)   r:   r   rþ   r	   rÿ   r   r1   r   r*   r*   r+   Ú#test_TransferFunction_backward_diffÔ  s
    , r  N)[Zsympy.core.addr   Zsympy.core.functionr   Zsympy.core.mulr   Zsympy.core.numbersr   r   r   Zsympy.core.powerr   Zsympy.core.singletonr	   Zsympy.core.symbolr
   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Zsympy.matrices.denser   Zsympy.polys.polytoolsr   Zsympy.polys.rootoftoolsr   Zsympy.simplify.simplifyr   Zsympy.core.containersr   Zsympy.matricesr   r   Zsympy.physics.controlr   r   r   r   r   r   r   r   r   r   Zsympy.testing.pytestr   r9   r^   r:   r)   r;   r<   r0   rq   r4   r5   r6   r7   r8   r=   rl   rš   r¨   rþ   r¼   r»   rº   rN   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+   Ú<module>   sZ   0,(a G"(+,>C.5H462'"(#e