§
    ¢éUg7|  ã                   ó  — d dl Z d dlZd dlmZmZ d dl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 d dl	mZmZmZ d dlmZ d	„ Z G d
„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Zd„ Zd„ Z G d„ d¦  «        ZdS )é    N)Úassert_array_almost_equalÚassert_allclose)Úraises)Úsolve_sylvester)Úsolve_continuous_lyapunovÚsolve_discrete_lyapunov)Úsolve_continuous_areÚsolve_discrete_are)Ú
block_diagÚsolveÚLinAlgError)Úmatrixc                 ó`  — t           j                             t           j                             t           j                             t
          ¦  «        ¦  «        d| ¦  «        }t          j        |¦  «        5 }t          | 	                    ¦   «         ¦  «        cddd¦  «         S # 1 swxY w Y   dS )zo
    Load npz data file under data/
    Returns a copy of the data, rather than keeping the npz file open.
    ÚdataN)
ÚosÚpathÚjoinÚabspathÚdirnameÚ__file__ÚnpÚloadÚdictÚitems)ÚnameÚfilenameÚfs      ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_solvers.pyÚ
_load_datar      s¾   € õ
 Œw�|Š|�BœGŸOšO­B¬G¯OªO½HÑ,EÔ,EÑFÔFØ" Dñ*ô *€Hå	Œ�Ñ	Ô	ð ˜aÝ�A—G’G‘I”I‰Œðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á5!B#Â#B'Â*B'c                   ó‚  — e Zd Z ej        ddgddgg¦  «         ej        ddgddgg¦  «        f ej        d	d
gddgg¦  «         ej        ddgdd
gg¦  «        f ej        dd
gddgg¦  «         ej        ddgdd
gg¦  «        f ej        d	d
gddgg¦  «         ej        d
d
gdd
gg¦  «        f ej        g d¢g d¢g d¢g d¢g d¢g¦  «         ej        g d¢g d¢g d¢g d¢g d¢g¦  «        f ej        g d¢g d¢g d¢g d ¢g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g¦  «         ej        d¦  «        f ed(dgd)d*gg¦  «         ed(dg¦  «        j         ed(dg¦  «        j        j        z  f ed(dgd)d*gg¦  «         ej         ed(dg¦  «        j         ed(dg¦  «        j        j        z  ¦  «        fgZd+„ Z	d,„ Z
d0d.„Zd/„ Zd-S )1ÚTestSolveLyapunové   é   é   é   é	   é
   é   é   ù      ð?      ð?ç       @ù      @      Àç      @ù       @       Àù       @       @ù      ð¿      ð¿ç      ð?ç      @ç      ð¿)r$   r&   é   r"   r%   )r"   r#   r$   é   r%   )r%   é   r6   r6   r$   )r"   r4   r#   r   é   )r4   r$   r$   r"   r4   )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%   )yš™™™™™¹?        y²�ï§ÆK·?        yË¡E¶óý´?        yã¥›Ä °²?        yü©ñÒMb°?        y)\�Âõ(¬?        yZd;ßO�§?        y‹lçû©ñ¢?        yyé&1¬œ?        yÛù~j¼t“?        y{®Gáz„?        )ù      ð?        ù                r9   r9   r9   r9   r9   r9   r9   r9   r9   )r9   r8   r9   r9   r9   r9   r9   r9   r9   r9   r9   )r9   r9   r8   r9   r9   r9   r9   r9   r9   r9   r9   )r9   r9   r9   r8   r9   r9   r9   r9   r9   r9   r9   )r9   r9   r9   r9   r8   r9   r9   r9   r9   r9   r9   )r9   r9   r9   r9   r9   r8   r9   r9   r9   r9   r9   )r9   r9   r9   r9   r9   r9   r8   r9   r9   r9   r9   )r9   r9   r9   r9   r9   r9   r9   r8   r9   r9   r9   )r9   r9   r9   r9   r9   r9   r9   r9   r8   r9   r9   )r9   r9   r9   r9   r9   r9   r9   r9   r9   r8   r9   r   g      à¿éÿÿÿÿc                 ó"  — t          j        d¦  «        }t          j        d¦  «        }t          t          t
          ||¦  «         t          t          t
          ||¦  «         t          t          t
          |t          j        d¦  «        ¦  «         d S )N©r$   r#   r$   r#   )r   ÚonesÚeyeÚassert_raisesÚ
ValueErrorr   )ÚselfÚnsqÚsqs      r   Ú$test_continuous_squareness_and_shapez6TestSolveLyapunov.test_continuous_squareness_and_shapeX   si   € ÝŒg�f‰oŒoˆÝŒV�A‰YŒYˆÝ•jÕ";¸SÀ"ÑEÔEÐEÝ•jÕ";¸RÀÑEÔEÐEÝ•jÕ";¸RÅÄÈÁÄÑKÔKÐKÐKÐKó    c                 óà   — t          ||¦  «        }t          t          j        ||¦  «        t          j        ||                     ¦   «                              ¦   «         ¦  «        z   |¦  «         d S ©N)r   r   r   ÚdotÚconjÚ	transpose)rA   ÚaÚqÚxs       r   Úcheck_continuous_casez'TestSolveLyapunov.check_continuous_case_   sf   € Ý% a¨Ñ+Ô+ˆÝ!Ýœ&  A™,œ,­¬°°1·6²6±8´8×3EÒ3EÑ3GÔ3GÑ)HÔ)HÑHÈ!ñ	Mô 	Mð 	Mð 	Mð 	MrE   Nc                 óê   — t          |||¬¦  «        }t          t          j        t          j        ||¦  «        |                     ¦   «                              ¦   «         ¦  «        |z
  d|z  ¦  «         d S )N©Úmethodr3   )r   r   r   rH   rI   rJ   )rA   rK   rL   rQ   rM   s        r   Úcheck_discrete_casez%TestSolveLyapunov.check_discrete_cased   so   € Ý# A q°Ð8Ñ8Ô8ˆÝ!Ý”f�RœV A q™\œ\¨1¯6ª6©8¬8×+=Ò+=Ñ+?Ô+?Ñ@Ô@À1ÑDÀdÈ1Áfñ	Nô 	Nð 	Nð 	Nð 	NrE   c                 ó2  — | j         D ]Ž}|                      |d         |d         ¦  «         |                      |d         |d         ¦  «         |                      |d         |d         d¬¦  «         |                      |d         |d         d¬¦  «         Œ�d S )Nr   r"   ÚdirectrP   Úbilinear)ÚcasesrN   rR   ©rA   Úcases     r   Ú
test_caseszTestSolveLyapunov.test_casesi   s¦   € Ø”Jð 	Jð 	JˆDØ×&Ò& t¨A¤w°°Q´Ñ8Ô8Ð8Ø×$Ò$ T¨!¤W¨d°1¬gÑ6Ô6Ð6Ø×$Ò$ T¨!¤W¨d°1¬g¸hÐ$ÑGÔGÐGØ×$Ò$ T¨!¤W¨d°1¬g¸jÐ$ÑIÔIÐIÐIð		Jð 	JrE   rG   )Ú__name__Ú
__module__Ú__qualname__r   Úarrayr>   r   ÚTrV   rD   rN   rR   rY   © rE   r   r!   r!      sP  € € € € € ð 
ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�r�7˜R ˜HÐ%Ñ	&Ô	&ð	(ð 
ˆŒ�F˜C�= 8¨S /Ð2Ñ	3Ô	3Ø	ˆŒ�F˜FÐ# g¨s ^Ð4Ñ	5Ô	5ð	7ð 
ˆŒ�C˜�:  S˜zÐ*Ñ	+Ô	+Ø	ˆŒ�F˜FÐ# g¨s ^Ð4Ñ	5Ô	5ð	7ð 
ˆŒ�F˜C�= 8¨S /Ð2Ñ	3Ô	3Ø	ˆŒ�C˜�:  c˜{Ð+Ñ	,Ô	,ð	.ð 
ˆŒ�?�?�? O O O°_°_°_Ø"�?�? O O Oð5ñ 
6ô 
6à	ˆŒ�?�?�? O O O°_°_°_Ø"�?�? O O Oð5ñ 
6ô 
6ð	7ð
 
ˆŒð ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð=  ñ  
!ô  
!ðB 
ˆŒ�‰ŒðC!	ðF 
ˆ�!�Q�˜$ ˜Ð$Ñ	%Ô	%Ø
ˆ&�!�Q�‰.Œ.Ô
˜V˜V Q¨ F™^œ^Ô-Ô/Ñ
/ð	2ð 
ˆ�!�Q�˜$ ˜Ð$Ñ	%Ô	%Ø
ˆ"Œ(�6�6˜1˜a˜&‘>”>Ô# f f¨a°¨V¡n¤nÔ&6Ô&8Ñ8Ñ
9Ô
9ð	<ðq:
€EðxLð Lð LðMð Mð Mð
Nð Nð Nð Nð
Jð Jð Jð Jð JrE   r!   c                   ól  — e Zd Z ed¦  «        Z ed¦  «        Z ed¦  «        Z ed¦  «        Z ed¦  «        Z e	j
        dgd¦  «         e	j        dgdgg¦  «         edd	¦  «        dd
f e	j        ddgddgg¦  «         e	j        dgdgg¦  «         e	j        ddgddgg¦  «        dd
f e	j        g d¢g d¢g d¢g d¢g¦  «         e	j        ddgddgddgddgg¦  «         e	j        g d¢g d¢g d¢g d¢g¦  «         e	j        d ¦  «        d
f e	j        g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g d(¢g¦  «         e	j        g d)¢g d*¢g¦  «        j        d+z   e	j        g d,¢g d-¢g d.¢g d/¢g d0¢g d1¢g d2¢g d3¢g¦  «         e	j        d ¦  «        d
f e	j        g d4¢g d5¢g d6¢g d7¢g d8¢g d9¢g d:¢g d;¢g d<¢g	¦  «         e	j        g d=¢g d>¢g d?¢g d@¢g dA¢g dB¢g dB¢g dB¢g dB¢g	¦  «         e	j        d¦  «         e	j        d¦  «        d
fedC         edD         edE         edF         d
f e	j        ddgddGgg¦  «         e	j        dHgdgg¦  «         e	j        dI¦  «        ddJf edKdL¦  «         e	j        dMdNgd+dOgg¦  «         e	j        dPdQgdQdRgg¦  «         e	j        dI¦  «         edHd¦  «        z   d
f e	j        ddSgddgg¦  «         e	j        dgdgg¦  «         e	j        d ¦  «        dd
f e	j        dTdgddTgg¦  «         e	j        d ¦  «         e	j        d ¦  «         e	j        d ¦  «        d
f e	j        ddgdd gg¦  «         e	j        dgdgg¦  «         e	j        dUdVgdVdGgg¦  «        dd
f e	j        g dW¢g dX¢g dY¢g¦  «        dz   e	j        d¦  «         e	j        g dZ¢g d[¢g d\¢g¦  «                              e	j
        g d]¢¦  «        ¦  «                              e	j        g dZ¢g d[¢g d\¢g¦  «        ¦  «        dz   e	j        d¦  «        dSz  d^f e	j        g d_¢g d`¢g da¢g db¢g¦  «         e	j        g dc¢g¦  «        j         e	j
        g dd¢¦  «        dd
