U
    »mœdby  ã                   @   sÌ   d dl Z d dlZd dl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dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ dƒZdS )é    N)Úassert_array_almost_equal)Úraises)Úsolve_sylvester)Úsolve_continuous_lyapunovÚsolve_discrete_lyapunov)Úsolve_continuous_areÚsolve_discrete_are)Ú
block_diagÚsolveÚLinAlgError)Úmatrixc              
   C   sN   t j t j t j t¡¡d| ¡}t |¡�}t| 	¡ ƒW  5 Q R £ S Q R X 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   úX/home/sam/Atlas/atlas_env/lib/python3.8/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 dddddgdddddgdddddgdddddgdddddgg¡e dddddgdddddgdddddgdddddgdddddgg¡fe ddddddddd d!d"gd#d$d$d$d$d$d$d$d$d$d$gd$d#d$d$d$d$d$d$d$d$d$gd$d$d#d$d$d$d$d$d$d$d$gd$d$d$d#d$d$d$d$d$d$d$gd$d$d$d$d#d$d$d$d$d$d$gd$d$d$d$d$d#d$d$d$d$d$gd$d$d$d$d$d$d#d$d$d$d$gd$d$d$d$d$d$d$d#d$d$d$gd$d$d$d$d$d$d$d$d#d$d$gd$d$d$d$d$d$d$d$d$d#d$g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
d0d,d-„Zd.d/„ Zd+S )1ÚTestSolveLyapunové   é   é   é   é	   é
   é   é   ù      ð?      ð?ç       @ù      @      Àç      @ù       @       Àù       @       @ù      ð¿      ð¿ç      ð?ç      @ç      ð¿é   é   é   r   é   yš™™™™™¹?        y²�ï§ÆK·?        yË¡E¶óý´?        yã¥›Ä °²?        yü©ñÒMb°?        y)\�Âõ(¬?        yZd;ßO�§?        y‹lçû©ñ¢?        yyé&1¬œ?        yÛù~j¼t“?        y{®Gáz„?        y      ð?        y                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©Úmethodr0   )r   r   r   r@   rA   rB   )r;   rC   rD   rH   rE   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   ÚdirectrG   Zbilinear)ÚcasesrF   rI   ©r;   Úcaser   r   r   Ú
test_casesi   s
    
