a
    ‡ù»j£~  ã                   @   sÜ   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	d
„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zdd„ ZG d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                 C   sZ   t j t j t j t¡¡d| ¡}t |¡�}t| 	¡ ƒW  d  ƒ S 1 sL0    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Úf© r   úEE:\soccer\ml_env\Lib\site-packages\scipy/linalg/tests/test_solvers.pyÚ
_load_data   s
    ÿr   c                   @   sâ  e Zd Ze ddgddgg¡e ddgddgg¡fe d	d
gddgg¡e ddgdd
gg¡fe dd
gddgg¡e ddgdd
gg¡fe d	d
gddgg¡e d
d
gdd
gg¡fe g d¢g d¢g d¢g d¢g d¢g¡e g d¢g d¢g d¢g d¢g d¢g¡fe g d¢g d¢g d¢g d ¢g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g¡e d¡fed(dgd)d*ggƒed(dgƒjed(dgƒjj fed(dgd)d*ggƒe ed(dgƒjed(dgƒjj ¡fgZd+d,„ Z	d-d.„ Z
d4d0d1„Zd2d3„ Zd/S )5ÚTestSolveLyapunové   é   é   é   é	   é
   é   é   ù      ð?      ð?ç       @ù      @      Àç      @ù       @       Àù       @       @ù      ð¿      ð¿ç      ð?ç      @ç      ð¿)r"   r$   é   r    r#   )r    r!   r"   é   r#   )r#   é   r4   r4   r"   )r    r2   r!   r   é   )r2   r"   r"   r    r2   )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„?        )ù      ð?        ù                r7   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r6   r7   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r6   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r6   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r6   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r6   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r6   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r6   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r7   r6   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r7   r7   r6   r7   r   g      à¿éÿÿÿÿc                 C   sH   t  d¡}t  d¡}ttt||ƒ ttt||ƒ ttt|t  d¡ƒ d S )N©r"   r!   r"   r!   )r   ÚonesÚeyeÚassert_raisesÚ
ValueErrorr   )ÚselfÚnsqÚsqr   r   r   Ú$test_continuous_squareness_and_shapeX   s
    

z6TestSolveLyapunov.test_continuous_squareness_and_shapec                 C   s4   t ||ƒ}tt ||¡t || ¡  ¡ ¡ |ƒ d S ©N)r   r   r   ÚdotÚconjÚ	transpose)r>   ÚaÚqÚxr   r   r   Úcheck_continuous_case_   s    
 ÿz'TestSolveLyapunov.check_continuous_caseNc                 C   s<   t |||d�}tt t ||¡| ¡  ¡ ¡| d| ƒ d S )N©Úmethodr1   )r   r   r   rC   rD   rE   )r>   rF   rG   rK   rH   r   r   r   Úcheck_discrete_cased   s    $ÿz%TestSolveLyapunov.check_discrete_casec                 C   sh   | j D ]\}|  |d |d ¡ |  |d |d ¡ | j|d |d dd� | j|d |d dd� qd S )Nr   r    ÚdirectrJ   Zbilinear)ÚcasesrI   rL   ©r>   Úcaser   r   r   Ú
test_casesi   s
    