f e	j        g de¢g df¢g dg¢g dh¢g¦  «         e	j        di¦  «         e	j        dj¦  «        dd
fedC         edD         edE         edF         d
f e	j        dkdkd¬l¦  «         e	j        dkdk¦  «        dGz  z    e	j         ed e	j        dm¦  «        d¦  «        ¦  «        z    e	j        dkdkd¬l¦  «        z    e	j        dk¦  «         e	j        dk¦  «         e	j        dk¦  «        d
f e	j
         e	j        dn¦  «        d¦  «         e	j         e	j        dod¦  «        ¦  «         e	j        dod¦  «         e	j        dod¦  «        j        z  dd^fedC         edD         edE         edF         d
fedC         edD         edE         edF         d^fedC         edD         edE         edF         d^fgZdpZej                             dq ee¦  «        ¦  «        dr„ ¦   «         Zd
S )sÚTestSolveContinuousArezcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr1   r"   r   r+   Nr%   r$   ç      Àç      Àr:   r&   r6   ç      @©r   r"   r   r   )r   g=
×£p=þ¿gö(\�ÂõØ?g…ëQ¸À)r   gœÄ °rh¡¿g×£p=
×Àgq=
×£p@)gœÄ °rh¡?g/n£¼R¿g®Gáz®ï¿gáz®GáÊ¿g
×£p=
×?gš™™™™™ù¿gffffffî¿gü©ñÒMb ¿g¸…ëQ¸ž?)g/Ý$�@ç7‰A`åÐ@çj¼t“æ?çZd;ßO�—?)rf   g/Ý$�@ç‘í|?5^ò?çyé&1¬Ô?)rg   ri   gÕxé&1Ô?çé&1¬º?)rh   rj   rk   gsh‘í|?µ?r#   )gƒÀÊ¡E¶ï¿g!°rh‘íà?r   r   r   r   r   r   )çNbX9´à?g7‰A`åÐð¿çßO�—nã?r   r   r   r   r   )r   rl   gÙÎ÷Sãñ¿rm   r   r   r   r   )r   r   rl   gøSã¥›Äø¿g`åÐ"Ûùæ?r   r   r   )r   r   r   ç/Ý$�í?g=
×£p=ú¿gÅ °rh‘é?r   r   )r   r   r   r   rn   gð§ÆK7‰û¿g¢E¶óýÔì?r   )r   r   r   r   r   rn   g^ºI+ý¿g¼t“Vð?)r   r   r   r   r   r   rn   gJ+‡ÿ¿)g¸…ëQ¸@rd   gÍÌÌÌÌÌB@ç¤p=
×£@gáz®Gá@g
×£p=
@ro   r2   )g
×£p=
ÀgR¸…ëQÀgffffffÀg�Âõ(\�Àg�Âõ(\�
Àg�Âõ(\�Àg{®GázÀg®Gáz®Àçü©ñÒMbP?)r1   ç        rq   rq   ç      à?rq   rq   çš™™™™™¹?)rq   r1   rq   rq   rs   rq   rq   rq   )rq   rq   r1   rq   rq   rr   rq   rq   )rq   rq   rq   r1   rq   rq   rq   rq   )rr   rs   rq   rq   rs   rq   rq   rq   )rq   rq   rr   rq   rq   rs   rq   rq   )rq   rq   rq   rq   rq   rq   rs   rq   )rs   rq   rq   rq   rq   rq   rq   rs   )	gú~j¼tÀg{®Gáz@rq   rq   g-²�ï§ Àrq   rq   rq   g×£p=
×ë?)	g¾Ÿ/Ý$Ö¿gZd;ßO�ï?rq   rq   g¸…ëQ¸Àrq   rq   rq   g
×£p=
ï?)	g‰A`åÐ¢ÀgªñÒMbÐ.@g-²�ï§FÀrq   gÍÌÌÌÌÌÀrq   rq   rq   gq=
×£p@)	g7‰A`åÐ5Àg!°rh‘ÍA@gV-²Õ¿gö(\�ÂõÀgÍÌÌÌÌÌ1Àrq   rq   rq   g�Âõ(\�@)	g+‡NÀgyé&1ŒX@gTã¥›Ä ÀgÃõ(\�ÂÕ?g/Ý$�JÀrq   rq   rq   gffffff4@)	r   r   r   r   ç     €W@çffffffbÀrq   gš™™™™™J@rq   )	r   r   r   r   r   rt   ru   r   r   )	r   r   r   r   r   çš™™™™™)@rq   çš™™™™™?Àr   )	r   r   r   r   rv   rq   rq   gÍÌÌÌÌÌ2@rw   )ç{®Gáz„?gºI+‡†¿g‡ÙÎ÷SÃ¿)gú~j¼t“h?g/Ý$�•¿rq   )g;ßO�—n‚?gh‘í|?5®¿rq   )gú~j¼t“˜?g#Ûù~j¼Ä¿rq   )gœÄ °rh±?g{®GázÜ¿rq   )rq   rq   rq   ÚAÚBÚQÚRç       Àç�íµ ÷Æ°>©r#   r#   zBad residual accuracygš™™™™™¹¿g{®Gáz”¿rs   rq   rx   éd   iè  i'  ç    €„.Ag›ò×  ð?iõÿÿÿéûÿÿÿ)g    ð³ZAç    €„>Ag       €)rƒ   g    `ãVAç    €„>Á)rq   r„   g    ÐSA)r1   r}   r}   )r}   r1   r}   )r}   r}   r1   )r~   r"   r�   zBad Residual Accuracy)r   gš™™™™™Ù?r   r   )r   r   g®GázÖ?r   )r   g    €ûÁg     aÁg    €ûA)r   r   r   g    €„.Á)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%   é@   ©Úk)é>   r‰   )é   é   )é   r)   é   rŒ   r(   r6   Nr4   r7   rŒ   rŒ   Nr&   rŒ   r�   rŒ   Nr)   NNúj, casec                 óœ  — |\  }}}}}|rt          j        |¬¦  «         | j        |         }t          ||||¦  «        }	|	|z  |                     ¦   «         j        |	z  z   |z   }
|	|z  }|
|t          t          j        |¦  «        |                     ¦   «         j        ¦  «        z  z  }
t          |
t          j
        |