zTestSolveLyapunov.test_cases)N)Ú__name__Ú
__module__Ú__qualname__r   Úarrayr8   r   ÚTrK   r>   rF   rI   rN   r   r   r   r   r      sö   ÿÿÿÿ( ÿ( ÿþ    þ
    þ
    þ
    þ
    þ
    þ
    þ
    þ
    þ
    þ
    þâ!ß#ÿ"ÿÈ<
r   c            
      C   sZ  t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}t dgd¡t dgdgg¡tdd	ƒdd ft d
dgddgg¡t dgdgg¡t ddgddgg¡dd ft ddddgddddgddddgddddgg¡t ddgddgddgd dgg¡t d!d"d#d$gd"d%d&d'gd#d&d(d)gd$d'd)d*gg¡t d+¡d ft d,d-ddddddgd.d/d0dddddgdd.d1d0ddddgddd.d2d3dddgdddd4d5d6ddgddddd4d7d8dgdddddd4d9d:gddddddd4d;gg¡t d<dd=d>d?d@d>dAgdBdCdDdEdFdGdHdIgg¡jdJ t ddKdKdKdLdKdKdMgdKddKdKdMdKdKdKgdKdKddKdKdLdKdKgdKdKdKddKdKdKdKgdLdMdKdKdMdKdKdKgdKdKdLdKdKdMdKdKgdKdKdKdKdKdKdMdKgdMdKdKdKdKdKdKdMgg¡t d+¡d ft dNdOdKdKdPdKdKdKdQg	dRdSdKdKdTdKdKdKdUg	dVdWdXdKdYdKdKdKdZg	d[d\d]d^d_dKdKdKd`g	dadbdcdddedKdKdKdfg	dddddgdhdKdidKg	ddddddgdhddg	ddddddjdKdkdg	dddddjdKdKdldkg	g	¡t dmdndogdpdqdKgdrdsdKgdtdudKgdvdwdKgdKdKdKgdKdKdKgdKdKdKgdKdKdKgg	¡t d¡t d¡d f| dx | dy | dz | d{ d ft ddgdd|gg¡t d}gdgg¡t d~¡ddftd€d�ƒt dMdKgdJdmgg¡t d‚dƒgdƒd„gg¡t d~¡td}dƒ d ft dd…gddgg¡t dgdgg¡t d+¡dd ft d†dgdd†gg¡t d+¡t d+¡t d+¡d ft ddgd
d+gg¡t dgdgg¡t d‡dˆgdˆd|gg¡dd ft d‰dŠd‹gdŠdŒd�gdKd�dŽgg¡d t d¡t dd|d|gd|dd|gd|d|dgg¡ t d}dd…g¡¡ t dd|d|gd|dd|gd|d|dgg¡¡d t d¡d… d�ft dd�ddgddd‘dgdd’d“d”gdddd•gg¡t dddd…gg¡jt ddddg¡dd ft d–dddgdd–ddgddd}dgdddd}gg¡t d—¡t d˜¡dd f|dx |dy |dz |d{ d ftjd™d™ddš�t d™d™¡d|  t 	tdt 
d›¡dƒ¡ tjd™d™ddš� t d™¡t d™¡t d™¡d ft t dœ¡d¡t t d�d¡¡t d�d¡t d�d¡j dd�f|dx |dy |dz |d{ d f|dx |dy |dz |d{ d�f|dx |dy |dz |d{ d�fg}dž}dŸd „ }t|ƒD ]\}}	||	|| ƒ �q<d S )¡Nzcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr.   r   r   r(   r"   r!   ç      Àç      Àr5   r#   r3   ç      @g=
×£p=þ¿gö(\�ÂõØ?g…ëQ¸À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/Ý$�@g7‰A`åÐ@gj¼t“æ?gZd;ßO�—?g/Ý$�@g‘í|?5^ò?gyé&1¬Ô?gÕxé&1Ô?gé&1¬º?gsh‘í|?µ?r    gƒÀÊ¡E¶ï¿g!°rh‘íà?gNbX9´à?g7‰A`åÐð¿gßO�—nã?gÙÎ÷Sãñ¿gøSã¥›Äø¿g`åÐ"Ûùæ?g/Ý$�í?g=
×£p=ú¿gÅ °rh‘é?gð§ÆK7‰û¿g¢E¶óýÔì?g^ºI+ý¿g¼t“Vð?gJ+‡ÿ¿g¸…ëQ¸@gÍÌÌÌÌÌB@g¤p=
×£@gáz®Gá@g
×£p=
@r/   g
×£p=
ÀgR¸…ëQÀgffffffÀg�Âõ(\�Àg�Âõ(\�
Àg�Âõ(\�Àg{®GázÀg®Gáz®Àçü©ñÒMbP?ç        g      à?çš™™™™™¹?gú~j¼tÀg{®Gáz@g-²�ï§ Àg×£p=
×ë?g¾Ÿ/Ý$Ö¿gZd;ßO�ï?g¸…ëQ¸Àg
×£p=
ï?g‰A`åÐ¢ÀgªñÒMbÐ.@g-²�ï§FÀgÍÌÌÌÌÌÀgq=
×£p@g7‰A`åÐ5Àg!°rh‘ÍA@gV-²Õ¿gö(\�ÂõÀgÍÌÌÌÌÌ1Àg�Âõ(\�@g+‡NÀgyé&1ŒX@gTã¥›Ä ÀgÃõ(\�ÂÕ?g/Ý$�JÀgffffff4@g     €W@gffffffbÀgš™™™™™J@gš™™™™™)@gš™™™™™?ÀgÍÌÌÌÌÌ2@ç{®Gáz„?gºI+‡†¿g‡ÙÎ÷SÃ¿gú~j¼t“h?g/Ý$�•¿g;ßO�—n‚?gh‘í|?5®¿gú~j¼t“˜?g#Ûù~j¼Ä¿gœÄ °rh±?g{®GázÜ¿ÚAÚBÚQÚRg       Àg�íµ ÷Æ°>©r    r    zBad residual accuracygš™™™™™¹¿g{®Gáz”¿éd   iè  i'  ç    €„.Ag›ò×  ð?iõÿÿÿéûÿÿÿg    ð³ZAg    €„>Ag       €g    `ãVAg    €„>Ág    ÐSAzBad Residual Accuracygš™™™™™Ù?g®GázÖ?g    €ûÁg     aÁg    €ûAg    €„.Ág�íµ ÷Æ°¾)r"   r   )r"   r"   é@   ©Úk)é>   rf   )é   é   )é   r&   é   ri   r%   r3   Nr1   r4   ri   ri   Nr#   ri   rj   ri   Nr&   NNc           
      S   sŒ   | \}}}}}|rt j|d� 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Úxfailr   r@   rA   rS   r
   r   Ú
atleast_2dr   Ú
zeros_like)
rM   ÚdecrC   ÚbrD   ÚrÚknownfailurerE   ÚresÚout_factr   r   r   Ú_test_factory&  s    
 z0test_solve_continuous_are.<locals>._test_factory)r   r   ÚdiagrR   r	   r8   rS   r7   r@   Zrot90ÚzerosÚflipudÚ	enumerate)