zTestSolveLyapunov.test_cases)N)Ú__name__Ú
__module__Ú__qualname__r   Úarrayr;   r   ÚTrN   rA   rI   rL   rQ   r   r   r   r   r      sX   ÿÿÿÿÿÿþ
â!ß#ÿ"ÿÈ<
r   c                   @   sŽ  e Zd ZedƒZedƒZedƒZedƒZedƒZe	 
dgd¡e	 dgdgg¡edd	ƒdd
fe	 ddgddgg¡e	 dgdgg¡e	 ddgddgg¡dd
fe	 g d¢g d¢g d¢g d¢g¡e	 ddgddgddgddgg¡e	 g d¢g d¢g d¢g d¢g¡e	 d ¡d
fe	 g d!¢g d"¢g d#¢g d$¢g d%¢g d&¢g d'¢g d(¢g¡e	 g d)¢g d*¢g¡jd+ e	 g d,¢g d-¢g d.¢g d/¢g d0¢g d1¢g d2¢g d3¢g¡e	 d ¡d
fe	 g d4¢g d5¢g d6¢g d7¢g d8¢g d9¢g d:¢g d;¢g d<¢g	¡e	 g d=¢g d>¢g d?¢g d@¢g dA¢g dB¢g dB¢g dB¢g dB¢g	¡e	 d¡e	 d¡d
fedC edD edE edF d
fe	 ddgddGgg¡e	 dHgdgg¡e	 dI¡ddJfedKdLƒe	 dMdNgd+dOgg¡e	 dPdQgdQdRgg¡e	 dI¡edHdƒ d
fe	 ddSgddgg¡e	 dgdgg¡e	 d ¡dd
fe	 dTdgddTgg¡e	 d ¡e	 d ¡e	 d ¡d
fe	 ddgdd gg¡e	 dgdgg¡e	 dUdVgdVdGgg¡dd
fe	 g dW¢g dX¢g dY¢g¡d e	 d¡e	 g dZ¢g d[¢g d\¢g¡ e	 
g d]¢¡¡ e	 g dZ¢g d[¢g d\¢g¡¡d e	 d¡dS d^fe	 g d_¢g d`¢g da¢g db¢g¡e	 g dc¢g¡je	 
g dd¢¡dd
fe	 g de¢g df¢g dg¢g dh¢g¡e	 di¡e	 dj¡dd
fedC edD edE edF d
fe	jdkdkddl�e	 dkdk¡dG  e	 ede	 dm¡dƒ¡ e	jdkdkddl� e	 dk¡e	 dk¡e	 dk¡d
fe	 
e	 dn¡d¡e	 e	 dod¡¡e	 dod¡e	 dod¡j 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 dqeeƒ¡drds„ ƒZd
S )tÚTestSolveContinuousArezcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr/   r    r   r)   Nr#   r"   ç      Àç      Àr8   r$   r4   ç      @©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�—?)r\   g/Ý$�@ç‘í|?5^ò?çyé&1¬Ô?)r]   r_   gÕxé&1Ô?çé&1¬º?)r^   r`   ra   gsh‘í|?µ?r!   )gƒÀÊ¡E¶ï¿g!°rh‘íà?r   r   r   r   r   r   )çNbX9´à?g7‰A`åÐð¿çßO�—nã?r   r   r   r   r   )r   rb   gÙÎ÷Sãñ¿rc   r   r   r   r   )r   r   rb   gøSã¥›Äø¿g`åÐ"Ûùæ?r   r   r   )r   r   r   ç/Ý$�í?g=
×£p=ú¿gÅ °rh‘é?r   r   )r   r   r   r   rd   gð§ÆK7‰û¿g¢E¶óýÔì?r   )r   r   r   r   r   rd   g^ºI+ý¿g¼t“Vð?)r   r   r   r   r   r   rd   gJ+‡ÿ¿)g¸…ëQ¸@rZ   gÍÌÌÌÌÌB@ç¤p=
×£@gáz®Gá@g
×£p=
@re   r0   )g
×£p=
ÀgR¸…ëQÀgffffffÀg�Âõ(\�Àg�Âõ(\�
Àg�Âõ(\�Àg{®GázÀg®Gáz®Àçü©ñÒMbP?)r/   ç        rg   rg   ç      à?rg   rg   çš™™™™™¹?)rg   r/   rg   rg   ri   rg   rg   rg   )rg   rg   r/   rg   rg   rh   rg   rg   )rg   rg   rg   r/   rg   rg   rg   rg   )rh   ri   rg   rg   ri   rg   rg   rg   )rg   rg   rh   rg   rg   ri   rg   rg   )rg   rg   rg   rg   rg   rg   ri   rg   )ri   rg   rg   rg   rg   rg   rg   ri   )	gú~j¼tÀg{®Gáz@rg   rg   g-²�ï§ Àrg   rg   rg   g×£p=
×ë?)	g¾Ÿ/Ý$Ö¿gZd;ßO�ï?rg   rg   g¸…ëQ¸Àrg   rg   rg   g
×£p=
ï?)	g‰A`åÐ¢ÀgªñÒMbÐ.@g-²�ï§FÀrg   gÍÌÌÌÌÌÀrg   rg   rg   gq=
×£p@)	g7‰A`åÐ5Àg!°rh‘ÍA@gV-²Õ¿gö(\�ÂõÀgÍÌÌÌÌÌ1Àrg   rg   rg   g�Âõ(\�@)	g+‡NÀgyé&1ŒX@gTã¥›Ä ÀgÃõ(\�ÂÕ?g/Ý$�JÀrg   rg   rg   gffffff4@)	r   r   r   r   ç     €W@çffffffbÀrg   gš™™™™™J@rg   )	r   r   r   r   r   rj   rk   r   r   )	r   r   r   r   r   çš™™™™™)@rg   çš™™™™™?Àr   )	r   r   r   r   rl   rg   rg   gÍÌÌÌÌÌ2@rm   )ç{®Gáz„?gºI+‡†¿g‡ÙÎ÷SÃ¿)gú~j¼t“h?g/Ý$�•¿rg   )g;ßO�—n‚?gh‘í|?5®¿rg   )gú~j¼t“˜?g#Ûù~j¼Ä¿rg   )gœÄ °rh±?g{®GázÜ¿rg   )rg   rg   rg   ÚAÚBÚQÚRç       Àç�íµ ÷Æ°>©r!   r!   zBad residual accuracygš™™™™™¹¿g{®Gáz”¿ri   rg   rn   éd   iè  i'  ç    €„.Ag›ò×  ð?iõÿÿÿéûÿÿÿ)g    ð³ZAç    €„>Ag       €)ry   g    `ãVAç    €„>Á)rg   rz   g    ÐSA)r/   rs   rs   )rs   r/   rs   )rs   rs   r/   )rt   r    rw   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   rw   )r    r   r    r   )ç�íµ ÷Æ°¾r    r   r   )r8   r{   r   r   )r   r   rt   r    )r   r   r8   rt   )r#   r    )r#   r#   é@   ©Úk)é>   r   )é   é   )é   r'   é   r‚   r&   r4   Nr2   r5   r‚   r‚   Nr$   r‚   rƒ   r‚   Nr'   NNúj, casec                 C   sŽ   |\}}}}}|rt j|d� | j| }t||||ƒ}	|	| | ¡ j|	  | }
|	| }|
|tt |¡| ¡ jƒ 8 }
t	|
t 
|
¡|d� dS )z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is true©Úreason©ÚdecimalN)ÚpytestÚxfailÚmin_decimalr   rD   rV   r   r   Ú
atleast_2dr   Ú
zeros_like)r>   ÚjrP   rF   ÚbrG   ÚrÚknownfailureÚdecrH   ÚresÚout_factr   r   r   Útest_solve_continuous_are&  s    
z0TestSolveContinuousAre.test_solve_continuous_are)rR   rS   rT   r   Zmat6Zmat15Zmat18Zmat19Zmat20r   ÚdiagrU   r
   r;   rV   r:   rC   Zrot90ÚzerosÚflipudrN   r‹   r‰   ÚmarkÚparametrizeÚ	enumerater•   r   r   r   r   rW   q   sj  üü