¦  «        |¬¦  «         dS )z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is true©Úreason©ÚdecimalN)ÚpytestÚxfailÚmin_decimalr	   rI   r^   r   r   Ú
atleast_2dr   Ú
zeros_like)rA   ÚjrX   rK   ÚbrL   ÚrÚknownfailureÚdecrM   ÚresÚout_facts               r   Útest_solve_continuous_arez0TestSolveContinuousAre.test_solve_continuous_are&  sÌ   € ð $(Ñ ˆˆ1ˆa��LØð 	.ÝŒL Ð-Ñ-Ô-Ð-àÔ˜qÔ!ˆÝ   A q¨!Ñ,Ô,ˆØ�!‰e�a—f’f‘h”h”j 1‘nÑ$ qÑ(ˆØ�q‘5ˆØˆx�%¥¤¨aÑ 0Ô 0°(·-²-±/´/Ô2CÑDÔDÑDÑDˆÝ! #¥r¤}°SÑ'9Ô'9À3ÐGÑGÔGÐGÐGÐGrE   )rZ   r[   r\   r   Úmat6Úmat15Úmat18Úmat19Úmat20r   Údiagr]   r   r>   r^   r=   rH   Úrot90ÚzerosÚflipudrV   r–   r”   ÚmarkÚparametrizeÚ	enumerater    r_   rE   r   ra   ra   q   s&	  € € € € € Øˆ:Ð(Ñ)Ô)€DØˆJÐ*Ñ+Ô+€EØˆJÐ*Ñ+Ô+€EØˆJÐ*Ñ+Ô+€EØˆJÐ*Ñ+Ô+€Eð 
ˆŒ�"��qÑ	Ô	Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆ�B˜Ñ	Ô	Ø	
Ø	ð		ð 
ˆŒ�A�q�6˜D $˜<Ð(Ñ	)Ô	)Ø	ˆŒ�A�3˜˜�+Ñ	Ô	Ø	ˆŒ�A�q�6˜A˜r˜7Ð#Ñ	$Ô	$Ø	
Ø	ð		ð 
ˆŒ�<�<�<Ø*Ð*Ð*Ø+Ð+Ð+Ø1Ð1Ð1ð3ñ 
4ô 
4ð 
ˆŒ�A�q�6˜D $˜<¨%°¨¸4À¸)ÐDÑ	EÔ	EØ	ˆŒÐ/Ð/Ð/Ø/Ð/Ð/Ø/Ð/Ð/Ø/Ð/Ð/ð1ñ 
2ô 
2ð 
ˆŒ�‰ŒØ	ð
	ð 
ˆŒÐ4Ð4Ð4Ø8Ð8Ð8Ø8Ð8Ð8Ø8Ð8Ð8Ø7Ð7Ð7Ø8Ð8Ð8Ø8Ð8Ð8Ø4Ð4Ð4ð6ñ 
7ô 
7ð 
ˆŒÐDÐDÐDØKÐKÐKðMñ 
ô 
ä˜ñ
ð 
ˆŒÐ;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;Ø;Ð;Ð;ð=ñ 
>ô 
>ð 
ˆŒ�‰ŒØ	ð)	ð, 
ˆŒØ=Ð=Ð=Ø=Ð=Ð=ØBÐBÐBØHÐHÐHØHÐHÐHØ9Ð9Ð9Ø2Ð2Ð2Ø5Ð5Ð5Ø>Ð>Ð>ð@ñ	
Aô 	
Að 
ˆŒÐ*Ð*Ð*Ø)Ð)Ð)Ø)Ð)Ð)Ø)Ð)Ð)Ø)Ð)Ð)Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(Ø(Ð(Ð(ð*ñ 
+ô 
+ð 
ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ð+	ð. 
ˆcŒ�D˜”I˜t Cœy¨$¨s¬)°TÐ:à	ˆŒ�A�q�6˜A˜s˜8Ð$Ñ	%Ô	%Ø	ˆŒ�D�6˜A˜3�-Ñ	 Ô	 Ø	ˆŒ�‰ŒØ	Ø	 ð		"ð 
ˆ�D˜%Ñ	 Ô	 Ø	ˆŒ�E˜5�> E¨5 >Ð2Ñ	3Ô	3Ø	ˆŒ�C˜�;  u Ð.Ñ	/Ô	/Ø	ˆŒ�‰Œ˜:˜: d¨AÑ.Ô.Ñ	.Ø	ð		ð 
ˆŒ�A�s�8˜a ˜VÐ$Ñ	%Ô	%Ø	ˆŒ�A�3˜˜�+Ñ	Ô	Ø	ˆŒ�‰ŒØ	Ø	ð		ð 
ˆŒ�I˜q�> B¨	 ?Ð3Ñ	4Ô	4Ø	ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ð		ð 
ˆŒ�A�r�7˜Q ˜FÐ#Ñ	$Ô	$Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆŒ�C˜�9˜r 3˜iÐ(Ñ	)Ô	)Ø	Ø	ð		ð 
ˆŒÐ,Ð,Ð,Ø2Ð2Ð2Ø,Ð,Ð,ð.ñ 
/ô 
/à12ñ
3ð 
ˆŒ�‰ŒØ	ˆŒ�>�>�> > > >°>°>°>ÐBÑ	CÔ	C×	GÒ	GØ�”˜˜˜Ñ'Ô'ñ
)ô 
)ß),ªØˆBŒH�n�n�n n n n°n°n°nÐEÑFÔFñ*Hô *HØJKñ
Lð 
ˆŒ�‰Œ�S‰Ø	 ð	"ð 
ˆŒ�>�>�>Ø#Ð#Ð#Ø3Ð3Ð3Ø"�?�?ð$ñ 
%ô 
%ð 
ˆŒ�>�>�>Ð"Ñ	#Ô	#Ô	%Ø	ˆŒ���Ñ	Ô	Ø	Ø	ð	ð 
ˆŒÐ#Ð#Ð#Ø$Ð$Ð$Ø"�?�?Ø#Ð#Ð#ð%ñ 
&ô 
&ð 
ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	Ø	ð	ð 
ˆsŒ�U˜3”Z  s¤¨U°3¬Z¸Ð>à	ˆŒ��B˜"Ð	Ñ	Ô	  ¤ r¨2¡¤°Ñ 4Ñ	4°x°r´xØ�˜A˜x˜rœx¨Ñ1Ô1°1Ñ5Ô5ñ87ô 87ñ 
7Ø9?¸¼ÀÀBÈ!Ð9LÑ9LÔ9Lñ
Mà	ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ð	ð 
ˆŒ��”˜‘” !Ñ	$Ô	$Ø	ˆŒ�6�2”6˜"˜a‘=”=Ñ	!Ô	!Ø	ˆŒ��A‰Œ˜˜œ  A™œœÑ	(Ø	
Ø	 ð		"ð 
ˆsŒ�U˜3”Z  s¤¨U°3¬Z¸Ð>à	ˆsŒ�U˜3”Z  s¤¨U°3¬ZØ	 ð	"ð 
ˆsŒ�U˜3”Z  s¤¨U°3¬ZØ	 ð	"ðCc
€EðX>€Kð „[×Ò˜Y¨	¨	°%Ñ(8Ô(8Ñ9Ô9ðHð Hñ :Ô9ðHð Hð HrE   ra   c                   ó  — e Zd Z ej        ddgddgg¦  «         ej        dgdgg¦  «         ej        ddgddgg¦  «         ej        dgg¦  «        df ej        ddgddgg¦  «         ej        dgd	gg¦  «         ej        ddgddgg¦  «         ej        dgg¦  «        df ej        d
dgddgg¦  «         ej        ddgdd
gg¦  «         ej        ddgddgg¦  «         ej        ddgdd
gg¦  «        df ej        g d¢g d¢g d¢g¦  «         ej        dgdgdgg¦  «         ej        d
¦  «         ej        d¦  «        df ej        dd
gddgg¦  «         ej        dgdgg¦  «         ej        ddgddgg¦  «         ej        dgg¦  «        df ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        d dgdd
gg¦  «        df ej        ddgddgg¦  «         ej        dgdgg¦  «         ej        ddgddgg¦  «         ej        dgg¦  «        df ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        d!d!gd!d"gg¦  «        d#z   ej        dd
gd
dgg¦  «        df ej        ddgddgg¦  «         ej        dgdgg¦  «         ej        ddgddgg¦  «         ej        dgg¦  «        df ej        g d$¢g d%¢g d&¢g d'¢g¦  «         ej        d(dgd)d*gd+d,gd-d)gg¦  «         ej        g d.¢g d/¢g d0¢g d1¢g¦  «         ej        d¦  «        df ej        g d2¢g d3¢g d4¢g d5¢g¦  «         ej        d6d7gd8d9gd:d;gd<d=gg¦  «         ej        d¦  «        d>z   ej        d¦  «        df ej        g d?¢g d@¢g dA¢g dB¢g¦  «         ej        g dC¢g dD¢g dE¢g dF¢g¦  «         ej        g dG¢g dH¢g dI¢g dJ¢g¦  «         ej        d¦  «        df ej        g dK¢g dL¢g dM¢g dN¢g dO¢g¦  «        d>z   ej        dPdQgdRdSgdTdUgdVdWgdXdYgg¦  «        d>z   ej        dZ¦  «         ej        d¦  «        df ej         ej        d¦  «         ej        ddgd¬[¦  «        ¦  «         ej         ej        d¦  «         ej        dgdgdgg¦  «        ¦  «         ej        g d\¢g d\¢g d]¢g d^¢g d_¢g d]¢g¦  «         ej        d
dgddgg¦  «        dfd` ej        g da¢g db¢g dc¢g dd¢g de¢g df¢g dg¢g dh¢g di¢g	¦  «        z   ej        g dj¢g dk¢g dl¢g dm¢g dn¢g do¢g dp¢g dq¢g dr¢g	¦  «        d`z   ej        g ds¢¦  «         ej        d
¦  «        df ej        ddtgddgg¦  «         ej        dgdgg¦  «         ej        d¦  «         ej        dgg¦  «        df ej        g du¢g dv¢g dw¢g¦  «        dxz   ej        d
¦  «        dt ej        d
¦  «        z  dt ej        d
¦  «        z  df ej        g dy¢g dz¢g d{¢g d|¢g¦  «         ej        d}gdgdgdgg¦  «         ej        g d~¢¦  «         ej        dgg¦  «        df ej        d€d¬[¦  «         ej         ej        d€d¦  «        ¦  «         ej        d€¦  «         ej        dgg¦  «        dfgZ	d�Z
d‚„ e
D ¦   «         Zdƒed„<   ded…<   d†ed‡<   ej                             dˆ ee	¦  «        ¦  «        d‰„ ¦   «         ZdŠ„ ZdS )‹ÚTestSolveDiscreteArer#   y      ð?       Àr   y       €      Àr"   Nr:   y       €       Àù              ð?r$   r*   y      ð?      ð¿ù               @)gÑX=X­Iä?gPÂŽ÷‘á?g¿'9Ô­fè?)gú»Ò�Ká?gõèhÚ2á?g¸N¯Ö�Z¶?)gSÒŠ�Ñ?gè½s Ò,ë?g^LŽ–^öÝ?g•=Sùèþî?gÃþ>%ßS¬?gˆåòFBé?r%   rb   rc   r&   r6   g ‘~û:pî?g2w-!ôì?g5^ºI‚@gÕxé&1ó¿gZd;ßO�@g{®Gázt?g{®Gáz”?gUUUUUUÕ?éüÿÿÿr7   gF]tÑE·?)çV-²�ïï?gôýÔxé&±?r   r   )gôýÔxé&±¿r²   r   r   )r   r   r²   g/Ý$�•Ã?)r   r   g/Ý$�•Ã¿r²   gF%ušk?rs   gÇº¸�ðF¿g{®Gáz¤?gŸ<,Ôšæ}?gÇº¸�ðf¿)gìQ¸…ëý?r   r   ç¬Zd;Ï¿)r   g+‡ÙÎç?ç=
×£p=Ê?r   )r   r´   g+‡Ùâ?r   )r³   r   r   gøSã¥›Äð?)gP�—nƒï?gŒ/Úã…t´¿gúéä±«M?g[AÓ+£Q¿)g†åÏ·K¥?gHþ`à¹÷ï?g$ÑË(–[¢¿g°¯u©ú‰?)gYÝê9é}á¿g¦_"Þ:ÿ¦?g!å'Õ>Õ¿gCâKºÈ?)g”ö_˜L@geâX·¹¿g ‰°áé•í¿g+‡ÙÐ¿gÅ Tófn?g`[š¶ÚH?gQ‡nùH¶¿g	v÷–ã>gé}ãkÏ,ó¿gÒUW‘;¿g{ƒ/L¦Š	ÀgOšaþeRN?rx   )g333333ã¿gš™™™™™ÀgÍÌÌÌÌÌÀgÍ>�Qž™À)r1   g333333ã?gš™™™™™é?gÍèGÃ)3@)rq   r1   gÍÌÌÌÌÌü?g {ö\f@)rq   rq   rq   ggÖR@Úÿï¿)r1   r3   r3   r3   )rq   r1   r3   r3   )rq   rq   r1   r3   )rq   rq   rq   r1   )r#   r"   r$   r6   )r"   r#   r#   r4   )r$   r#   r6   r(   )r6   r4   r(   é   )g5^ºIÚW@gY†8ÖÅmÿ?g¾Á&S×?g&S£’:±?gÛù~j¼t“?)gé&1¬lD@gj¼t“¨D@g/Ý$�0@g�1w-!ß@geª`TR'ó?)gÉv¾Ÿo(@gú~j¼tS:@gP�—nB@g\�Âõ(Ü/@gj¼t“Ä(@)gmÅþ²{r@gžï§ÆK·)@g/Ý$�5;@gþÔxé&q5@g°rh‘í|D@)gNbX9´À?g ‰°áé•â?g      þ?g’\þCúí@gR¸…ë‘W@gñôJY†8¦?gðHPüˆ¿g›æ§èH@g$(~Œ¹ð¿g /Ý$@g
×£p=
Àg•eˆc]Ü@gffffffÀgx$(~ŒÝ?gƒ/L¦
Fí¿r4   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   rp   )	gÍÌÌÌÌ0‹@g     à`@g®Gáz.'@g]ÜFxà?g\�Âõ(œBÀg#J{ƒ/LÖ?r   g+‡ÙÎ÷@gåÐ"Ûùþ@)	g33333#S@g33333Œ@gq=
×£p)@g"ýöuàœá?g®GázDÀg£#¹ü‡ô×?r   g…ëQ¸@gåÐ"Ûùþ@)	gÍÌÌÌÌÌ_Àg     Xv@i1  gHáz®G÷?g33333³YÀg/Ý$�•ï?r   g33333³'@g¸…ëQ¸2@)	g     ¸vÀg33333Ïƒ@g
×£p=ºR@gÍÌÌÌÌäˆ@g     qÀgÓMbX9@r   g¸…ëQ¸?@g)\�ÂõhH@)	i@üÿÿgš™™™™·™@gÍÌÌÌÌ`ÀgÙÎ÷ScÀg{®GáÚQ@g;ßO�—n@r   gáz®G!U@gš™™™™y_@)	g33333Ã„Àg=
×£p=\@g)\�Âõ8VÀg¢E¶óýÔÀg®GázU@g333333+@r   gš™™™™	b@gffffffY@)	g33333£yÀiµ  g{®GáZKÀg+‡ÙÎ÷Àg�Âõ(\ŸP@g{®Gáú(@g¼–�z6»?g®GázþX@g{®GájQ@)	gÍÌÌÌÌ|fÀg33333Ûr@g®Gázî7Àg�Âõ(\�ð¿gìQ¸…KN@g)\�Âõ(6@r   gÍÌÌÌÌ¼j@g…ëQ¸ÅA@)	gš™™™™‘uÀg33333#‚@g{®GáúFÀgmçû©ñÒÿ¿gffffffZ@g\�Âõ(Ü3@r   g33333ck@gfffffæj@)g
×£p=
@g cîZB>â¿gìQ¸…ëTÀ)gTã¥›Ä ì?gd;ßO�Àg×£p=
×À)gƒÀÊ¡E¶÷?g=
×£p=*Àg�—nƒÀ!@)g‰A`åÐ"@gq=
×£�AÀgÍÌÌÌÌÌ8@)g®Gáz®$@g     0WÀg33333³P@)gZd;ßÏ@gìQ¸…ËNÀgìQ¸…+C@)g7‰A`åÐ@g
×£p=jBÀg
×£p=J4@)gð§ÆK7‰ÿ?g®Gáz/Àgsh‘í|¿@)gÉv¾Ÿ/@gHáz®G>Àgáz®Ga-@)	é2   r   r   r   r¶   r   r   r   r   r�   )é   r'   éþÿÿÿ)r'   r�   éøÿÿÿ)r¸   r¹   r7   gÇqÇq¼?)gGœ¡úÿÿï?r   r   r   )r"   r   r   r   re   )r   r   r"   r   g:Œ0âŽyE>)r   r   r   r"   g      Ð?r€   )r)   rŒ   r�   rŒ   r�   r·   é   rŒ   rŒ   r�   rŒ   r�   r�   rŒ   r)   r#   r%   r6   r'   c                 ó    — g | ]}d d| z  z  ‘ŒS )g      ø?r'   r_   )Ú.0Úinds     r   ú
<listcomp>zTestSolveDiscreteAre.<listcomp>ÿ  s"   € Ð5Ð5Ð5 #ˆs�R˜#˜‘X‰~Ð5Ð5Ð5rE   gê-�™—Q=r(   é   g-Cëâ6*?r·   rŽ   c                 óÆ  — |\  }}}}}|rt          j        |¬¦  «         | j        |         }t          ||||¦  «        }	|                     ¦   «         j        }
|	|z  |	|z  }}|                     ¦   «         j        |z  |	z
  |z   }||                     ¦   «         j        |z  t          ||