Zmat6Zmat15Zmat18Zmat19Zmat20rK   Úmin_decimalry   ÚindrM   r   r   r   Útest_solve_continuous_areq   sl   üü


ý 


ýöùÿþùìøÿ
ø	ëüüüüüþþ"ÿ þþø



ýù	


ýù	"ÿÿûüÿÿ€ ß -r€   c            	   "   C   s~  t  ddgddgg¡t  dgdgg¡t  ddgddgg¡t  dgg¡d ft  ddgddgg¡t  dgdgg¡t  ddgddgg¡t  dgg¡d ft  d	dgddgg¡t  ddgdd	gg¡t  dd
gddgg¡t  ddgdd	gg¡d ft  dddgdddgdddgg¡t  dgdgdgg¡t  d	¡t  d¡d ft  dd	gddgg¡t  dgdgg¡t  ddgddgg¡t  dgg¡d ft  ddgddgg¡t  d d gd!d"gg¡t  d#dgdd$gg¡t  d%dgdd	gg¡d ft  ddgddgg¡t  dgdgg¡t  ddgddgg¡t  dgg¡d ft  ddgddgg¡t  ddgddgg¡t  d&d&gd&d'gg¡d( t  dd	gd	dgg¡d ft  ddgddgg¡t  dgdgg¡t  ddgddgg¡t  dgg¡d ft  d)d*ddgd+d)ddgddd)d,gddd-d)gg¡t  d.d$gd/d0gd1d2gd3d/gg¡t  d4ddd5gdd6d7dgdd7d8dgd5ddd9gg¡t  d¡d ft  d:d;d<d=gd>d?d@dAgdBdCdDdEgdFdGdHdIgg¡t  dJdKgdLdMgdNdOgdPdQgg¡t  d¡dR t  d¡d ft  dSdTdUdVgdWdXdYdZgd[dWd\d]gd[d[d[d^gg¡t  dWd_d_d_gd[dWd_d_gd[d[dWd_gd[d[d[dWgg¡t  ddd	dgdddd`gd	dddagdd`dadbgg¡t  d¡d ft  dcdddedfdggdhdidjdkdlgdmdndodpdqgdrdsdtdudvgdwdxdydzd{gg¡dR t  d|d}gd~dgd€d�gd‚dƒgd„d…gg¡dR t  d`¡t  d¡d ft  t  d¡t jddgdd†�¡t  t  d¡t  dgdgdgg¡¡t  ddddddgddddddgddddddgddddddgddddddgddddddgg¡t  d	dgddgg¡d fd‡t  dˆd‰dŠd‹dŒd�ddŽd�g	d�d‘d’d“d”d•dd–d—g	d˜d™dšd›dœd�ddždŸg	d d¡d¢d£d¤d¥dd¦d§g	d¨d©dªd«d¬d­dd®d¯g	d°d±d²d³d´dµdd¶d·g	d¸d¹dºd»d¼d½d¾d¿dÀg	dÁdÂdÃdÄdÅdÆddÇdÈg	dÉdÊdËdÌdÍdÎddÏdÐg	g	¡ t  dÑdÒdÓgdÔdÕdÖgd×dØdÙgdÚdÛdÜgdÝdÞdßgdàdádâgdãdädågdædçdègdédêdëgg	¡d‡ t  dìddddìddddg	¡t  d	¡d ft  ddígddgg¡t  dgdgg¡t  d¡t  dgg¡dîft  dïdðdñgdðdòdógdñdód'gg¡dô t  d	¡dít  d	¡ dít  d	¡ dõft  dödddgddddgddddgddddgg¡t  d÷gdgdgdgg¡t  ddddg¡t  døgg¡d ft jdùdd†�t  t  dùd¡¡t  dù¡t  dgg¡d fg} dú}dûdü„ }t| ƒD ]\}}|||| ƒ �qìt  t  dý¡¡}d|dþ< t  dddgdddgg¡j	}t  
|dñ¡t  dÿd�d g¡ }t  �dd/g¡}ttt||||ƒ d S (  Nr    y      ð?       Àr   y       €      Àr   r5   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"   rT   rU   r#   r3   g ‘~û:pî?g2w-!ôì?g5^ºI‚@gÕxé&1ó¿gZd;ßO�@g{®Gázt?g{®Gáz”?gUUUUUUÕ?éüÿÿÿr4   gF]tÑE·?gV-²�ïï?gôýÔxé&±?gôýÔxé&±¿g/Ý$�•Ã?g/Ý$�•Ã¿gF%ušk?rY   gÇº¸�ðF¿g{®Gáz¤?gŸ<,Ôšæ}?gÇº¸�ðf¿gìQ¸…ëý?g¬Zd;Ï¿g+‡ÙÎç?g=
×£p=Ê?g+‡Ùâ?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?rZ   g333333ã¿gš™™™™™ÀgÍÌÌÌÌÌÀgÍ>�Qž™Àr.   g333333ã?gš™™™™™é?gÍèGÃ)3@rX   gÍÌÌÌÌÌü?g {ö\f@ggÖR@Úÿï¿r0   r1   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í¿rd   rW   gÍÌÌÌÌ0‹@g     à`@g®Gáz.'@g]ÜFxà?g\�Âõ(œBÀg#J{ƒ/LÖ?g+‡ÙÎ÷@gåÐ"Ûùþ@g33333#S@g33333Œ@gq=
×£p)@g"ýöuàœá?g®GázDÀg£#¹ü‡ô×?g…ëQ¸@gåÐ"Ûùþ@gÍÌÌÌÌÌ_Àg     Xv@i1  gHáz®G÷?g33333³YÀg/Ý$�•ï?g33333³'@g¸…ëQ¸2@g     ¸vÀg33333Ïƒ@g
×£p=ºR@gÍÌÌÌÌäˆ@g     qÀgÓMbX9@g¸…ëQ¸?@g)\�ÂõhH@i@üÿÿgš™™™™·™@gÍÌÌÌÌ`ÀgÙÎ÷ScÀg{®GáÚQ@g;ßO�—n@gáz®G!U@gš™™™™y_@g33333Ã„Àg=
×£p=\@g)\�Âõ8VÀg¢E¶óýÔÀg®GázU@g333333+@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@gÍÌÌÌÌ¼j@g…ëQ¸ÅA@gš™™™™‘uÀg33333#‚@g{®GáúFÀgmçû©ñÒÿ¿gffffffZ@g\�Âõ(Ü3@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   ra   z*Presumed issue with OpenBLAS, see gh-16926é   r$   éþÿÿÿrj   iøÿÿÿgÇqÇq¼?z!Issue with OpenBLAS, see gh-16926gGœ¡úÿÿï?g:Œ0âŽyE>g      Ð?r`   )r&   ri   rj   ri   rj   r†   é   ri   ri   rj   ri   rj   rj   ri   r&   r    r1   r3   r$   c           	   
   S   s°   | \}}}}}|rt j|d� t||||ƒ}| ¡ j | |¡¡| | }|| ¡ j | |¡¡ t|| ¡ j | |¡¡ | ¡ jƒ | |¡¡¡8 }t|t 	|¡|d� dS ©ú5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truerk   rm   N)
