o
    *Î®cøå  ã                   @   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) d dl*m+Z+ edƒ\Z,Z-Z.Z/Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<e"de/d de; e< e/  e<d  e/ƒZ=e"e3de/ƒZ>e"e6e2 e/ e6e/ e2 e/ƒZ?dd„ Z@dd„ ZAdd„ ZBdd„ ZCdd„ ZDdd „ ZEd!d"„ ZFd#d$„ ZGd%d&„ ZHd'd(„ ZId)d*„ ZJd+d,„ ZKd-d.„ ZLd/d0„ ZMd1d2„ ZNd3d4„ ZOd5d6„ ZPd7d8„ ZQd9d:„ ZRd;d<„ ZSd=d>„ ZTd?d@„ ZUdAS )Bé    )Ú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)Úraisesz4a, x, b, s, g, d, p, k,    a0:3, b0:3, tau, zeta, wné   é   c                  C   s  t td td t d tƒ} | jtd ksJ ‚| jtd t d ks$J ‚| jtd td t d tfks6J ‚t td td tƒ}|jtd ksIJ ‚|jtd ksRJ ‚|jtd td tfks`J ‚t td td d tƒ}|jtd ksuJ ‚|jtd d ks€J ‚|jtd td d tfksJ ‚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sDJ ‚t ddtƒ}|jdksRJ ‚|jdksZJ ‚|jddtfkseJ ‚t ddtƒ}	|	jdkssJ ‚|	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J ‚ 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s£J ‚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sMJ ‚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s°J ‚|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   é   é   é   é	   é   ç      à?é   é   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)   úK/tmp/pip-target-vg8gfxp4/lib/python/sympy/physics/control/tests/test_lti.pyÚ<lambda>q   ó    z4test_TransferFunction_construction.<locals>.<lambda>c                   S   s   t tdtƒS ©Nr   r'   r)   r)   r)   r*   r+   r   r,   c                   S   s   t ddtƒS r-   r'   r)   r)   r)   r*   r+   s   r,   c                   S   s   t tg d¢ƒttƒS ©N)r   r   r!   )r   r   r(   r)   r)   r)   r*   r+   u   ó    c                   S   s    t td dt  d td dƒS )Nr   r   r!   r'   r)   r)   r)   r*   r+   w   s     c                   S   s   t td dt dƒS )Nr   r    r   )r   Úpr)   r)   r)   r*   r+   x   r/   c                   S   s   t dddƒS )Nr!   r   r%   )r   r)   r)   r)   r*   r+   y   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_Útf5Útf5_Útf6Útf6_Útf7Útf8Útf7_Útf8_Útf9Útf10Útf10_Útf11Útf12Útf13Útf14Útf15Úomega_oÚk_pÚk_oÚk_iÚtf18r)   r)   r*   Ú"test_TransferFunction_construction   s†   $ 08$,4444,DN((2($2",6,64 >r[   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s!J ‚t |t¡td
td  dtd   d td td
  tƒksBJ ‚||ksIJ ‚t |t¡tdtd  dt  d td d tƒksfJ ‚ttd td  t ttd  tƒ}	ttd td  d  td tƒ}