|z  z   |
¦  «        |z  z  z  }t          |t          j	        |¦  «        |¬¦  «         dS )ú5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truer�   ©ÚatolN)
r”   r•   Úmax_tolr
   rI   r^   r   r   r   r˜   )rA   r™   rX   rK   rš   rL   r›   rœ   rÃ   rM   ÚbHÚxaÚxbrž   s                 r   Útest_solve_discrete_arez,TestSolveDiscreteAre.test_solve_discrete_are  så   € ð $(Ñ ˆˆ1ˆa��LØð 	.ÝŒL Ð-Ñ-Ô-Ð-àŒ|˜AŒˆå˜q ! Q¨Ñ*Ô*ˆØ�VŠV‰XŒXŒZˆØ�Q‘˜˜A™ˆBˆà�fŠf‰hŒhŒj˜2‰o Ñ! AÑ%ˆØˆq�vŠv‰xŒxŒz˜B‰¥%¨¨B°©G©°RÑ"8Ô"8¸2Ñ"=Ñ>Ñ>ˆõ 	˜�Rœ]¨3Ñ/Ô/°dÐ;Ñ;Ô;Ð;Ð;Ð;rE   c                 óZ  — t          j        t          j        d¦  «        ¦  «        }d|d<   t          j        g d¢g d¢g¦  «        j        }t          j        |d¦  «        t          j        g d¢¦  «        z   }t          j        dd	g¦  «        }t          t          t          ||||¦  «         d S )
N©r$   r$   r:   )r   r"   )r"   r"   r   )r   r   r"   r¸   )r5   r:   gffffffþ¿iöÿÿÿrs   )
r   Útriur=   r]   r^   Ú	full_liker¦   r?   r   r	   )rA   ry   rz   r{   r|   s        r   Útest_infeasiblez$TestSolveDiscreteAre.test_infeasible!  s—   € åŒG•B”G˜F‘O”OÑ$Ô$ˆØˆˆ$‰ÝŒH�i�i�i   Ð+Ñ,Ô,Ô.ˆÝŒL˜˜BÑÔ¥"¤'¨-¨-¨-Ñ"8Ô"8Ñ8ˆÝŒG�S˜#�JÑÔˆÝ•kÕ#7¸¸A¸qÀ!ÑDÔDÐDÐDÐDrE   )rZ   r[   r\   r   r]   r>   Úkronr¦   r©   rV   r–   rÄ   r”   rª   r«   r¬   rÈ   rÍ   r_   rE   r   r®   r®   5  s  € € € € € ð  
ˆŒ�A�t�9˜q #˜hÐ'Ñ	(Ô	(Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3�%‰ŒØ	ð		ð 
ˆŒ�A�q�6˜A˜r˜7Ð#Ñ	$Ô	$Ø	ˆŒ�C�5˜2˜$�-Ñ	 Ô	 Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3�%‰ŒØ	ð		ð 
ˆŒ�A�q�6˜A˜r˜7Ð#Ñ	$Ô	$Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�t�9˜t Q˜iÐ(Ñ	)Ô	)Ø	ˆŒ�A�s�8˜b !˜WÐ%Ñ	&Ô	&Ø	ð		ð 
ˆŒÐ7Ð7Ð7Ø6Ð6Ð6Ø6Ð6Ð6ð8ñ 
9ô 
9ð 
ˆŒ�J�< * °
¨|Ð<Ñ	=Ô	=Ø	ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ð	ð 
ˆŒ�A�q�6˜D $˜<Ð(Ñ	)Ô	)Ø	ˆŒ�A�3˜˜�+Ñ	Ô	Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3�%‰ŒØ	ð		ð 
ˆŒ�F˜A�;  F Ð,Ñ	-Ô	-Ø	ˆŒ�E˜5�> G¨UÐ#3Ð4Ñ	5Ô	5Ø	ˆŒ�E˜1�:  4˜yÐ)Ñ	*Ô	*Ø	ˆŒ�C˜�8˜a ˜VÐ$Ñ	%Ô	%Ø	ð		ð 
ˆŒ�A�r�7˜Q ˜FÐ#Ñ	$Ô	$Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3�%‰ŒØ	ð		ð 
ˆŒ�A�q�6˜A˜r˜7Ð#Ñ	$Ô	$Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�B˜�8˜b !˜WÐ%Ñ	&Ô	&¨$Ñ	/Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ð		ð 
ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�3�%‰ŒØ	ð		ð 
ˆŒÐ'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'ð)ñ 
*ô 
*ð 
ˆŒ�F˜FÐ#Ø˜FÐ#Ø˜FÐ#Ø˜FÐ#ð%ñ 
&ô 
&ð 
ˆŒÐ'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø(Ð(Ð(ð*ñ 
+ô 
+ð 
ˆŒ�‰ŒØ	ð	ð 
ˆŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@ð 
ˆŒ�I˜yÐ)Ø˜yÐ)Ø˜zÐ*Ø˜yÐ)ð+ñ 
,ô 
,ð 
ˆŒ�‰Œ�4‰Ø	ˆŒ�‰ŒØ	ð
	ð 
