U
    —9%eê  ã                   @   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.t‚| jtd t d ksHt‚| jtd td t d tfkslt‚t td td tƒ}|jtd ks’t‚|jtd ks¤t‚|jtd td tfksÀt‚t td td d tƒ}|jtd ksêt‚|jtd d kst‚|jtd td d tfks$t‚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Žt‚t td td  td td  tƒ}|jtd td  ksÎt‚|jtd td  td td  tfksüt‚t td td tƒ}|jtd td tfks.t‚t td dt tƒ}|jtd dt tfks`t‚t td td tƒ}|jtd td tfks’t‚t ddtƒ}|jdks®t‚|jdks¾t‚|jddtfksÔt‚t ddtƒ}	|	jdksðt‚|	jdks t‚|	jddtfkst‚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Œt‚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t‚|  |  kr&|    ks,n t‚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¾t‚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@t‚||ksNt‚t tt t ttd  tt  t
 tƒ}|jttt  ksŽt‚|jt
tt  ttd   ks²t‚|jttt  t
tt  ttd   tfksät‚t dtd t d tƒ}|jdtd t d tfkst‚t ddtƒ}|jddtfks@t‚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¢t‚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t‚tdƒ\}}}}t ||t  |t  td d| t  |d  tƒ}|j|t |t  | ksht‚|j|t |t  | |d d| t  td  tfks¦t‚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*   úc/var/www/html/Darija-Ai-API/env/lib/python3.8/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dddgƒttƒS ©Nr   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ÚAssertionErrorÚ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 >rO   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@t
‚tt‡ fdd„ƒ tt‡fdd„ƒ t ˆt¡tttd  dt  td d tƒksšt
‚t ˆt¡tttd  dt  td d tƒksÐt
‚tt‡fdd„ƒ t ˆt¡td	dtƒks t
‚t |t¡tddt  ddt   d
dt  ddtd    tƒksJt
‚t |t¡td
td  dtd   d td td
  tƒksŒt
‚||ksšt
‚t |t¡tdtd  dt  d td d tƒksÔt
‚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 t
‚ttd td  td td  tƒ}ttd td tƒ}| ¡ t|ƒ  kr˜|ksžn t
‚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Èt
‚| ¡ ttd dt  d td dt  d tƒkst
‚| ¡ |kst
‚| ¡ t||tƒks.t
‚| ¡ tttt  ttt   |tƒks\t
‚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t
‚| tdtdtdtdtdi¡ ¡ |ks0t
‚| ¡ |ksBt
‚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øt
‚|! |d|d|d|di¡ ¡ |"ks t
‚|# ¡ |"ks2t
‚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êt
‚|$ tdtdtdtdi¡ ¡ |%k	st
‚|& ¡ |%k	s$t
‚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˜t
‚|' tdtdi¡ ¡ |(k	s¸t
‚|) ¡ |(k	sÊt
‚|	 ¡ dk	sÜt
‚| ¡ tddƒk	sôt
‚|! ¡ dk
st
‚|( ¡ dk
st
‚|# ¡ dk
s*t
‚tdttƒ ¡ tk
sDt
‚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Êt
‚| ¡ g k
sÜt
‚| ¡ ddgk
sòt
‚|) ¡ tgkst
‚|' ¡ t t gks t
‚|% ¡ dt gks8t
‚t |" ¡ ƒt ddd t  dd t  gƒksht
‚t | ¡ ƒt d!d"t  d!d"t  gƒks–t
‚|+ ¡ ttddƒ ttddƒ  tttddƒ  t ttddƒ  gksät
‚|, ¡ 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¬t
‚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ksTt
‚| #¡ d%ksft
‚| #¡ dksxt
‚|" #¡ dksŠt
‚| #¡ d%ksœt
‚|1 #¡ d%ks®t
‚|2 #¡ d%ksÀt
‚|, #¡ dksÒt
‚|) #¡ d ksät
‚|' #¡ d ksöt
‚| $¡ ddgkst
‚| $¡ g kst
‚| $¡ ddgks4t
‚|) $¡ 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t
‚|' $¡ 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˜t
‚t |% $¡ ƒt d*d+t%d,td  d ƒ  d+t%d,td  d ƒ d* gƒksæt
‚|* $¡ 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sdt
‚|- $¡ 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,t
‚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 t
‚ˆ tdt d dt tƒksÄt
‚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 t
‚ˆˆ ˆ  &¡ ˆd   kr¢t'ˆdƒ  kr¢|"ks¨n t
‚ˆd t'ˆdƒ  krÒtddtƒksØn t
‚t(ˆƒ &¡ d ˆd   kr"t'ˆdƒ  kr"ttd td tƒks(n t
‚ˆˆ  &¡ d ˆd.   kr~t'ˆd.ƒ  kr~tdt d td d d tƒks„n t
‚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t
‚|j* td¡|j+ td¡  krFdksLn t
‚| td¡ttd td dt  d tƒks~t
‚|4 td¡ttd dtƒks t
‚ˆ ,tti¡tdt d dt tƒksÌt
‚tt-‡fd2d„ƒ ˆ ttdƒ¡ˆksøt
‚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\t
‚|5 tt¡tttt  ttt   tt t tƒks–t
‚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<t
‚|7 ¡ t td tdt d	t  dddddksrt
‚|8 ¡ t t.dƒtddddddksœt
‚|9 ¡ tddddks¸t
‚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 rS   rT   r*   )Úexpr_3r*   r+   r,   Ž   r-   c                      s
   t  ˆ ¡S rS   rT   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   Úxr5   Ú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   r5   r_   Úzerosr*   r*   r*   r+   r,     r-   éþÿÿÿc                      s   ˆ t d t  d  S )Nr    r   ©r)   r*   ©rE   r*   r+   r,   %  r-   c                      s   ˆ t  S rS   rf   r*   ©rG   r*   r+   r,   &  r-   c                      s   ˆ ˆ S rS   r*   r*   ©rE   rG   r*   r+   r,   '  r-   c                      s   ˆ   ttdƒi¡S ©Nr    )Úxreplacer0   r   r*   ©rD   r*   r+   r,   2  r-   )/r   r   r)   r0   r   r   ÚtauZto_exprrU   r   r2   r   ÚZeroDivisionErrorr?   r   r7   r6   r5   r8   r9   r>   ÚexpandÚsubsÚevalfr
   Zdc_gainr   r   r_   Úkr`   r   Ústrr   ÚNotImplementedErrorZ	is_stablerd   r   ÚdoitÚpowr   r   r1   r3   rk   r@   r	   ):Zexpr_1Zexpr_5Zexpr_6rA   ÚdelayZexpr_7ZH1ZH2Zexpr_8Ztf0r:   rB   r;   ÚG1ÚG2Úcr=   ÚeÚfr<   ÚG3ÚG4Úp1Úp2ZSP1Zexpect1Zexpect1_Úc1Zd0Zd1Zd2Úp3Úp4ZSP2Zexpect2Zexpect2_ZSP3Zexpect3Zexpect3_ZSP4Zexpect4Zexpect4_Ztf_Z_tfZTF_Z_TFÚqÚrrb   Z	stable_tfZ