|	 ¡ t|	ƒ  krš|
ksJ ‚ J ‚ttd td  td td  tƒ}ttd td tƒ}| ¡ t|ƒ  krÊ|ksÍJ ‚ 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s–J ‚| ¡ |ksŸJ ‚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sJ ‚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ssJ ‚|$ tdtdtdtdi¡ ¡ |%ks‡J ‚|& ¡ |%ksJ ‚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s J ‚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scJ ‚| ¡ g kslJ ‚| ¡ ddgkswJ ‚|) ¡ tgksJ ‚|' ¡ t t gksŽJ ‚|% ¡ dt gksšJ ‚t|" ¡ ƒtddd t  dd t  gƒks²J ‚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sTJ ‚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 s¨J ‚| "¡ d%u s±J ‚| "¡ du sºJ ‚|" "¡ 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sJ ‚|) #¡ 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sJ ‚|' #¡ 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s0J ‚|- #¡ 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	r0t&ˆdƒ  k	r0|k	s3J ‚ J ‚ˆˆ ˆ  %¡ ˆd   k	rQt&ˆdƒ  k	rQ|"k	sTJ ‚ J ‚ˆd t&ˆdƒ  k	rjtddtƒk	smJ ‚ J ‚t'ˆƒ %¡ d ˆd   k	r“t&ˆdƒ  k	r“ttd td tƒk	s–J ‚ J ‚ˆˆ  %¡ d ˆd.   k	rÂt&ˆd.ƒ  k	rÂtdt d td d d tƒk	sÅJ ‚ 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
r'dk
s*J ‚ J ‚| td¡ttd td dt  d tƒk
sCJ ‚|4 td¡ttd dtƒk
sTJ ‚ˆ +tti¡tdt d dt tƒk
sjJ ‚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s=J ‚|8 ¡ t t-dƒtddddddksRJ ‚|9 ¡ tddddks`J ‚d S )3Nr   éÿÿÿÿF©Úevaluater   r    r   r!   r#   r"   r   r%   c                      ó
   t  ˆ ¡S ©N©r   Úfrom_rational_expressionr)   )Úexpr_2r)   r*   r+   Œ   ó   
 z1test_TransferFunction_functions.<locals>.<lambda>c                      r_   r`   ra   r)   )Úexpr_3r)   r*   r+      rd   c                      r_   r`   ra   r)   )Úexpr_4r)   r*   r+      rd   éýÿÿÿç       @ç      ð?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   rk   )r   Úxr4   Úpolesr)   r)   r)   r*   r+   î   ó   ( zq, rT)ÚnegativeÚt)Úpositiveé   g      À?gv¸-kÁÆñ?gâ3•ŽìÙ¿c                   S   s(   t ttd  t td  td tƒ ¡ S )Nrk   r   )r   r4   rm   Úzerosr)   r)   r)   r*   r+     ro   éþÿÿÿc                      s   ˆ t d t  d  S )Nr   r   ©r(   r)   ©rD   r)   r*   r+   $  r/   c                      s   ˆ t  S r`   rv   r)   ©rF   r)   r*   r+   %  ó    c                      s   ˆ ˆ S r`   r)   r)   ©rD   rF   r)   r*   r+   &  ry   c                      s   ˆ   ttdƒi¡S ©Nr   )Úxreplacer0   r   r)   ©rC   r)   r*   r+   1  ó    ).r   r   r(   r0   r   r   ÚtauÚto_exprrb   r   r   ÚZeroDivisionErrorr>   r   r6   r5   r4   r7   r8   r=   ÚexpandÚsubsÚevalfr
   Údc_gainr   r   rm   Úkrn   r   Ústrr   ÚNotImplementedErrorÚ	is_stablert   r   ÚdoitÚpowr   r   r1   r2   r|   r?   r	   ):Úexpr_1Úexpr_5Úexpr_6r@   ÚdelayÚexpr_7ÚH1ÚH2Úexpr_8Útf0r9   rA   r:   ÚG1ÚG2Úcr<   ÚeÚfr;   ÚG3ÚG4Úp1Úp2ÚSP1Úexpect1Úexpect1_Úc1Úd0Úd1Úd2Úp3Úp4ÚSP2Úexpect2Úexpect2_ÚSP3Úexpect3Úexpect3_ÚSP4Úexpect4Úexpect4_Útf_Ú_tfÚTF_Ú_TFÚqÚrrq   Ú	stable_tfÚ
stable_tf_rB   rH   rJ   rK   rN   rO   rQ   r)   )rc   re   rf   rC   rD   rF   r*   Útest_TransferFunction_functions|   s\   4,$44
6
ÿ
.
ÿ
&
ÿ$"($( 4,tXH@>:.(((,&(($(400$(    0.NDP(þ$$$H,ÿPÿN8ÿ&ÿB0ÿDP(þ .$ >B2R^ &4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s5J ‚ˆˆ tˆˆƒks@J ‚ˆ ˆ ˆ tˆ ˆˆƒksPJ ‚ˆˆˆ  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s¨J ‚ˆˆ 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
„ƒ d S )Nr#   r    r!   r   r   r—   F©Úcommutativec                      ó   ˆ t g d¢ƒ S r.   ©r   r)   ©rA   r)   r*   r+   O  ó    z@test_TransferFunction_addition_and_subtraction.<locals>.<lambda>c                      s   ˆˆ  S r`   r)   r)   )r—   rB   r)   r*   r+   P  ry   c                      s   ˆ ˆ S r`   r)   r)   ©rC   rD   r)   r*   r+   Q  ry   c                      s   ˆ t d  S ©Nr   rv   r)   r½   r)   r*   r+   R  r,   c                      s   ˆ d S ©Nr%   r)   r)   r½   r)   r*   r+   S  ry   c                      s   dt d  ˆ  S ©Nr   r!   ©r0   r)   r½   r)   r*   r+   T  r¾   c                      s   ˆ t g d¢ƒ S r.   r¼   r)   r½   r)   r*   r+   \  r¾   c                      s   ˆ ˆ S r`   r)   r)   r¿   r)   r*   r+   ]  ry   c                      s   ˆ t d  S rÀ   rv   r)   r½   r)   r*   r+   ^  r,   c                      s   ˆ d S rÁ   r)   r)   r½   r)   r*   r+   _  ry   c                      s   t d ˆ  S )Nr    rv   r)   )rB   r)   r*   r+   `  r,   c                      s   dt d  ˆ  S )Nr   r   rÃ   r)   r½   r)   r*   r+   a  r¾   )r   r(   r0   r   r
   r   r>   r)   r)   )r—   rA   rB   rC   rD   r*   Ú.test_TransferFunction_addition_and_subtractionB  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sPJ ‚ˆ  ˆ tˆ  ˆƒks]J ‚ˆ ˆ ˆ  tˆ ˆˆ ƒksoJ ‚ˆ  ˆ  ˆ  ˆ  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#   r\   r—   Fr¹   c                      ó   ˆ t g d¢ƒ S r.   r¼   r)   ©rš   r)   r*   r+   x  r¾   zCtest_TransferFunction_multiplication_and_division.<locals>.<lambda>c                      ó   ˆ ˆ S r`   r)   r)   )r•   r—   r)   r*   r+   y  ry   c                      rÇ   r`   r)   r)   ©rš   ÚG5r)   r*   r+   z  ry   c                      s   ˆ t d  S rÀ   rv   r)   ©rÉ   r)   r*   r+   {  r,   c                      s   dˆ  S ©Nr"   r)   r)   rÊ   r)   r*   r+   |  ry   c                      s   ˆ t g d¢ƒ S r.   r¼   r)   rÆ   r)   r*   r+   ~  r¾   c                      ó   ˆ d S r-   r)   r)   )ÚG6r)   r*   r+     ry   c                      ó   ˆ ˆ S r`   r)   r)   rÈ   r)   r*   r+   €  ry   c                      rÌ   r{   r)   r)   rÊ   r)   r*   r+     ry   c                      s   ˆ t d  S r{   rv   r)   rÊ   r)   r*   r+   ‚  r,   c                      s   t dt d   ˆ  S )Nr   r   rv   r)   )r–   r)   r*   r+   ƒ  r/   c                      s   dˆ  S r-   r)   r)   )r›   r)   r*   r+   „  ry   c                      rÎ   r`   r)   r)   )rÉ   rÍ   r)   r*   r+   …  ry   c                      s
   ˆ  ˆ S r`   r)   r)   )rš   r›   r)   r*   r+   †  rd   c                      s   ˆdˆ   S rÀ   r)   r)   )rÍ   ÚG7r)   r*   r+   ‡  r,   c                      s   ˆˆ ˆ  S r`   r)   r)   ©rÉ   rÍ   rÏ   r)   r*   r+   ˆ  r,   c                      s   ˆˆˆ ˆ   S r`   r)   r)   rÐ   r)   r*   r+   ‰  r¾   )r   r(   r0   r   r   r
   r   r>   r)   r)   )r•   r–   rš   r›   rÉ   rÍ   rÏ   r—   r*   Ú1test_TransferFunction_multiplication_and_divisiond  sD   $2ÿ&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sdJ ‚|jsiJ ‚|jsnJ ‚|jrsJ ‚d S ©Nzomega_o, zeta, taur   r!   r   )r
   r   r(   r0   r9   r:   Ú	is_proper)rV   Úzetar   r•   r–   rš   r›   r)   r)   r*   Útest_TransferFunction_is_properŒ  ó   ,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rdJ ‚|jriJ ‚|jsnJ ‚|jrsJ ‚d S rÒ   )r
   r   r(   r0   r9   r:   Úis_strictly_proper)rV   rÔ   r   rA   rB   rC   rD   r)   r)   r*   Ú(test_TransferFunction_is_strictly_proper˜  rÖ   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sdJ ‚|jsiJ ‚|jrnJ ‚|jrsJ ‚d S )Nztau, omega_o, zetar   r!   r   )r
   r   r(   r0   r9   r:   Úis_biproper)r   rV   rÔ   rA   rB   rC   rD   r)   r)   r*   Ú!test_TransferFunction_is_biproper¤  rÖ   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snJ ‚|jtksuJ ‚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sµJ ‚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                      ó
   t ˆ ˆƒS r`   ©r   r)   ©r@   rC   r)   r*   r+   Ó  rd   z*test_Series_construction.<locals>.<lambda>c                      ó   t ˆ ˆˆˆƒS r`   rÞ   r)   ©r@   rB   rC   rD   r)   r*   r+   Ô  ó    c                      s   t ˆ ˆ ƒS r`   rÞ   r)   ©rB   rC   r)   r*   r+   Õ  r,   c                      ó   t dˆ ˆƒS r{   rÞ   r)   ©r@   rD   r)   r*   r+   Ö  r,   c                      ó   t td tt  ˆˆ ƒS r{   )r   r(   r0   r)   rã   r)   r*   r+   ×  ó    c                      ó   t ˆ tg d¢ƒƒS ©N)r   r   r!   r   )r   r   r)   r}   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   Ús2Ús3Ús4Ús6Ú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r£dks¦J ‚ J ‚tˆˆˆƒ}|jˆˆˆfks¶J ‚|jtks½J ‚|j|j|jf  krÍdksÐJ ‚ J ‚tˆtˆ | ƒˆƒ}|jˆtˆ | ƒˆfksêJ ‚|j|j|jf  krúdksýJ ‚ 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 r`   ©r   r)   r)   r)   r*   r+   õ  s    z.test_MIMOSeries_construction.<locals>.<lambda>c                      s
   t ˆˆ ƒS r`   r÷   r)   )Útf_1Útfm_1r)   r*   r+   ø  rd   c                      s   t ˆ ˆˆ  ƒS r`   r÷   r)   ©rù   Útfm_2r)   r*   r+   ü  râ   c                      rÝ   r`   r÷   r)   )Útfm_3Útfm_5r)   r*   r+   ÿ  rd   c                      rä   r{   r÷   r)   ©rû   rü   r)   r*   r+     r,   c                      s   t td tt  ˆ  ˆƒS r{   )r   r(   r0   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?   )Útf_2Útf_3Útfm_4Ús8Ús9Ú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rlt	t	ˆ ˆƒˆƒ  krlt	ˆ t	ˆˆƒƒksoJ ‚ J ‚ˆ ˆˆ  t	ˆ t
ˆˆƒƒksJ ‚ˆ ˆ |  t
t	ˆ ˆƒ| ƒksJ ‚ˆ ˆ |  t
t	ˆ ˆƒ|  ƒks J ‚ˆ ˆ ˆ |  t
t	ˆ ˆƒˆ| ƒks³J ‚ˆ ˆ ˆ |  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s&J ‚ˆ  ˆ t	ˆ  ˆƒks4J ‚ˆ ˆ  t	t ddtƒt	ˆ ˆƒƒksHJ ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡fdd„ƒ t	ˆ ˆdd	t	ˆ ˆƒ ¡   krt ttd dt t t  td  tƒks“J ‚ 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îJ ‚ J ‚t	ˆˆ ˆ dd	t	ˆˆ ˆ ƒ ¡   kr(t tt t t  tt t td dt t t  td   tƒks+J ‚ 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s¹J ‚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sMJ ‚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sJ ‚|jr“J ‚|js™J ‚t	ˆ ˆˆƒ}|js¥J ‚|js«J ‚|jr±J ‚t	ˆ ˆ t
ˆ ˆ ƒƒ}|jsÂJ ‚|jsÈJ ‚|jrÎJ ‚d S )Nr   r   r\   c                      s   ˆ ˆ ˆ S r`   r)   r)   ©rA   rB   rD   r)   r*   r+     r,   z'test_Series_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S r`   r)   r)   r  r)   r*   r+     r,   c                      rÅ   r.   r¼   r)   r}   r)   r*   r+     r¾   Tr]   F)r   r(   rÔ   rê   r†   r6   r0   r4   r5   r   r   r   r>   rŠ   ÚrewriterÓ   r×   rÙ   )rF   ÚS1ÚS2Ú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sqJ ‚ˆ ˆ ˆ | 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t‡ ‡‡‡fd	d„ƒ ˆ ˆ |   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ˆˆ ddtˆˆ ƒ 	¡   krJt 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sMJ ‚ 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ÉJ ‚ 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s£J ‚ J ‚d S )Nc                      ó   ˆ ˆ t  S r`   ©r  r)   ©Útfm1Útfm2r)   r*   r+   T  r,   z+test_MIMOSeries_functions.<locals>.<lambda>c                      r  r`   )r4   r)   r  r)   r*   r+   U  r,   c                      s   ˆ ˆ t d  S rÀ   rv   r)   ©Útfm4Útfm6r)   r*   r+   V  r¾   c                      s   ˆ ˆ  d S rÁ   r)   r)   r  r)   r*   r+   W  râ   c                      s   dt d  ˆ ˆ  S )Nr\   r    rÃ   r)   r  r)   r*   r+   X  r/   c                      s   ˆ  ˆ ˆ S r`   r)   r)   ©r  r  r  r)   r*   r+   \  râ   c                      s   ˆ ˆ ˆ ˆ S r`   r)   r)   ©r  r  r  Útfm5r)   r*   r+   ]  r¾   c                      s   ˆ ˆ ˆˆ  S r`   r)   r)   r  r)   r*   r+   ^  r¾   c                      ó   ˆ ˆ t  S r`   r  r)   ©r  r   r)   r*   r+   e  r,   c                      r!  r`   ©r5   r)   r"  r)   r*   r+   f  r,   c                      s   ˆ ˆ  t d  S r{   rv   r)   r"  r)   r*   r+   g  r~   c                      s   ˆˆ  d S rË   r)   r)   r"  r)   r*   r+   h  r,   c                      s   t d  d ˆ ˆ  S )Nr!   r   rÃ   r)   r"  r)   r*   r+   i  ó    Tr]   r   r   r!   )r   r  r  r  r   r   r   r>   r?   rŠ   r   r†   r6   r(   r0   rê   rÔ   r   r  r   r  )Útfm3Útfm7Úmat_1Úmat_2Útm_1Útm_2r)   )r  r  r  r   r  r*   Útest_MIMOSeries_functionsE  sŽ    &*(2"""Ž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snJ ‚|jtksuJ ‚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s·J ‚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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Û   rÜ   c                      rÝ   r`   ©r   r)   rß   r)   r*   r+   ®  rd   z,test_Parallel_construction.<locals>.<lambda>c                      rà   r`   r,  r)   rá   r)   r*   r+   ¯  râ   c                      s   t ˆ  ˆƒS r`   r,  r)   r¿   r)   r*   r+   °  r,   c                      rä   r{   r,  r)   rå   r)   r*   r+   ±  r,   c                      ræ   r{   )r   r(   r0   r)   rã   r)   r*   r+   ²  rç   c                      rè   ré   )r   r   r)   r}   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í   Úp0rœ   rð   rE   r   r¥   r¦   Úp5Úp6Úp7r)   rá   r*   Útest_Parallel_constructionˆ  sD   H(


 r1  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sSJ ‚|j	t