ˆŒÐCÐCÐCØ?Ð?Ð?Ø?Ð?Ð?Ø@Ð@Ð@ðBñ 
Cô 
Cð 
ˆŒÐ*Ð*Ð*Ø)Ð)Ð)Ø(Ð(Ð(Ø'Ð'Ð'ð)ñ 
*ô 
*ð 
ˆŒ�<�<�<Ø�<�<Ø �=�=Ø!�>�>ð#ñ 
$ô 
$ð 
ˆŒ�‰ŒØ	ð	ð 
ˆŒÐ<Ð<Ð<Ø>Ð>Ð>Ø@Ð@Ð@Ø?Ð?Ð?Ø<Ð<Ð<ð	>ñ 
?ô 
?ð BFñ	
Fð
 
ˆŒ�F˜GÐ$Ø˜GÐ$Ø˜GÐ$Ø˜GÐ$Ø˜GÐ$ð	&ñ 
'ô 
'ð *.ñ	
.ð
 
ˆŒ�‰ŒØ	ˆŒ�‰ŒØ	ð	ð 
ˆŒ��”˜‘”˜G˜BœG Q¨ F¨aÐ0Ñ0Ô0Ñ	1Ô	1Ø	ˆŒ��”˜‘”˜H˜BœH q c¨A¨3°° _Ñ5Ô5Ñ	6Ô	6Ø	ˆŒÐ%Ð%Ð%Ø%Ð%Ð%Ø%Ð%Ð%Ø&Ð&Ð&Ø&Ð&Ð&Ø%Ð%Ð%ð'ñ 
(ô 
(ð 
ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ð		ð 
��”Ø
FÐ
FÐ
FØ
FÐ
FÐ
FØ
DÐ
DÐ
DØ
GÐ
GÐ
GØ
GÐ
GÐ
GØ
HÐ
HÐ
HØ
JÐ
JÐ
JØ
HÐ
HÐ
HØ
HÐ
HÐ
Hð
Jñ	Kô 	Kñ 	
Kð 
ˆŒÐ.Ð.Ð.Ø-Ð-Ð-Ø-Ð-Ð-Ø.Ð.Ð.Ø/Ð/Ð/Ø.Ð.Ð.Ø.Ð.Ð.Ø-Ð-Ð-Ø.Ð.Ð.ð0ñ 
1ô 
1ð 49ñ
9ð 
ˆŒÐ.Ð.Ð.Ñ	/Ô	/Ø	ˆŒ�‰ŒØ	ð+	ð. 
ˆŒ�A�s�8˜a ˜VÐ$Ñ	%Ô	%Ø	ˆŒ�A�3˜˜�*Ñ	Ô	Ø	ˆŒ�‰ŒØ	ˆŒ�A�3�%‰ŒØð		ð 
ˆŒ�<�<�<Ø�,�,Ø�+�+ðñ 
 ô 
 à#&ñ
(ð 
ˆŒ�‰ŒØ	ˆvˆrŒv�a‰yŒy‰Ø	ˆvˆrŒv�a‰yŒy‰Øð	ð 
ˆŒÐ'Ð'Ð'Ø�,�,Ø�,�,Ø�,�,ð ñ 
!ô 
!ð 
ˆŒ�E�7˜Q˜C !  q cÐ*Ñ	+Ô	+Ø	ˆŒ���Ñ	Ô	Ø	ˆŒ�D�6�(Ñ	Ô	Ø	ð	ð 
ˆŒ��qÐ	Ñ	Ô	Ø	ˆŒ�6�2”6˜#˜q‘>”>Ñ	"Ô	"Ø	ˆŒ�‰ŒØ	ˆŒ�A�3�%‰ŒØ	ð		ðq}
€EðN4€Kà5Ð5¨Ð5Ñ5Ô5€Gà€GˆB�Kð €GˆB�Kð €GˆB�Kà„[×Ò˜Y¨	¨	°%Ñ(8Ô(8Ñ9Ô9ð<ð <ñ :Ô9ð<ð*Eð Eð Eð Eð ErE   r®   c                  óž  — t          j        g d¢g d¢g d¢g¦  «        t          j        ddgddgdd	gg¦  «        t          j        d
¦  «        t          j        d¦  «        t          j        g d¢g d¢g d¢g¦  «        t          j        d¦  «        d ft          j        g d¢g d¢g d¢g¦  «        t          j        ddgddgdd	gg¦  «        t          j        d
¦  «        t          j        d¦  «        t          j        g d¢g d¢g d¢g¦  «        t          j        d¦  «        d fg} d}d„ }t          | ¦  «        D ]\  }} ||||         ¦  «         Œd S )N©g?§ ?¹Ñ?g[,ÄYê?g¾÷7hî?©g;)ÄÆ£§?g7j*0	<æ?gÉš&¦ê¢¡?©g�”€Ú Ý¸?g*ý„³[KÔ?g¯fSdcÜ?ç6±ÀWtkØ?çÞ]ÂüpëÇ?çý;‘è?ç¯/ÈLXß?çÿ	‰Gré?çm!#û{„Ü?r$   r#   ©gGY¿™˜®ä?g X.eªÑ?g6¹ÎuÐÄ?©gåßÏ³æ?gÀpàÀå?g¡™Ì¢v¾?©g»<ç¸d&è?gª™µ�öä?gÂÀ‰2åß?r<   )r'   r'   c                 óÞ  — | \  }}}}}}}|rt          j        |¬¦  «         t          ||||||¦  «        }	|                     ¦   «         j                             |	                     |¦  «        ¦  «        |                     ¦   «         j                             |	                     |¦  «        ¦  «        z   |z   }
|                     ¦   «         j                             |	¦  «                             |¦  «        |z   }|
|                     t          t          j        |¦  «        |                     ¦   «         j        ¦  «        ¦  «        z  }
t          |
t          j
        |
¦  «        |¬¦  «         dS )rÁ   r�   r’   N)r”   r•   r	   rI   r^   rH   r   r   r—   r   r˜   )rX   r�   rK   rš   rL   r›   ÚeÚsrœ   rM   rž   rŸ   s               r   Ú_test_factoryz<test_solve_generalized_continuous_are.<locals>._test_factoryM  s  € à)-Ñ&ˆˆ1ˆa��A�q˜,Øð 	.ÝŒL Ð-Ñ-Ô-Ð-å   A q¨!¨Q°Ñ2Ô2ˆØ�fŠf‰hŒhŒj�nŠn˜QŸUšU 1™XœXÑ&Ô&¨¯ª©¬¬¯ª¸¿º¸a¹¼Ñ)AÔ)AÑAÀAÑEˆØ—6’6‘8”8”:—>’> !Ñ$Ô$×(Ò(¨Ñ+Ô+¨aÑ/ˆØˆx�|Š|�E¥"¤-°Ñ"2Ô"2°H·M²M±O´OÔ4EÑFÔFÑGÔGÑGˆÝ! #¥r¤}°SÑ'9Ô'9À3ÐGÑGÔGÐGÐGÐGrE   )r   r]   r>   r¨   r=   r¬   )rV   r–   rß   r½   rX   s        r   Ú%test_solve_generalized_continuous_arerà   +  sá  € õ 
ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�L ,Ð/Ø  ,Ð/Ø  ,Ð/ð1ñ 
2ô 
2õ 
Œ�‰ŒÝ	Œ�‰ŒÝ	ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�&Ñ	Ô	Ø	ð	õ 
ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�L ,Ð/Ø  ,Ð/Ø  ,Ð/ð1ñ 
2ô 
2õ 
Œ�‰ŒÝ	Œ�‰ŒÝ	ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�‰ŒØ	ð	ð!
€Eð> €Kð
Hð 
Hð 
Hõ ˜uÑ%Ô%ð .ð .‰	ˆˆTØˆ�d˜K¨Ô,Ñ-Ô-Ð-Ð-ð.ð .rE   c                  ó  — t          d¦  «        } t          j        g d¢g d¢g d¢g¦  «        t          j        ddgddgd	d
gg¦  «        t          j        d¦  «        t          j        d¦  «        t          j        g d¢g d¢g d¢g¦  «        t          j        d¦  «        d ft          j        g d¢g d¢g d¢g¦  «        t          j        ddgddgd	d
gg¦  «        t          j        d¦  «        t          j        d¦  «        t          j        g d¢g d¢g d¢g¦  «        t          j        d¦  «        d f| d         | d         | d         | d         d | d         d fg}d}d„ }t          |¦  «        D ]\  }} ||||         ¦  «         Œd S )Nzgendare_20170120_data.npzrÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   r$   r#   rÙ   rÚ   rÛ   r<   ry   rz   r{   r|   ÚS)çpé~°=rã   g…xÝD\8¹<c                 ó$  — | \  }}}}}}}|rt          j        |¬¦  «         t          ||||||¦  «        }	|€t          j        |j        d         ¦  «        }|€t          j        |¦  «        }|                     ¦   «         j         	                    |	 	                    |¦  «        ¦  «        |                     ¦   «         j         	                    |	 	                    |¦  «        ¦  «        z
  |z   }