stable_tf_rC   rH   rI   rJ   rK   rL   rM   r*   )rV   rW   rX   rD   rE   rG   r+   Útest_TransferFunction_functions}   sl    4,$66
6ÿ

.ÿ

&ÿ
$"&$& 4,tXH@>:.(((,&(($(400$(    0.ND    þ$$$H,ÿPÿN8ÿ&ÿB0ÿD    þ .$ <@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sjt‚ˆˆ tˆˆƒks€t‚ˆ ˆ ˆ tˆ ˆˆƒks t‚ˆˆˆ  tˆˆˆƒks¼t‚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sRt‚ˆˆ tˆˆ ƒkslt‚ˆ ˆ tˆ ˆ ƒksŠt‚ˆˆ ˆ tˆˆ ˆƒksªt‚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    rz   F©Zcommutativec                      s   ˆ t dddgƒ S r/   ©r   r*   ©rB   r*   r+   r,   P  r-   z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>c                      s   ˆˆ  S rS   r*   r*   )rz   rC   r*   r+   r,   Q  r-   c                      s   ˆ ˆ S rS   r*   r*   ©rD   rE   r*   r+   r,   R  r-   c                      s   ˆ t d  S ©Nr   rf   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 dddgƒ S r/   rˆ   r*   r‰   r*   r+   r,   ]  r-   c                      s   ˆ ˆ S rS   r*   r*   rŠ   r*   r+   r,   ^  r-   c                      s   ˆ t d  S r‹   rf   r*   r‰   r*   r+   r,   _  r-   c                      s   ˆ d S rŒ   r*   r*   r‰   r*   r+   r,   `  r-   c                      s   t d ˆ  S )Nr"   rf   r*   )rC   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   r2   r
   r   r?   r*   r*   )rz   rB   rC   rD   rE   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 t‚ˆ  ˆ tˆ  ˆƒksºt‚ˆ ˆ ˆ  tˆ ˆˆ ƒksÞt‚ˆ  ˆ  ˆ  ˆ  tˆ  ˆ ˆ ˆ ƒkst‚ˆˆ tˆˆƒks*t‚ˆ ˆ ˆˆ   tˆ ˆt ddtƒtˆˆƒƒks^t‚ˆ ˆ ˆˆ  tˆ ˆtˆˆƒƒks†t‚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%   rP   rz   Fr‡   c                      s   ˆ t dddgƒ S r/   rˆ   r*   ©r}   r*   r+   r,   y  r-   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>c                      s   ˆ ˆ S rS   r*   r*   )rx   rz   r*   r+   r,   z  r-   c                      s   ˆ ˆ S rS   r*   r*   ©r}   ÚG5r*   r+   r,   {  r-   c                      s   ˆ t d  S r‹   rf   r*   ©r’   r*   r+   r,   |  r-   c                      s   dˆ  S ©Nr$   r*   r*   r“   r*   r+   r,   }  r-   c                      s   ˆ t dddgƒ S r/   rˆ   r*   r   r*   r+   r,     r-   c                      s   ˆ d S r.   r*   r*   )ÚG6r*   r+   r,   €  r-   c                      s   ˆ ˆ S rS   r*   r*   r‘   r*   r+   r,     r-   c                      s   ˆ d S rj   r*   r*   r“   r*   r+   r,   ‚  r-   c                      s   ˆ t d  S rj   rf   r*   r“   r*   r+   r,   ƒ  r-   c                      s   t dt d   ˆ  S )Nr!   r    rf   r*   )ry   r*   r+   r,   „  r-   c                      s   dˆ  S r.   r*   r*   )r~   r*   r+   r,   …  r-   c                      s   ˆ ˆ S rS   r*   r*   )r’   r•   r*   r+   r,   †  r-   c                      s
   ˆ  ˆ S rS   r*   r*   )r}   r~   r*   r+   r,   ‡  r-   c                      s   ˆdˆ   S r‹   r*   r*   )r•   ÚG7r*   r+   r,   ˆ  r-   c                      s   ˆˆ ˆ  S rS   r*   r*   ©r’   r•   r–   r*   r+   r,   ‰  r-   c                      s   ˆˆˆ ˆ   S rS   r*   r*   r—   r*   r+   r,   Š  r-   )	r   r)   r0   r   r2   r   r
   r   r?   r*   r*   )rx   ry   r}   r~   r’   r•   r–   rz   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Èt‚|jsÒt‚|jsÜt‚|jræt‚d S ©Nzomega_o, zeta, taur    r#   r!   )r
   r   r)   r0   r:   r;   Ú	is_properr2   )rN   Úzetarm   rx   ry   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Èt‚|jrÒt‚|jsÜt‚|jræt‚d S r™   )r
   r   r)   r0   r:   r;   Úis_strictly_properr2   )rN   r›   rm   rB   rC   rD   rE   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Èt‚|jsÒt‚|jrÜt‚|jræt‚d S )Nztau, omega_o, zetar    r#   r!   )r
   r   r)   r0   r:   r;   Úis_biproperr2   )rm   rN   r›   rB   rC   rD   rE   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Üt‚|jtksêt‚ttˆ ˆ ƒˆƒ}|jtˆ ˆ ƒˆfkst‚|jtks(t‚t | dtƒ}t | dtƒ}tˆ t||ƒˆƒ}|jˆ t||ƒˆfkspt‚tˆ ˆˆƒ}|jˆ ˆˆfks’t‚t||ƒ}|j||fks°t‚|jtksÀt‚tˆˆtˆˆ  ƒˆƒ}	|	jˆˆtˆˆ  ƒˆfksöt‚tˆ ˆƒ}