ý 
ýö
ù
ÿþ
ùìøÿ

ø	ëüüüüü
þþÿþþø

ýù	
ýù	"ÿÿûüÿÿ€ ß -rW   c                   @   s´  e Zd Ze ddgddgg¡e dgdgg¡e ddgddgg¡e dgg¡dfe ddgddgg¡e dgd	gg¡e ddgddgg¡e dgg¡dfe d
dgddgg¡e ddgdd
gg¡e ddgddgg¡e ddgdd
gg¡dfe g d¢g d¢g d¢g¡e dgdgdgg¡e d
¡e d¡dfe dd
gddgg¡e dgdgg¡e ddgddgg¡e dgg¡dfe ddgddgg¡e ddgddgg¡e ddgddgg¡e d dgdd
gg¡dfe ddgddgg¡e dgdgg¡e ddgddgg¡e dgg¡dfe ddgddgg¡e ddgddgg¡e d!d!gd!d"gg¡d# e dd
gd
dgg¡dfe ddgddgg¡e dgdgg¡e ddgddgg¡e dgg¡dfe g d$¢g d%¢g d&¢g d'¢g¡e d(dgd)d*gd+d,gd-d)gg¡e g d.¢g d/¢g d0¢g d1¢g¡e d¡dfe g d2¢g d3¢g d4¢g d5¢g¡e d6d7gd8d9gd:d;gd<d=gg¡e d¡d> e d¡dfe g d?¢g d@¢g dA¢g dB¢g¡e g dC¢g dD¢g dE¢g dF¢g¡e g dG¢g dH¢g dI¢g dJ¢g¡e d¡dfe g dK¢g dL¢g dM¢g dN¢g dO¢g¡d> e dPdQgdRdSgdTdUgdVdWgdXdYgg¡d> e dZ¡e d¡dfe e d¡ejddgdd[�¡e e d¡e dgdgdgg¡¡e g d\¢g d\¢g d]¢g d^¢g d_¢g d]¢g¡e d
dgddgg¡dfd`e g da¢g db¢g dc¢g dd¢g de¢g df¢g dg¢g dh¢g di¢g	¡ e g dj¢g dk¢g dl¢g dm¢g dn¢g do¢g dp¢g dq¢g dr¢g	¡d` e g ds¢¡e d
¡dfe ddtgddgg¡e dgdgg¡e d¡e dgg¡dufe g dv¢g dw¢g dx¢g¡dy e d
¡dte d
¡ dte d
¡ dzfe g d{¢g d|¢g d}¢g d~¢g¡e dgdgdgdgg¡e g d€¢¡e d�gg¡dfejd‚dd[�e e d‚d¡¡e d‚¡e dgg¡dfgZ	dƒZ
d„d…„ e
D ƒZd†ed‡< ej dˆee	ƒ¡d‰dŠ„ ƒZd‹dŒ„ ZdS )�ÚTestSolveDiscreteArer!   y      ð?       Àr   y       €      Àr    Nr8   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#   rX   rY   r$   r4   g ‘~û:pî?g2w-!ôì?g5^ºI‚@gÕxé&1ó¿gZd;ßO�@g{®Gázt?g{®Gáz”?gUUUUUUÕ?éüÿÿÿr5   gF]tÑE·?)çV-²�ïï?gôýÔxé&±?r   r   )gôýÔxé&±¿r    r   r   )r   r   r    g/Ý$�•Ã?)r   r   g/Ý$�•Ã¿r    gF%ušk?ri   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?rn   )g333333ã¿gš™™™™™ÀgÍÌÌÌÌÌÀgÍ>�Qž™À)r/   g333333ã?gš™™™™™é?gÍèGÃ)3@)rg   r/   gÍÌÌÌÌÌü?g {ö\f@)rg   rg   rg   ggÖR@Úÿï¿)r/   r1   r1   r1   )rg   r/   r1   r1   )rg   rg   r/   r1   )rg   rg   rg   r/   )r!   r    r"   r4   )r    r!   r!   r2   )r"   r!   r4   r&   )r4   r2   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í¿r2   r}   )r    r    r   r   r   r   )r   r   r   r   r   r   )r   r   r   r    r8   r   )r   r   r   r8   r    r   rf   )	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   rw   ú*Presumed issue with OpenBLAS, see gh-16926)é   r%   éþÿÿÿ)r%   rƒ   éøÿÿÿ)r§   r¨   r5   gÇqÇq¼?z!Issue with OpenBLAS, see gh-16926)gGœ¡úÿÿï?r   r   r   )r    r   r   r   r[   )r   r   r    r   g:Œ0âŽyE>)r   r   r   r    g      Ð?rv   )r'   r‚   rƒ   r‚   rƒ   r¦   é   r‚   r‚   rƒ   r‚   rƒ   rƒ   r‚   r'   r!   r2   r4   r%   c                 C   s   g | ]}d d|   ‘qS )g      ø?r%   r   )Ú.0Úindr   r   r   Ú
<listcomp>ÿ  ó    zTestSolveDiscreteAre.<listcomp>gê-�™—Q=r&   r„   c                 C   s¨   |\}}}}}|rt j|d� | j| }t||||ƒ}	| ¡ j}
|	| |	|  }}| ¡ j| |	 | }|| ¡ j| t||
|  |
ƒ|  8 }t|t 	|¡|d� dS )ú5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truer…   ©ÚatolN)
r‰   rŠ   Úmax_tolr	   rD   rV   r   r   r   r�   )r>   rŽ   rP   rF   r�   rG   r�   r‘   r°   rH   ZbHZxaÚxbr“   r   r   r   Útest_solve_discrete_are  s    