|
|                     ¦   «         j         	                    |	 	                    |¦  «        ¦  «        |z    	                    t          ||                     ¦   «         j         	                    |	 	                    |¦  «        ¦  «        z   |                     ¦   «         j         	                    |	 	                    |¦  «        ¦  «        |                     ¦   «         j        z   ¦  «        ¦  «        z  }
t          |
t          j        |
¦  «        |¬¦  «         dS )rÁ   r�   Nr   rÂ   )r”   r•   r
   r   r>   Úshaper˜   rI   r^   rH   r   r   )rX   rÃ   rK   rš   rL   r›   rÝ   rÞ   rœ   rM   rž   s              r   rß   z:test_solve_generalized_discrete_are.<locals>._test_factoryŠ  s“  € à)-Ñ&ˆˆ1ˆa��A�q˜,Øð 	.ÝŒL Ð-Ñ-Ô-Ð-å˜q ! Q¨¨1¨aÑ0Ô0ˆØˆ9Ý”�q”w˜q”zÑ"Ô"ˆAØˆ9Ý”˜aÑ Ô ˆAØ�fŠf‰hŒhŒj�nŠn˜QŸUšU 1™XœXÑ&Ô&¨¯ª©¬¬¯ª¸¿º¸a¹¼Ñ)AÔ)AÑAÀAÑEˆØ�—’‘””