||
kst‚||krt‚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 rS   ©r   r*   ©rA   rD   r*   r+   r,   Ô  r-   z*test_Series_construction.<locals>.<lambda>c                      s   t ˆ ˆˆˆƒS rS   r£   r*   ©rA   rC   rD   rE   r*   r+   r,   Õ  r-   c                      s   t ˆ ˆ ƒS rS   r£   r*   ©rC   rD   r*   r+   r,   Ö  r-   c                      s   t dˆ ˆƒS rj   r£   r*   ©rA   rE   r*   r+   r,   ×  r-   c                      s   t td tt  ˆˆ ƒS rj   )r   r)   r0   r*   r¦   r*   r+   r,   Ø  r-   c                      s   t ˆ tddddgƒƒS ©Nr   r    r#   r!   )r   r   r*   rl   r*   r+   r,   Ù  r-   )r   r5   r)   r6   r7   r8   r0   r9   r>   r›   Úwnr   r   r4   r2   Úvarr   r   r?   r@   )ÚinpÚoutÚs0Ús1Útf3_rF   Ú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t‚|jtks*t‚|j|j|jf  krLdksRn t‚tˆˆˆƒ}|jˆˆˆfkstt‚|jtks„t‚|j|j|jf  kr¦dks¬n t‚tˆtˆ | ƒˆƒ}|jˆtˆ | ƒˆfksât‚|j|j|jf  krdks
n t‚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 rS   ©r   r*   r*   r*   r+   r,   ö  r-   z.test_MIMOSeries_construction.<locals>.<lambda>c                      s
   t ˆˆ ƒS rS   r²   r*   )Útf_1Útfm_1r*   r+   r,   ù  r-   c                      s   t ˆ ˆˆ  ƒS rS   r²   r*   ©r´   Útfm_2r*   r+   r,   ý  r-   c                      s
   t ˆ ˆƒS rS   r²   r*   )Útfm_3Útfm_5r*   r+   r,      r-   c                      s   t dˆ ˆƒS rj   r²   r*   ©r¶   r·   r*   r+   r,     r-   c                      s   t td tt  ˆ  ˆƒS rj   )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   r5   r)   r6   r7   r8   r0   r9   r>   r›   r©   r   ÚTF3ÚTF2ÚTF1Úfrom_Matrixr   r   r4   r2   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 t