ksZJ ‚|j|j|jf  krjdksmJ ‚ J ‚ttˆˆ ƒˆƒ}|jtˆˆ ƒˆfksJ ‚|j	t
ksˆJ ‚|j|j|jf  kr˜dks›J ‚ J ‚tˆ tˆˆƒˆƒ}|jˆ tˆˆƒˆfks±J ‚|j	t
ks¸J ‚|j|j|jf  krÈdksËJ ‚ J ‚tˆˆ ˆƒ}|jˆˆ ˆfksÛJ ‚|j|j|jf  krëdksîJ ‚ J ‚t|| ƒ}|j|| fksüJ ‚|j|j|jf  krdksJ ‚ J ‚tˆˆtˆ ˆƒˆ ƒ}|jˆˆtˆ ˆƒˆ fks.J ‚|j|j|jf  kr@dksCJ ‚ 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+   Û  ry   z0test_MIMOParallel_construction.<locals>.<lambda>c                      s   t ˆ ˆtƒS r`   )r   r  r)   r  r)   r*   r+   Þ  r,   c                      s   t ˆ ˆˆƒS r`   r3  r)   )r  r%  r  r)   r*   r+   á  r,   c                      rÝ   r`   r3  r)   )r%  r&  r)   r*   r+   ä  rd   c                      rä   r{   r3  r)   )r  r  r)   r*   r+   ç  r,   c                      s   t td tt  ˆ ˆ ƒS r{   )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  Úp8Úp9Úp10Úp11Úp12Ú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sVJ ‚ˆ ˆ ˆ |  t	ˆ ˆˆ| ƒksgJ ‚ˆ ˆ ˆ |  t	ˆ ˆˆ |  ƒkszJ ‚ˆ ˆˆ  t	ˆ t
ˆˆƒƒksŠJ ‚ˆ ˆˆ  t	ˆ t
ˆˆƒ ƒks›J ‚ˆ  ˆ t	ˆ  ˆ ƒks©J ‚ˆ ˆ  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s&J ‚ˆ ˆ |  ˆ|   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sœJ ‚ J ‚t	ˆ ˆt
ˆ  ˆƒdd	t	ˆ ˆt
ˆ  ˆƒƒ ¡   krt 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sJ ‚ 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ˆJ ‚ 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s˜J ‚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r¢t	t	ˆ ˆƒˆƒks¥J ‚ J ‚t	t
ˆ ˆƒt
ˆˆƒƒ}|js¶J ‚|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   r\   c                      ó   ˆ ˆ ˆ S r`   r)   r)   r  r)   r*   r+   ÿ  r,   z)test_Parallel_functions.<locals>.<lambda>c                      s   ˆ ˆˆ  S r`   r)   r)   r  r)   r*   r+      r,   c                      r»   r.   r¼   r)   r}   r)   r*   r+     r¾   Tr]   F)r   r(   rÔ   rê   r†   r6   r0   r4   r5   r   r   r   r>   rŠ   r  rÓ   r×   rÙ   )rF   ÚP1ÚP2ÚP3r)   r  r*   Útest_Parallel_functionsë  s¶   ($"& "& &0.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…J ‚ J ‚ˆˆ  ˆ t
ˆˆ  ˆ ƒks•J ‚ˆˆ ˆ  | |   t
ˆˆ t| |ˆ  ƒƒks°J ‚ˆ ˆ  ˆ  |  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srJ ‚ˆˆ  ˆ ||  tt
||ƒt
ˆˆ  ˆ ƒƒksJ ‚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rqt
ˆ ˆƒ t¡  krqt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stJ ‚ J ‚d S )Nr   c                      s   ˆ ˆ t  S r`   )r  r)   r  r)   r*   r+   E  r,   z-test_MIMOParallel_functions.<locals>.<lambda>c                      s   ˆ ˆ t  S r`   r#  r)   r  r)   r*   r+   F  r,   c                      s   ˆ ˆ t d  S rÀ   rv   r)   ©r  r%  r)   r*   r+   G  r¾   c                      s   ˆ ˆ  d S rË   r)   r)   r@  r)   r*   r+   H  râ   c                      s   dt d  ˆ ˆ  S rÂ   rÃ   r)   r@  r)   r*   r+   I  r/   c                      s   ˆˆ  ˆ S r`   r)   r)   )r  r%  r&  r)   r*   r+   K  r,   c                      s   ˆˆ  ˆ S r`   r)   r)   )r  r  r&  r)   r*   r+   L  r,   c                      r;  r`   r)   r)   r  r)   r*   r+   N  r,   c                      s   ˆ ˆ ˆ S r`   r)   r)   r  r)   r*   r+   O  r,   c                      s   ˆ ˆ t  S r`   r  r)   r"  r)   r*   r+   T  r,   c                      s   ˆ ˆ t  S r`   )r6   r)   r@  r)   r*   r+   U  r,   c                      s   ˆˆ  t d  S )Nr#   rv   r)   r@  r)   r*   r+   V  r¾   c                      s   ˆ ˆ ˆ d S r-   r)   r)   )r  r  r%  r)   r*   r+   W  r¾   c                      s   dt d  ˆ ˆ  S rÂ   rÃ   r)   )r  r%  r)   r*   r+   X  r/   c                      s   ˆˆ  ˆ ˆ S r`   r)   r)   )r  r%  r  r   r)   r*   r+   [  r¾   c                      s   ˆ ˆ ˆ S r`   r)   r)   )r  r  r   r)   r*   r+   ]  r,   Tr]   r   )r   r4   r0   r5   r(   r6   r   r  r  r  r   r   r   r>   r?   rŠ   r  r†   rê   rÔ   )rD   rF   r  r)   )r  r  r%  r  r   r&  r*   Útest_MIMOParallel_functions3  sZ   $8 6,&&".6"
ÿPJÿ,ÿÿþrA  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sqJ ‚|jt ddtƒks|J ‚|jtˆ ˆˆƒks‡J ‚|jtksŽJ ‚t	ˆ ˆˆ ƒ}|j
ˆ tˆˆƒdfks¢J ‚|jˆ ks©J ‚|jtˆˆƒks³J ‚|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sJ ‚|jtksJ ‚|t	ˆƒksJ ‚t	t ddtƒˆƒ}|j
t ddtƒˆdfks6J ‚|jtks>J ‚t	ˆ|  t ddtƒƒ }|j
tt ddtƒtˆ| ƒƒt ddtƒ dfksdJ ‚|jtt ddtƒtˆ| ƒƒksvJ ‚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   r\   c                      s   t ˆ ˆˆ ƒS r`   ©r   r)   ©rA   rB   rC   r)   r*   r+   ’  râ   z,test_Feedback_construction.<locals>.<lambda>c                      rè   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À   rB  r)   r)   r)   r*   r+   •  rd   c                      s   t ˆ ˆˆ ƒS r`   rB  r)   )rB   rD   rF   r)   r*   r+   —  râ   c                      ó   t ˆˆ dƒS )Ng      ø?rB  r)   ©rA   rB   r)   r*   r+   ˜  r,   c                      s   t ˆ ˆ d  ƒS )Nr\   rB  r)   r½   r)   r*   r+   ™  r¾   c                      rÝ   r`   rB  r)   rz   r)   r*   r+   š  rd   )r   r(   rÔ   rê   r†   r6   r0   r4   r5   r   r3   r   Úsys1Úsys2rë   r   r?   r>   )rH   Úf1Úf2Úf3Úf4Úf5Úf6Úf7r)   )rA   rB   rC   rD   rF   r*   Útest_Feedback_constructiong  sR   ($$
4$rO  c               	      s*  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seJ ‚ˆ ˆ ˆˆ ˆ   t	ˆ ˆˆ ˆ ƒkszJ ‚ˆˆ ˆˆ ˆ   t	ˆˆˆ ƒksJ ‚ˆˆ ˆ ˆˆ   t	ˆˆ ˆ ƒks J ‚ˆˆ ˆ ˆˆ ˆ   t	ˆˆ ˆƒksµJ ‚ˆˆ ˆ ˆˆ ˆ ˆ   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sJ ‚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scJ ‚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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stJ ‚t	t ddtƒˆƒ t ¡t ttt t tt  t tƒks“J ‚d S )Nr   r   c                      s   ˆ ˆ ˆ dˆ ˆ ˆ   S rÀ   r)   r)   rC  r)   r*   r+   ¯  ó    z)test_Feedback_functions.<locals>.<lambda>c                      s   ˆ ˆ ˆ ˆ ˆ S r`   r)   r)   )rA   rB   rC   rF   r)   r*   r+   °  r/   c                      s   ˆˆ ˆ ˆˆ ˆ   S r`   r)   r)   rá   r)   r*   r+   ±  rç   )r   r(   rÔ   rê   r†   r6   r0   r4   r5   r   r   r?   r>   rŠ   Úsensitivityr  )rH   r)   )r@   rA   rB   rC   rD   rF   r*   Útest_Feedback_functions  sŽ   ($*&&*D&:*ÿÿ
ÿB
ÿ:*ÿÿÿ
ÿB
ÿH&ÿÿÿ
ÿN
ÿP
ÿd
ÿ D&ÿÿÿ
ÿÿrR  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sOJ ‚|j|ksVJ ‚|j|ks]J ‚|jtksdJ ‚|jdkskJ ‚|  |kssJ ‚t||dƒ}|j||dfksƒJ ‚|j|ksŠJ ‚|j|ks‘J ‚|jtks˜J ‚|jdksŸJ ‚t|t	||ƒƒ}	|	j|t	||ƒdfks´J ‚|	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J ‚ J ‚d S )Nr   r!   r   r\   r   )r   r(   r   r   r3   rF  rG  rë   Úsignr   r   r  )rA   rB   rC   rD   rù   rû   rü   rH  rI  rJ  ÚmatrF  Ú
controllerrK  r)   r)   r*   Útest_MIMOFeedback_constructionÏ  s>   

(rV  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   r\   ©rë   c                      rÝ   r`   ©r   r)   rE  r)   r*   r+     rd   z*test_MIMOFeedback_errors.<locals>.<lambda>c                      s   t tˆ ˆƒˆƒS r`   )r   r   r)   )rù   rû   rü   r)   r*   r+   	  r¾   c                      ó   t ˆ ˆdƒS rÀ   rX  r)   )rù   Útfm_6r)   r*   r+     r,   c                      s
   t ˆ ˆ ƒS r`   rX  r)   )Útfm_7r)   r*   r+     rd   c                      rY  )Nru   rX  r)   rú   r)   r*   r+     r,   c                      rD  rÀ   rX  r)   ©r
  rý   r)   r*   r+     r,   c                      s   t ˆ ˆ ƒS r`   rX  r)   r\  r)   r*   r+     r,   c                      s   t ˆ ˆ dƒS rÀ   rX  r)   r   r)   r*   r+     r,   c                      rY  rÀ   rX  r)   )rù   Útfm_8r)   r*   r+     r,   )	r   r(   r   r  r   r   r?   r>   r0   )rC   rD   rF   rH   r)   )
rA   rB   rù   rû   rü   r
  rý   rZ  r[  r]  r*   Útest_MIMOFeedback_errorsö  s.   r^  c            
      C   sJ  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ddgddggƒkscJ ‚|	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s•J ‚| 	¡ 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ÂJ ‚ 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s$J ‚|	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sJ ‚| 	¡  |  	¡ ks#J ‚d S )Nr   r\   r   rW  r$   r   ru   r   r!   FT)Úcancelr‚   r    )r_  )r‚   )r   r(   r   r  r   r   r   rQ  r   rŠ   r  )
rA   rB   rC   rD   rù   rû   rü   r
  ÚF_1ÚF_2r)   r)   r*   Útest_MIMOFeedback_functions  st   
("ÿÿ
ÿ

ÿÿÿý^*ÿ ÿ
ÿ
*"ÿÿ*ÿ þ
ÿ8&ÿÿ
ÿ
N ÿ
ÿrb  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r7dks:J ‚ J ‚| jtttt ƒƒƒksHJ ‚| jtksOJ ‚ttt gtˆggƒ}|j|j	|j
f  krjdksmJ ‚ 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r¦dks©J ‚ 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   r2  )r!   r   c                      s   t tgtgˆ ggƒS r`   ©r   r  r  r)   rw   r)   r*   r+   T  r/   z:test_TransferFunctionMatrix_construction.<locals>.<lambda>c                      s   t tˆ gtˆggƒS r`   ©r   r  r  r)   rz   r)   r*   r+   U  r/   c                      s   t tgtˆ ggƒS r`   rd  r)   rx   r)   r*   r+   X  r~   c                      s   t ttgˆ ggƒS r`   rd  r)   rx   r)   r*   r+   Y  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+   \  rP  c                   S   s   t ttddgƒgttggƒS re  )r   r  r   r  r  r)   r)   r)   r*   r+   ]  rP  c                      s   t ttˆ gƒS r`   rc  r)   rx   r)   r*   r+   `  râ   c                   S   s
   t tgƒS r`   )r   r  r)   r)   r)   r*   r+   a  rd   )r   r5   r(   r6   r4   r0   r   r  r  r  r  r3   r   rë   r  r  r   r>   r?   )Útfm3_r   r&  r)   rz   r*   Ú(test_TransferFunctionMatrix_construction@  s,   $&&&&0rg  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s˜J ‚t |t¡tt ddtƒt ddtƒgt ddtƒt ddtƒggƒksºJ ‚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sHJ ‚| 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sxJ ‚| 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smJ ‚| ¡ tt tt t ttd  tƒgt tt tt td   tƒggƒks•J ‚| ¡  ¡ |ks J ‚| ¡  ¡ |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sYJ ‚| ¡ g d¢g gg g ggksjJ ‚| ¡ dgdgggksxJ ‚| ¡ 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s1J ‚|	 ¡ tt ddtd  td  dt  d tƒggƒksPJ ‚| ¡ t ttd  td  td d tƒt ddtƒt tdtƒt tttƒgksyJ ‚| ¡ t tt t ttd  tƒt tt tt td   tƒgksJ ‚| ¡ 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sRJ ‚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r¦tt td  td  d td tƒt td td tƒffƒks©J ‚ 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   )r\   r   r!   r    rj   ri   rh   gTã¥›Ä 	@g