—’˜qŸušu Q™xœxÑ(Ô(¨1Ñ,×1Ò1Ý˜!˜AŸFšF™HœHœJŸNšN¨1¯5ª5°©8¬8Ñ4Ô4Ñ4ØŸ6š6™8œ8œ:Ÿ>š>¨!¯%ª%°©(¬(Ñ3Ô3°a·f²f±h´h´jÑ@ñô ñô ñ 	ˆõ 	˜�Rœ]¨3Ñ/Ô/°dÐ;Ñ;Ô;Ð;Ð;Ð;rE   )r   r   r]   r>   r¨   r=   r¬   )Úmat20170120rV   Úmax_atolrß   r½   rX   s         r   Ú#test_solve_generalized_discrete_arerè   ]  s!  € ÝÐ8Ñ9Ô9€Kõ
 
ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�L ,Ð/Ø  ,Ð/Ø  ,Ð/ð1ñ 
2ô 
2õ 
Œ�‰ŒÝ	Œ�‰ŒÝ	ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�&Ñ	Ô	Ø	ð	õ 
ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�L ,Ð/Ø  ,Ð/Ø  ,Ð/ð1ñ 
2ô 
2õ 
Œ�‰ŒÝ	Œ�‰ŒÝ	ŒÐ=Ð=Ð=Ø=Ð=Ð=Ø=Ð=Ð=ð?ñ 
@ô 
@õ 
Œ�‰ŒØ	ð	ð 
�SÔ	Ø	�SÔ	Ø	�SÔ	Ø	�SÔ	Ø	Ø	�SÔ	Ø	ð	ð?&
€EðP +€Hð<ð <ð <õ, ˜uÑ%Ô%ð +ð +‰	ˆˆTØˆ�d˜H SœMÑ*Ô*Ð*Ð*ð+ð +rE   c                  ó$   — d„ } d„ }d„ }d„ }d„ }d S )Nc            
      óB  — t          j        d¦  «        } t          j        d¦  «        }t          t          fD ]g}t          t          || ddd¦  «         t          t          |||| d¦  «         t          t          ||||| ¦  «         t          t          |||||| ¦  «         Œhd S )Nr<   r$   r"   ©r   r=   r>   r	   r
   r?   r@   ©rB   rC   rM   s      r   Útest_square_shapez1test_are_validate_args.<locals>.test_square_shape¦  s    € ÝŒg�f‰oŒoˆÝŒV�A‰YŒYˆÝ&Õ(:Ð;ð 	>ð 	>ˆAÝ�* a¨¨a°°AÑ6Ô6Ð6Ý�* a¨¨R°°aÑ8Ô8Ð8Ý�* a¨¨R°°SÑ9Ô9Ð9Ý�* a¨¨R°°R¸Ñ=Ô=Ð=Ð=ð		>ð 	>rE   c                  óä  — t          j        d¦  «        } t          j        d¦  «        }t          t          fD ]¸}t          t          ||| dd¦  «         t          t          ||||||| ¦  «         t          t          |||t          j        d¦  «        |¦  «         t          t          ||||t          j        d¦  «        ¦  «         t          t          |||||t          j        d¦  «        ¦  «         Œ¹d S )Nr<   r%   r"   r$   rë   rì   s      r   Útest_compatible_sizesz5test_are_validate_args.<locals>.test_compatible_sizes¯  sØ   € ÝŒg�f‰oŒoˆÝŒV�A‰YŒYˆÝ&Õ(:Ð;ð 	Dð 	DˆAÝ�* a¨¨S°!°QÑ7Ô7Ð7Ý�* a¨¨R°°R¸¸SÑAÔAÐAÝ�* a¨¨Rµ´¸±´¸BÑ?Ô?Ð?Ý�* a¨¨R°µR´V¸A±Y´YÑ?Ô?Ð?Ý�* a¨¨R°°R½¼À¹¼ÑCÔCÐCÐCð	Dð 	DrE   c            	      ó  — t          j        d¦  «                             dd¦  «        } t          j        d¦  «        }t          t
          fD ]4}t          t          |||| |¦  «         t          t          ||||| ¦  «         Œ5d S )Nr&   r$   )r   ÚarangeÚreshaper>   r	   r
   r?   r@   )ÚnsymÚsymrM   s      r   Útest_symmetryz-test_are_validate_args.<locals>.test_symmetry¹  s~   € ÝŒy˜‰|Œ|×#Ò# A qÑ)Ô)ˆÝŒf�Q‰iŒiˆÝ&Õ(:Ð;ð 	>ð 	>ˆAÝ�* a¨¨c°4¸Ñ=Ô=Ð=Ý�* a¨¨c°3¸Ñ=Ô=Ð=Ð=ð	>ð 	>rE   c            
      ó
  — t          j        dd¦  «        } | dxx         dz  cc<   t          j        d¦  «        }t          t          fD ]}t          t          |||||| ¦  «         Œt          t          t          |||| ¦  «         d S )NrÊ   g   ¢”mBr   r"   r$   )r   Úfullr>   r	   r
   r?   r@   )ÚsingrC   rM   s      r   Útest_singularityz0test_are_validate_args.<locals>.test_singularityÀ  s†   € ÝŒw�v˜tÑ$Ô$ˆØˆTˆ