‚ˆ ˆˆ  t	ˆ tˆˆƒƒksüt
‚ˆ ˆ |  tt	ˆ ˆƒ| ƒkst
‚ˆ ˆ |  tt	ˆ ˆƒ|  ƒksBt
‚ˆ ˆ ˆ |  tt	ˆ ˆƒˆ| ƒksjt
‚ˆ ˆ ˆ |  tt	ˆ ˆƒˆ |  ƒks–t
‚ˆ ˆ ˆ |  tt	ˆ ˆƒˆ | ƒksÀt
‚ˆ ˆ ˆ|   tt	ˆ ˆƒt	ˆ| ƒƒksìt
‚ˆ ˆ ˆ|   tt	ˆ ˆƒt	t ddtƒt	ˆ| ƒƒƒks&t
‚ˆˆ ˆˆ   ˆ t	ˆˆtˆˆ  ƒˆƒksVt
‚ˆ  ˆ t	ˆ  ˆƒksrt
‚ˆ ˆ  t	t ddtƒt	ˆ ˆƒƒksšt
‚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 t
‚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 t
‚t	ˆˆ ˆ dd	t	ˆˆ ˆ ƒ ¡   krTt tt t t  tt t td dt t t  td   tƒksZn t
‚t	ˆ ˆ d
d	t	ˆ ˆ ƒ ¡ kr€t
‚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t
‚t	ˆ  ˆ ˆ ƒ ¡ t tt t t  tt t td dt t t  td   tƒksvt
‚t	ˆ ˆˆƒ ¡  t t tt t  tt t td dt t t  td   tƒksÐt
‚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`t
‚t	ˆ ˆƒ t ¡t ttd dt t t  td  tƒksžt
‚t	ˆˆ ˆ ƒ t ¡t tt t t  tt t td dt t t  td   tƒksút
‚t	tˆ ˆƒtˆˆ ƒƒ}|jst
‚|jr*t
‚|js6t
‚t	ˆ ˆˆƒ}|jsNt
‚|jsZt
‚|jrft
‚t	ˆ ˆ tˆ ˆ ƒƒ}|jsˆt
‚|js”t
‚|jr t
‚d S )Nr   r    rP   c                      s   ˆ ˆ ˆ S rS   r*   r*   ©rB   rC   rE   r*   r+   r,     r-   z'test_Series_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S rS   r*   r*   rÄ   r*   r+   r,     r-   c                      s   ˆ t dddgƒ S r/   rˆ   r*   rl   r*   r+   r,     r-   TrQ   F)r   r)   r›   r©   rr   r7   r0   r5   r6   r   r2   r   r   r?   ru   Úrewriterš   r   rŸ   )rG   ZS1ZS2ZS3r*   ©rB   rC   rD   rE   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¼t‚ˆ ˆ | ˆ ttˆˆ ƒ|ˆƒksât‚ˆ ˆ ˆ | ttˆˆ ƒˆ | ƒkst‚ˆˆ ˆˆ  ttˆˆƒˆˆ ƒks8t‚ˆˆ  ˆ ˆ  ttˆ ˆƒtˆˆ ƒƒkslt‚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s8t‚ˆ ˆ  |  t| ˆ ˆ ƒksZt‚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 t‚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†t‚t||ƒ 
¡  ¡ t tddtƒffƒks²t‚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 t‚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 t‚d S )Nc                      s   ˆ ˆ t  S rS   ©r½   r*   ©Útfm1Útfm2r*   r+   r,   U  r-   z+test_MIMOSeries_functions.<locals>.<lambda>c                      s   ˆ ˆ t  S rS   )r5   r*   rÉ   r*   r+   r,   V  r-   c                      s   ˆ ˆ t d  S r‹   rf   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 )NrP   r"   rŽ   r*   rÉ   r*   r+   r,   Y  r-   c                      s   ˆ  ˆ ˆ S rS   r*   r*   ©rÊ   rË   rÍ   r*   r+   r,   ]  r-   c                      s   ˆ ˆ ˆ ˆ S rS   r*   r*   ©rÊ   rË   rÍ   Útfm5r*   r+   r,   ^  r-   c                      s   ˆ ˆ ˆˆ  S rS   r*   r*   rÐ   r*   r+   r,   _  r-   c                      s   ˆ ˆ t  S rS   rÈ   r*   ©rÍ   rÑ   r*   r+   r,   f  r-   c                      s   ˆ ˆ t  S rS   ©r6   r*   rÒ   r*   r+   r,   g  r-   c                      s   ˆ ˆ  t d  S rj   rf   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-   TrQ   r    r   r#   )r   r½   r¼   r»   r   r   r2   r   r?   r@   ru   r   rr   r7   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"""Ž2 ÿ®2 ÿþÿ20Vÿ
,ÿ
‚2 ÿ°2 ÿþþÿ
~ÿÿ
 ÿ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Üt‚|jtksêt‚ttˆ ˆ ƒˆƒ}|jtˆ ˆ ƒˆfkst‚|jtks(t‚t | dtƒ}t | dtƒ}tˆ t|| ƒˆƒ}|jˆ t|| ƒˆfkstt‚tˆ ˆˆƒ}|jˆ ˆˆfks–t‚t||ƒ}|j||fks´t‚|jtksÄt‚tˆ ˆƒ}	||	ksÜt‚||krêt‚tˆˆtˆˆ ƒƒ}
|
jˆˆtˆˆ ƒfkst‚tˆˆtˆˆ  ƒˆƒ}|jˆˆtˆˆ  ƒˆfksRt‚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 rS   ©r   r*   r¤   r*   r+   r,   ¯  r-   z,test_Parallel_construction.<locals>.<lambda>c                      s   t ˆ ˆˆˆƒS rS   rÙ   r*   r¥   r*   r+   r,   °  r-   c                      s   t ˆ  ˆƒS rS   rÙ   r*   rŠ   r*   r+   r,   ±  r-   c                      s   t dˆ ˆƒS rj   rÙ   r*   r§   r*   r+   r,   ²  r-   c                      s   t td tt  ˆˆ ƒS rj   )r   r)   r0   r*   r¦   r*   r+   r,   ³  r-   c                      s   t ˆ tddddgƒƒS r¨   )r   r   r*   rl   r*   r+   r,   ´  r-   )r   r5   r)   r6   r7   r8   r0   r9   r>   r›   r©   r   r   r4   r2   rª   r   r   r?   r@   )r«   r¬   Úp0r   r¯   rF   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¦t	‚|j
tks´t	‚|j|j|jf  krÒdksØn t	‚ttˆˆ ƒˆƒ}|jtˆˆ ƒˆfkst	‚|j
tkst	‚|j|j|jf  kr4dks:n t	‚tˆ tˆˆƒˆƒ}|jˆ tˆˆƒˆfksht	‚|j
tksxt	‚|j|j|jf  kršdks n t	‚tˆˆ ˆƒ}|jˆˆ ˆfksÂt	‚|j|j|jf  krädksên t	‚t|| ƒ}|j|| fkst	‚|j|j|jf  kr*dks0n t	‚tˆˆtˆ ˆƒˆ ƒ}|jˆˆtˆ ˆƒˆ fksjt	‚|j|j|jf  krŒdks’n t	‚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 rS   )r   r½   r*   rÉ   r*   r+   r,   ß  r-   c                      s   t ˆ ˆˆƒS rS   rÝ   r*   )rÊ   rÔ   rÍ   r*   r+   r,   â  r-   c                      s
   t ˆ ˆƒS rS   rÝ   r*   )rÔ   rÕ   r*   r+   r,   å  r-   c                      s   t dˆ ˆƒS rj   rÝ   r*   )rÊ   rÍ   r*   r+   r,   è  r-   c                      s   t td tt  ˆ ˆ ƒS rj   )r   r)   r0   r*   )rË   rÍ   r*   r+   r,   é  r-   )r   r½   r¼   r»   r¾   r   r0   r   r4   r2   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¬t
‚ˆ ˆ ˆ |  t	ˆ ˆˆ| ƒksÎt
‚ˆ ˆ ˆ |  t	ˆ ˆˆ |  ƒksôt
‚ˆ ˆˆ  t	ˆ tˆˆƒƒkst
‚ˆ ˆˆ  t	ˆ tˆˆƒ ƒks:t
‚ˆ  ˆ t	ˆ  ˆ ƒksXt
‚ˆ ˆ  tt ddtƒt	ˆ ˆƒƒks€t
‚ˆˆ ˆ  tt	ˆˆƒˆ ƒks¢t
‚ˆ ˆ ˆ|   tt	ˆ ˆƒˆ| ƒksÊt
‚ˆˆ  |   tt ddtƒt	ˆˆƒ|  ƒksüt
‚ˆˆ ˆˆ   |  t	ˆˆtˆˆ ƒ| ƒks*t
‚ˆˆ ˆˆ   ˆ t	ˆˆtˆˆ ƒˆ ƒksZt
‚ˆ ˆ |  ˆ|   tt	ˆ ˆ| ƒt	ˆ| ƒƒksŒt
‚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 t
‚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 t
‚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 t
‚t	ˆ ˆ d
d	t	ˆ ˆ ƒ ¡ kr>t
‚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Î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†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s8t
‚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üt
‚t	ˆ ˆƒ t ¡t ttd dt t t  td   d td dt t t  td  tƒks^t
‚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t
‚t	ˆ t	ˆˆƒƒt	ˆ ˆˆƒ  k	rJt	t	ˆ ˆƒˆƒk	sPn t
‚t	tˆ ˆƒtˆˆƒƒ}|j	srt
‚|j	r~t
‚|j	sŠt
‚t	ˆ ˆ ˆ ƒ}|j	s¦t
‚|j	r²t
‚|j	s¾t
‚t	ˆ ˆ tˆ ˆƒƒ}|j	sÞt
‚|j	rêt
‚|j	söt
‚d S )Nr   r    rP   c                      s   ˆ ˆ ˆ S rS   r*   r*   rÄ   r*   r+   r,      r-   z)test_Parallel_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S rS   r*   r*   rÄ   r*   r+   r,     r-   c                      s   ˆ t dddgƒ S r/   rˆ   r*   rl   r*   r+   r,     r-   TrQ   F)r   r)   r›   r©   rr   r7   r0   r5   r6   r   r2   r   r   r?   ru   rÅ   rš   r   rŸ   )rG   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 t‚ˆˆ  ˆ t
ˆˆ  ˆ ƒks.t‚ˆˆ ˆ  | |   t
ˆˆ t| |ˆ  ƒƒksft‚ˆ ˆ  ˆ  |  t
ˆ ˆ t|ˆ  ƒ ƒks”t‚ˆˆ ˆ  ˆ t
ˆˆ ˆ  ˆƒks¼t‚ˆ ˆ ˆ ˆ  t
ˆ ˆˆ ˆ  ƒksät‚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Ât‚ˆˆ | |  t| |t
ˆˆ ƒƒksðt‚ˆˆ  ˆ ||  tt
||ƒt
ˆˆ  ˆ ƒƒks&t‚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 t‚d S )Nr    c                      s   ˆ ˆ t  S rS   )r¼   r*   rÉ   r*   r+   r,   F  r-   z-test_MIMOParallel_functions.<locals>.<lambda>c                      s   ˆ ˆ t  S rS   rÓ   r*   rÉ   r*   r+   r,   G  r-   c                      s   ˆ ˆ t d  S r‹   rf   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 rS   r*   r*   )rË   rÔ   rÕ   r*   r+   r,   L  r-   c                      s   ˆˆ  ˆ S rS   r*   r*   )rÊ   rË   rÕ   r*   r+   r,   M  r-   c                      s   ˆ ˆ ˆ S rS   r*   r*   rÏ   r*   r+   r,   O  r-   c                      s   ˆ ˆ ˆ S rS   r*   r*   rÏ   r*   r+   r,   P  r-   c                      s   ˆ ˆ t  S rS   rÈ   r*   rÒ   r*   r+   r,   U  r-   c                      s   ˆ ˆ t  S rS   )r7   r*   rà   r*   r+   r,   V  r-   c                      s   ˆˆ  t d  S )Nr%   rf   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 rS   r*   r*   )rË   rÔ   rÍ   rÑ   r*   r+   r,   \  r-   c                      s   ˆ ˆ ˆ S rS   r*   r*   )rÊ   rË   rÑ   r*   r+   r,   ^  r-   TrQ   r   )r   r5   r0   r6   r)   r7   r   r½   r¼   r»   r   r2   r   r   r?   r@   ru   rÅ   rr   r©   r›   )rE   rG   rÎ   r*   )rÊ   rË   rÔ   rÍ   rÑ   rÕ   r+   Útest_MIMOParallel_functions4  s^    $:"8.((".6"ÿ
P2 ÿ* ÿÿþ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ât‚|jt ddtƒksøt‚|jtˆ ˆˆƒkst‚|jtks t‚t	ˆ ˆˆ ƒ}|j
ˆ tˆˆƒdfksJt‚|jˆ ksZt‚|jtˆˆƒkspt‚|jtks€t‚t	ˆ ˆ ˆƒ}|j
tˆ ˆƒˆdfksªt‚|jtˆ ˆƒksÀt‚t	ˆ| ƒ}|j
ˆ| dfksàt‚|jˆksðt‚|jtks t‚t	ˆt ddtƒƒ}|j
ˆt ddtƒdfks0t‚|jtks@t‚|t	ˆƒksRt‚t	t ddtƒˆƒ}|j
t ddtƒˆdfks‚t‚|jtks’t‚t	ˆ|  t ddtƒƒ }|j
tt ddtƒtˆ| ƒƒt ddtƒ dfksÞt‚|jtt ddtƒtˆ| ƒƒkst‚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    rP   c                      s   t ˆ ˆˆ ƒS rS   ©r   r*   ©rB   rC   rD   r*   r+   r,   “  r-   z,test_Feedback_construction.<locals>.<lambda>c                      s   t ˆ tdddgƒƒ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 rS   râ   r*   )rC   rE   rG   r*   r+   r,   ˜  r-   c                      s   t ˆˆ dƒS )Ng      ø?râ   r*   ©rB   rC   r*   r+   r,   ™  r-   c                      s   t ˆ ˆ d  ƒS )NrP   râ   r*   r‰   r*   r+   r,   š  r-   c                      s
   t ˆ ˆƒS rS   râ   r*   ri   r*   r+   r,   ›  r-   )r   r)   r›   r©   rr   r7   r0   r5   r6   r   r4   r   r2   Úsys1Úsys2rª   r   r@   r?   )rH   Úf1Úf2Úf3Úf4Zf5Zf6Zf7r*   )rB   rC   rD   rE   rG   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Êt
‚ˆ ˆ ˆˆ ˆ   t	ˆ ˆˆ ˆ ƒksôt
‚ˆˆ ˆˆ ˆ   t	ˆˆˆ ƒkst
‚ˆˆ ˆ ˆˆ   t	ˆˆ ˆ ƒksDt
‚ˆˆ ˆ ˆˆ ˆ   t	ˆˆ ˆƒkspt
‚ˆˆ ˆ ˆˆ ˆ ˆ   t	ˆˆ ˆˆ ƒt	ˆˆ ˆˆ ƒfks¶t
‚ˆt ddtƒˆ|    t	ˆ| ƒksÞt
‚ˆˆ ˆ  t	ˆˆ ƒksút
‚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Èt
‚t	ˆ ˆˆ ˆ ƒjdttt t  tt t td dt t t  td    d  ks&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d dt t t  td   tƒksÊt
‚t	ˆˆˆ ƒjdttt t  tt t td dt t t  td    d  ks$t
‚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Òt
‚t	ˆˆ ˆdƒjdt t ttd   tt   tt td dt t t  td    d  ks: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 t
‚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(t
‚t	ˆ ˆ ƒ ¡ t ddtƒksHt
‚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ôt
‚t	t ddtƒˆƒ t ¡t ttt t tt  t tƒks2t
‚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 rS   r*   r*   )rB   rC   rD   rG   r*   r+   r,   ±  r-   c                      s   ˆˆ ˆ ˆˆ ˆ   S rS   r*   r*   r¥   r*   r+   r,   ²  r-   )r   r)   r›   r©   rr   r7   r0   r5   r6   r   r2   r   r@   r?   ru   ÚsensitivityrÅ   )rH   r*   )rA   rB   rC   rD   rE   rG   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žt‚|j|ks¬t‚|j|ksºt‚|jtksÈt‚|j	dksÖt‚|  |ksæt‚t||dƒ}|j||dfkst‚|j|kst‚|j|ks(t‚|jtks8t‚|j	dksHt‚t|t
||ƒƒ}	|	j|t
||ƒdfkstt‚|	j|ks„t‚|	jt
||ƒksšt‚|	jtksªt‚|	j	dksºt‚tddt gddggƒ}
t |
t¡ }}t||ƒ}|j||dfkst‚|j|j  kr|ks$n t‚d S )Nr   r#   r    rP   r   )r   r)   r   r   r4   r2   rå   ræ   rª   Úsignr   r   r¾   )rB   rC   rD   rE   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    rP   ©rª   c                      s
   t ˆ ˆƒS rS   ©r   r*   rä   r*   r+   r,   	  r-   z*test_MIMOFeedback_errors.<locals>.<lambda>c                      s   t tˆ ˆƒˆƒS rS   )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 rS   ró   r*   )Útfm_7r*   r+   r,     r-   c                      s   t ˆ ˆdƒS )Nre   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 rS   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   )rD   rE   rG   rH   r*   )
rB   rC   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Êt‚|	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s0t‚| ¡ 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 t‚|	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sPt‚|	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t‚|	 ¡ 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®t‚|	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s4t‚| ¡  |  ¡ ksNt‚d S )Nr   rP   r    rò   r   re   r!   r#   FT)Úcancelro   r"   )rù   )ro   )r   r)   r   r¾   r   r   r   rì   r   r	   ZHalfr2   ru   rÅ   )
rB   rC   rD   rE   r´   r¶   r·   rÂ   ZF_1ZF_2r*   r*   r+   Útest_MIMOFeedback_functions  sv    
"("ÿÿ
ÿ

ÿÿÿ
ý^*ÿ ÿÿ

*"ÿ ÿ*ÿ þÿ
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 t‚| jtttt ƒƒƒksŽt‚| jtksœt‚ttt gtˆggƒ}|j|j	|j
f  krÐdksÖn t‚|jttttt ƒttˆƒƒƒksüt‚|jtkst‚tttgtˆ gˆ tggƒ}|j|j	|j
f  krLdksRn t‚|jtttttƒttˆ ƒtˆ tƒƒƒks„t‚|jtks”t‚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 rS   ©r   r½   r¼   r*   rg   r*   r+   r,   U  r-   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>c                      s   t tˆ gtˆggƒS rS   ©r   r½   r»   r*   ri   r*   r+   r,   V  r-   c                      s   t tgtˆ ggƒS rS   rü   r*   rh   r*   r+   r,   Y  r-   c                      s   t ttgˆ ggƒS rS   rü   r*   rh   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 rS   rû   r*   rh   r*   r+   r,   a  r-   c                   S   s
   t tgƒS rS   )r   r½   r*   r*   r*   r+   r,   b  r-   )r   r6   r)   r7   r5   r0   r   r»   r¿   rÀ   rÁ   r2   r4   r   rª   r½   r¼   r   r?   r@   )Ztfm3_rÑ   rÕ   r*   ri   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üt	‚t |t¡tt dt d td d tƒggƒks2t	‚t |t¡tt ddtƒt ddtƒgt ddtƒt ddtƒggƒksxt	‚tt
gtggƒ}| tt
 gt ggƒks¨t	‚tt
ttg| t
 t ggƒ}| tt
 t t g|  t
tggƒksðt	‚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˜t	‚| 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øt	‚| 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\t	‚| td¡tt dt t ttd  tƒt dt tt td   tƒggƒks®t	‚| td¡tt tt t td tƒt tt t td  tƒggƒksøt	‚| td¡tt dttd  tƒt tt ttd  tƒggƒks<t	‚| tdtdtti¡tt tt td tƒt tt td  tƒggƒksˆt	‚| ¡ 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ât	‚| ¡ tt tt t ttd  tƒgt tt tt td   tƒggƒks2t	‚| ¡  ¡ |ksHt	‚| ¡  ¡ |ks^t	‚| ¡ 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êt	‚| ¡ ddgttƒttƒ gggkst	‚| ¡ 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ºt	‚| ¡ dddgg gg g ggksÞt	‚| ¡ dgdgggksút	‚| ¡ 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€t	‚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slt	‚|	 ¡ tt ddtd  td  dt  d tƒggƒksªt	‚| ¡ 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üt	‚| ¡ t tt t ttd  tƒt tt tt td   tƒgk	sDt	‚| ¡ tt dtd d tƒt td dt  d dtƒt dttƒƒgk	st	‚|	 ¡ 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t	‚| ¡ 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`t	‚| tdtdtdi¡ ¡ tt dttƒt dt dtd  d tƒffƒk
s®t	‚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rTtt td  td  d td tƒt td td tƒffƒksZn t	‚| ¡ 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¼t	‚|
 ¡ 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"t	‚d S )Nr    r   r#   r!   r$   r   rP   r"   r\   r[   rZ   gTã¥›Ä 	@g
×£p=
@gÖÿ9Ì—@gTã¥›Ä @)r   r6   r)   r7   r5   r   r0   r   r¾   r2   r½   r¼   r»   r:   rr   rp   Z	transposeZ
elem_polesr   r   r©   r›   Z
elem_zerosr   r   ru   Z_flatrq   r   ro   )rG   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št
‚d S )Nr   r   r    )r   r:   r)   r;   r   ÚTr	   ÚZeror   r1   r2   ©rA   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†t
‚d S )Nr   r   )r   r:   r)   r;   r   r   r	   r  r   r1   r2   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   r:   r_   r;   r)   r<   r=   r0   rr   r5   r6   r7   r8   r9   r>   rm   r›   r©   r   r½   r¼   r»   rO   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