(z,TestSolveDiscreteAre.test_solve_discrete_arec                 C   sn   t  t  d¡¡}d|d< t  g d¢g d¢g¡j}t  |d¡t  g d¢¡ }t  dd	g¡}ttt	||||ƒ d S )
N©r"   r"   r8   )r   r    )r    r    r   )r   r   r    r§   )r3   r8   gffffffþ¿iöÿÿÿri   )
r   Ztriur:   rU   rV   Z	full_liker–   r<   r   r   )r>   ro   rp   rq   rr   r   r   r   Útest_infeasible  s    z$TestSolveDiscreteAre.test_infeasible)rR   rS   rT   r   rU   r;   Zkronr–   r˜   rN   r‹   r±   r‰   r™   rš   r›   r³   rµ   r   r   r   r   rœ   5  s¢  üüü
þúüüüüü
ý
ý
ýó
ý
ýö
ý
ý
ýó
üü
üüô"
û÷øÿ

øø	ëü
þþú
ýù	ü€ È H
rœ   c                  C   s  t  g d¢g d¢g d¢g¡t  ddgddgdd	gg¡t  d
¡t  d¡t  g d¢g d¢g d¢g¡t  d¡d ft  g d¢g d¢g d¢g¡t  ddgddgdd	gg¡t  d
¡t  d¡t  g d¢g d¢g d¢g¡t  d¡d fg} d}dd„ }t| ƒD ]\}}|||| ƒ qì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åß?r9   )r%   r%   c                 S   s¶   | \}}}}}}}|r"t j|d� t||||||ƒ}	| ¡ j |	 |¡¡| ¡ j |	 |¡¡ | }
| ¡ j |	¡ |¡| }|
| tt |¡| ¡ jƒ¡8 }
t	|
t 
|
¡|d� dS )r®   r…   r‡   N)r‰   rŠ   r   rD   rV   rC   r   r   rŒ   r   r�   )rP   r’   rF   r�   rG   r�   ÚeÚsr‘   rH   r“   r”   r   r   r   Ú_test_factoryE  s    0 z<test_solve_generalized_continuous_are.<locals>._test_factory)r   rU   r;   r—   r:   r›   )rN   r‹   rÄ   r«   rP   r   r   r   Ú%test_solve_generalized_continuous_are#  sN    
þ
þ
þô
þ
þ
þôðrÅ   c                  C   s6  t dƒ} t g d¢g d¢g d¢g¡t ddgddgd	d
gg¡t d¡t d¡t g d¢g d¢g d¢g¡t d¡d ft g d¢g d¢g d¢g¡t ddgddgd	d
gg¡t d¡t d¡t g d¢g d¢g d¢g¡t d¡df| d | d | d | d d | d d fg}d}dd„ }t|ƒD ]\}}|||| ƒ �qd S )Nzgendare_20170120_data.npzr¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r"   r!   r¿   rÀ   rÁ   r9   r¥   ro   rp   rq   rr   ÚS)çpé~°=rÇ   g…xÝD\8¹<c              
   S   s  | \}}}}}}}|r"t j|d� t||||||ƒ}	|du rLt |jd ¡}|du r^t |¡}| ¡ j 	|	 	|¡¡| ¡ j 	|	 	|¡¡ | }