ˆ
Œ
�a‰ˆ
ˆ
‰
ÝŒV�A‰YŒYˆÝ&Õ(:Ð;ð 	?ð 	?ˆAÝ�* a¨¨R°°R¸Ñ>Ô>Ð>Ð>å•jÕ"6¸¸BÀÀDÑIÔIÐIÐIÐIrE   c                  óÀ  — t          j        dt           j        ¦  «        } t          j        d¦  «        }t          t
          fD ]›}t          t          || |||¦  «         t          t          ||| ||¦  «         t          t          |||| |¦  «         t          t          ||||| ¦  «         t          t          |||||| ¦  «         t          t          ||||||| ¦  «         Œœd S )Nr   r#   )r   r÷   Únanr>   r	   r
   r?   r@   )ÚnmrC   rM   s      r   Útest_finitenessz/test_are_validate_args.<locals>.test_finitenessÉ  sÞ   € ÝŒW�V�RœVÑ$Ô$ˆÝŒV�A‰YŒYˆÝ&Õ(:Ð;ð 	Að 	AˆAÝ�* a¨¨R°°RÑ8Ô8Ð8Ý�* a¨¨R°°RÑ8Ô8Ð8Ý�* a¨¨R°°RÑ8Ô8Ð8Ý�* a¨¨R°°RÑ8Ô8Ð8Ý�* a¨¨R°°R¸Ñ<Ô<Ð<Ý�* a¨¨R°°R¸¸RÑ@Ô@Ð@Ð@ð	Að 	ArE   r_   )rí   rï   rõ   rù   rý   s        r   Útest_are_validate_argsrþ   ¤  sb   € ð>ð >ð >ðDð Dð Dð>ð >ð >ðJð Jð Jð	Að 	Að 	Að 	Að 	ArE   c                   ó`  — e Zd Z ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        dd	gd
dgg¦  «        f ej        g d¢g d¢g d¢g d¢g¦  «         ej        g d¢g d¢g d¢g d¢g¦  «         ej        g d¢g d¢g d¢g d¢g¦  «        f ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        dd gd!dgg¦  «        f ej        d"dgddgg¦  «         ej        ddgddgg¦  «         ej        dd gd!dgg¦  «        f ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        dd gd!dgg¦  «        f ej        ddgddgg¦  «         ej        ddgddgg¦  «         ej        ddgddgg¦  «        f ej        g d#¢g d$¢g d%¢g¦  «         ej        dd&gddgg¦  «         ej        ddgd&dgddgg¦  «        f ej        g d'¢g d$¢g d%¢g¦  «         ej        dd&gdd(gg¦  «         ej        ddgd&d)gd*d+gg¦  «        fgZd,„ Zd-„ Zd.„ Zd/S )0ÚTestSolveSylvesterr"   r#   r   r%   r4   r6   r5   r&   r'   r(   r)   )r1   r   r   r   )r   r1   r+   rq   )r   r   r2   r±   )r   r   r#   r4   )r+   r   r   r1   )r   r1   rq   rq   )r   r   r1   r:   )r   r   r"   r"   )r   r1   r   r   )r   r   r1   r   )r   r   r   r1   r*   r+   r,   r-   r3   r°   r2   rd   r.   r/   r0   r1   )r5   r"   r6   )r$   r4   r7   )r%   r&   r#   r$   )r5   r¯   y      @       @y      @      ð¿y              @y              @y      @      @c                 óš   — t          |||¦  «        }t          t          j        ||¦  «        t          j        ||¦  «        z   |¦  «         d S rG   )r   r   r   rH   ©rA   rK   rš   ÚcrM   s        r   Ú
check_casezTestSolveSylvester.check_case  sB   € Ý˜A˜q !Ñ$Ô$ˆÝ!¥"¤&¨¨A¡,¤,µ´¸¸1±´Ñ"=¸qÑAÔAÐAÐAÐArE   c                 ól   — | j         D ]+}|                      |d         |d         |d         ¦  «         Œ,d S )Nr   r"   r#   )rV   r  rW   s     r   rY   zTestSolveSylvester.test_cases  sB   € Ø”Jð 	7ð 	7ˆDØ�OŠO˜D œG T¨!¤W¨d°1¬gÑ6Ô6Ð6Ð6ð	7ð 	7rE   c                 óL  — t          j        ddgddgg¦  «        }t          j        dgg¦  «        }t          j        ddg¦  «                             dd¦  «        }t          |||¦  «        }t	          |t          j        ddg¦  «                             dd¦  «        ¦  «         d S )Nr1   rq   r+   r:   r"   )r   r]   rò   r   r   r  s        r   Útest_trivialzTestSolveSylvester.test_trivial  s™   € ÝŒH�s˜C�j 3¨ *Ð-Ñ.Ô.ˆÝŒH�s�e�WÑÔˆÝŒH�c˜3�ZÑ Ô ×(Ò(¨¨QÑ/Ô/ˆÝ˜A˜q !Ñ$Ô$ˆÝ! !¥R¤X¨s°C¨jÑ%9Ô%9×%AÒ%AÀ"ÀaÑ%HÔ%HÑIÔIÐIÐIÐIrE   N)	rZ   r[   r\   r   r]   rV   r  rY   r  r_   rE   r   r   r   Õ  s�  € € € € € ð 
ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�r�7˜R ˜HÐ%Ñ	&Ô	&ð	(ð
 
ˆŒ�>�>�>Ø%Ð%Ð%Ø"�?�?Ø�<�<ð!ñ 
"ô 
"ð 
ˆŒÐ#Ð#Ð#Ø%Ð%Ð%Ø"�?�?Ø�<�<ð!ñ 
"ô 
"ð 
ˆŒ�>�>�>Ø!�>�>Ø!�>�>Ø!�>�>ð#ñ 
$ô 
$ð	%ð 
ˆŒ�F˜C�= 8¨S /Ð2Ñ	3Ô	3Ø	ˆŒ�D˜"�:  S˜zÐ*Ñ	+Ô	+Ø	ˆŒ�F˜FÐ# g¨s ^Ð4Ñ	5Ô	5ð	7ð 
ˆŒ�C˜�:  S˜zÐ*Ñ	+Ô	+Ø	ˆŒ�D˜!�9˜s C˜jÐ)Ñ	*Ô	*Ø	ˆŒ�F˜FÐ# g¨s ^Ð4Ñ	5Ô	5ð	7ð 
ˆŒ�F˜C�= 8¨S /Ð2Ñ	3Ô	3Ø	ˆŒ�D˜!�9˜s C˜jÐ)Ñ	*Ô	*Ø	ˆŒ�F˜FÐ# g¨s ^Ð4Ñ	5Ô	5ð	7ð 
ˆŒ�F˜C�= 8¨S /Ð2Ñ	3Ô	3Ø	ˆŒ�D˜!�9˜s C˜jÐ)Ñ	*Ô	*Ø	ˆŒ�C˜�:  c˜{Ð+Ñ	,Ô	,ð	.ð 
ˆŒ�9�9�9˜i˜i˜i¨¨¨Ð3Ñ	4Ô	4Ø	ˆŒ�A�q�6˜A˜q˜6Ð"Ñ	#Ô	#Ø	ˆŒ�A�q�6˜A˜q˜6 A q 6Ð*Ñ	+Ô	+ð	-ð 
ˆŒ�=�=�= ) ) )¨Y¨Y¨YÐ7Ñ	8Ô	8Ø	ˆŒ�A�q�6˜A˜t˜9Ð%Ñ	&Ô	&Ø	ˆŒ�A�r�7˜Q ˜G b¨$ ZÐ0Ñ	1Ô	1ð	3ðQ+€EðZBð Bð Bð7ð 7ð 7ðJð Jð Jð Jð JrE   r   )r   Únumpyr   Únumpy.testingr   r   r”   r   r?   Úscipy.linalgr   r   r   r	   r
   r   r   r   Úscipy.sparse._sputilsr   r   r!   ra   r®   rà   rè   rþ   r   r_   rE   r   ú<module>r     së  ðØ 	€	€	€	Ø Ð Ð Ð à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ €€€Ø *Ð *Ð *Ð *Ð *Ð *à (Ð (Ð (Ð (Ð (Ð (Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ðTJð TJð TJð TJð TJñ TJô TJð TJðnAHð AHð AHð AHð AHñ AHô AHð AHðHsEð sEð sEð sEð sEñ sEô sEð sEðl/.ð /.ð /.ðdD+ð D+ð D+ðN.Að .Að .Aðb<Jð <Jð <Jð <Jð <Jñ <Jô <Jð <Jð <Jð <JrE   