ro   rp   r   rA   rS   r@   r
   r   r   rr   )	rM   rs   rC   rt   rD   ru   rv   rE   rw   r   r   r   ry     s    0ÿz.test_solve_discrete_are.<locals>._test_factory©r!   r!   )r   r   r2   gffffffþ¿iöÿÿÿ)r   rR   r8   Zkronrz   r|   r}   Ztriur7   rS   Z	full_liker9   r   r   )	rK   r~   ry   r   rM   r[   r\   r]   r^   r   r   r   Útest_solve_discrete_are6  sª   üüüþúüüüüü


ý
ý


ýó


ý
ýö


ý


ý


ýóüü
üüô"û÷øÿ
øø	ëüþþú


ýù	ü€ È HrŒ   c                  C   s"  t  dddgdddgddd	gg¡t  d
dgddgddgg¡t  d¡t  d¡t  dddgdddgdddgg¡t  d¡d ft  dddgdddgddd	gg¡t  d
dgddgddgg¡t  d¡t  d¡t  dddgdddgdddgg¡t  d¡d fg} d}dd„ }t| ƒD ]\}}|||| ƒ �qd S )Nç?§ ?¹Ñ?ç[,ÄYê?ç¾÷7hî?ç;)ÄÆ£§?ç7j*0	<æ?çÉš&¦ê¢¡?ç�”€Ú Ý¸?ç*ý„³[KÔ?ç¯fSdcÜ?ç6±ÀWtkØ?çÞ]ÂüpëÇ?çý;‘è?ç¯/ÈLXß?çÿ	‰Gré?çm!#û{„Ü?r!   r    çGY¿™˜®ä?ç X.eªÑ?ç6¹ÎuÐÄ?çåßÏ³æ?çÀpàÀå?ç¡™Ì¢v¾?ç»<ç¸d&è?çª™µ�öä?çÂÀ‰2åß?r6   )r$   r$   c                 S   s¶   | \}}}}}}}|r"t j|d� t||||||ƒ}	| ¡ j |	 |¡¡| ¡ j |	 |¡¡ | }
| ¡ j |	¡ |¡| }|
| tt |¡| ¡ jƒ¡8 }
t	|
t 
|
¡|d� dS r‰   )ro   rp   r   rA   rS   r@   r
   r   rq   r   rr   )rM   rs   rC   rt   rD   ru   ÚeÚsrv   rE   rw   rx   r   r   r   ry   =  s    0 z<test_solve_generalized_continuous_are.<locals>._test_factory)r   rR   r8   r{   r7   r}   )rK   r~   ry   r   rM   r   r   r   Ú%test_solve_generalized_continuous_are  sN    þ