|
| ¡ j 	|	 	|¡¡|  	t
|| ¡ j 	|	 	|¡¡ | ¡ j 	|	 	|¡¡| ¡ j ƒ¡8 }
t|
t |
¡|d� dS )r®   r…   Nr   r¯   )r‰   rŠ   r	   r   r;   Úshaper�   rD   rV   rC   r   r   )rP   r°   rF   r�   rG   r�   rÂ   rÃ   r‘   rH   r“   r   r   r   rÄ   ‚  s    
0ÿÿz:test_solve_generalized_discrete_are.<locals>._test_factory)r   r   rU   r;   r—   r:   r›   )Zmat20170120rN   Zmax_atolrÄ   r«   rP   r   r   r   Ú#test_solve_generalized_discrete_areU  s`    
þ
þ
þô
þ
þ
þôúá(rÉ   c                  C   s,   dd„ } dd„ }dd„ }dd„ }d	d
„ }d S )Nc               	   S   sp   t  d¡} t  d¡}ttfD ]N}tt|| dddƒ tt|||| dƒ tt||||| ƒ tt|||||| ƒ qd S )Nr9   r"   r    ©r   r:   r;   r   r	   r<   r=   ©r?   r@   rH   r   r   r   Útest_square_shapež  s    

z1test_are_validate_args.<locals>.test_square_shapec                  S   s˜   t  d¡} t  d¡}ttfD ]v}tt||| ddƒ tt||||||| ƒ tt|||t  d¡|ƒ tt||||t  d¡ƒ tt|||||t  d¡ƒ qd S )Nr9   r#   r    r"   rÊ   rË   r   r   r   Útest_compatible_sizes§  s    