×£p=
@gÖÿ9Ì—@gTã¥›Ä @)r   r5   r(   r6   r4   r   r0   r   r  r  r  r  r9   r†   rƒ   Ú	transposeÚ
elem_polesr   r   rê   rÔ   Ú
elem_zerosr   r   rŠ   Ú_flatr„   r   r‚   )rF   r'  r(  Úmat_3r  r  ÚH_1ÚH_2ÚH_3ÚH_4ÚH_5r)   r)   r*   Ú%test_TransferFunctionMatrix_functionsc  sž   $"þ 
0ÿÿ
"ÿ
ÿÿ*>^`dRJDLZPxÿ*NLÿ"fÿDj>>RHLrN
ÿÿ
ÿ$"ÿ:ÿ8ÿ
ÿVÿrr  N)VÚsympy.core.addr   Úsympy.core.functionr   Úsympy.core.mulr   Úsympy.core.numbersr   r   r   Úsympy.core.powerr   Úsympy.core.singletonr	   Úsympy.core.symbolr
   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.miscellaneousr   Úsympy.matrices.denser   Úsympy.polys.polytoolsr   Úsympy.polys.rootoftoolsr   Úsympy.simplify.simplifyr   Úsympy.core.containersr   Úsympy.matricesr   r   Úsympy.physics.controlr   r   r   r   r   r   r   r   Úsympy.testing.pytestr   r9   rm   r:   r(   r;   r<   r0   r†   r4   r5   r6   r7   r8   r=   r   rÔ   rê   r  r  r  r[   r¸   rÄ   rÑ   rÕ   rØ   rÚ   rö   r  r  r+  r1  r:  r?  rA  rO  rR  rV  r^  rb  rg  rr  r)   r)   r)   r*   Ú<module>   sX    (*(a G"(+,>C.5H462'"(#