þþôþ
þþôðr§   c                  C   sN  t dƒ} t dddgdddgdd	d
gg¡t ddgddgddgg¡t d¡t d¡t dddgdddgdddgg¡t d¡d ft dddgdddgdd	d
gg¡t ddgddgddgg¡t d¡t d¡t dddgdddgdddgg¡t d¡d f| d | d | d | d  d | d! d fg}d"}d#d$„ }t|ƒD ]\}}|||| ƒ �q0d S )%Nzgendare_20170120_data.npzr�   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¤   r6   r[   r\   r]   r^   ÚS)r%   r%   r†   c              
   S   s  | \}}}}}}}|r"t j|d� t||||||ƒ}	|dkrLt |jd ¡}|dkr^t |¡}| ¡ j 	|	 	|¡¡| ¡ j 	|	 	|¡¡ | }
|
| ¡ j 	|	 	|¡¡|  	t
|| ¡ j 	|	 	|¡¡ | ¡ j 	|	 	|¡¡| ¡ j ƒ¡8 }
t|
t |
¡|d� dS )rŠ   rk   Nr   rm   )ro   rp   r   r   r8   Úshaperr   rA   rS   r@   r
   r   )rM   rs   rC   rt   rD   ru   r¥   r¦   rv   rE   rw   r   r   r   ry   z  s    
0ÿÿz:test_solve_generalized_discrete_are.<locals>._test_factory)r   r   rR   r8   r{   r7   r}   )Zmat20170120rK   r~   ry   r   rM   r   r   r   Ú#test_solve_generalized_discrete_areM  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 )Nr6   r!   r   ©r   r7   r8   r   r   r9   r:   ©r<   r=   rE   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 )Nr6   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Úreshaper8   r   r   r9   r:   )ZnsymÚsymrE   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   ¢”mBr_   r   r!   )r   Úfullr8   r   r   r9   r:   )Zsingr=   rE   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 )Nr_   r    )r   r²   Únanr8   r   r   r9   r:   )Únmr=   rE   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                   @   s�  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 ddddgddddgddddgddddgg¡e ddddgddddgddddgddddgg¡e ddddgddddgddddgdd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 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dgdddgdddgg¡e ddgddgg¡e ddgddgddgg¡fe dddgdddgdddg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d'd(„ Zd)S )*ÚTestSolveSylvesterr   r    r   r"   r1   r3   r2   r#   r$   r%   r&   r.   r(   rX   r/   rƒ   r5   r'   r)   r*   r0   r‚   rV   r+   r,   r-   r!   r4   r�   y      @       @y      @      ð¿y              @y              @y      @      @c                 C   s.   t |||ƒ}tt ||¡t ||¡ |ƒ d S r?   )r   r   r   r@   ©r;   rC   rt   ÚcrE   r   r   r   Ú
check_caseñ  s    zTestSolveSylvester.check_casec                 C   s*   | j D ]}|  |d |d |d ¡ qd S )Nr   r   r    )rK   r»   rL   r   r   r   rN   õ  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.   rX   r(   r5   r   )r   rR   r¯   r   r   r¹   r   r   r   Útest_trivialù  s
    zTestSolveSylvester.test_trivialN)	rO   rP   rQ   r   rR   rK   r»   rN   r¼   r   r   r   r   r¸   Â  s`   þ


ý


ý


ýøþþþþ þ þØ-r¸   )r   Únumpyr   Znumpy.testingr   ro   r   r9   Zscipy.linalgr   r   r   r   r   r	   r
   r   Zscipy.sparse._sputilsr   r   r   r€   rŒ   r§   rª   r·   r¸   r   r   r   r   Ú<module>   s&   W F f2D1