z5test_are_validate_args.<locals>.test_compatible_sizesc                  S   sR   t  d¡ dd¡} t  d¡}ttfD ](}tt|||| |ƒ tt||||| ƒ q$d S )Nr$   r"   )r   ZarangeÚreshaper;   r   r	   r<   r=   )ZnsymÚsymrH   r   r   r   Útest_symmetry±  s
    
z-test_are_validate_args.<locals>.test_symmetryc               	   S   s^   t  dd¡} | d  d8  < t  d¡}ttfD ]}tt|||||| ƒ q.ttt|||| ƒ d S )Nr´   g   ¢”mBru   r    r"   )r   Úfullr;   r   r	   r<   r=   )Zsingr@   rH   r   r   r   Útest_singularity¸  s    
z0test_are_validate_args.<locals>.test_singularityc               
   S   sœ   t  dt j¡} t  d¡}ttfD ]v}tt|| |||ƒ tt||| ||ƒ tt|||| |ƒ tt||||| ƒ tt|||||| ƒ tt||||||| ƒ q d S )Nru   r!   )r   rÑ   Únanr;   r   r	   r<   r=   )Únmr@   rH   r   r   r   Útest_finitenessÁ  s    
z/test_are_validate_args.<locals>.test_finitenessr   )rÌ   rÍ   rÐ   rÒ   rÕ   r   r   r   Útest_are_validate_argsœ  s
    	
	rÖ   c                   @   sT  e Zd Ze ddgddgg¡e ddgddgg¡e dd	gd
dgg¡fe g d¢g d¢g d¢g d¢g¡e g d¢g d¢g d¢g d¢g¡e g d¢g d¢g d¢g d¢g¡fe ddgddgg¡e ddgddgg¡e dd gd!dgg¡fe d"dgddgg¡e ddgddgg¡e dd gd!dgg¡fe ddgddgg¡e ddgddgg¡e dd gd!dgg¡fe ddgddgg¡e ddgddgg¡e ddgddgg¡fe g d#¢g d$¢g d%¢g¡e dd&gddgg¡e ddgd&dgddgg¡fe g d'¢g d$¢g d%¢g¡e dd&gdd(gg¡e ddgd&d)gd*d+gg¡fgZd,d-„ Zd.d/„ Zd0d1„ Zd2S )3ÚTestSolveSylvesterr    r!   r   r#   r2   r4   r3   r$   r%   r&   r'   )r/   r   r   r   )r   r/   r)   rg   )r   r   r0   rŸ   )r   r   r!   r2   )r)   r   r   r/   )r   r/   rg   rg   )r   r   r/   r8   )r   r   r    r    )r   r/   r   r   )r   r   r/   r   )r   r   r   r/   r(   r)   r*   r+   r1   rž   r0   rZ   r,   r-   r.   r/   )r3   r    r4   )r"   r2   r5   )r#   r$   r!   r"   )r3   r�   y      @       @y      @      ð¿y              @y              @y      @      @c                 C   s.   t |||ƒ}tt ||¡t ||¡ |ƒ d S rB   )r   r   r   rC   ©r>   rF   r�   ÚcrH   r   r   r   Ú
check_caseü  s    zTestSolveSylvester.check_casec                 C   s*   | j D ]}|  |d |d |d ¡ qd S )Nr   r    r!   )rN   rÚ   rO   r   r   r   rQ      s    
zTestSolveSylvester.test_casesc                 C   sf   t  ddgddgg¡}t  dgg¡}t  ddg¡ dd¡}t|||ƒ}t|t  ddg¡ dd¡ƒ d S )Nr/   rg   r)   r8   r    )r   rU   rÎ   r   r   rØ   r   r   r   Útest_trivial  s
    zTestSolveSylvester.test_trivialN)	rR   rS   rT   r   rU   rN   rÚ   rQ   rÛ   r   r   r   r   r×   Í  s`   þ
ý
ý
ýøþþþþþþØ-r×   )r   Únumpyr   Znumpy.testingr   r   r‰   r   r<   Zscipy.linalgr   r   r   r   r	   r
   r   r   Zscipy.sparse._sputilsr   r   r   rW   rœ   rÅ   rÉ   rÖ   r×   r   r   r   r   Ú<module>   s&   W E o2G1