
    (ph                     "   S SK r S SKrS SKJrJr  S SKrS SKJr  S SK	J
r
  S SK	JrJr  S SK	JrJr  S SK	JrJrJr  S SKJr  \\\R,                  \\R0                  /rS	 r " S
 S5      r " S S5      r " S S5      rS rS rS r  " S S5      r!g)    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   [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      SU 5      n[        R                  " U5       n[        UR                  5       5      sSSS5        $ ! , (       d  f       g= f)zc
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      R/var/www/html/venv/lib/python3.13/site-packages/scipy/linalg/tests/test_solvers.py
_load_datar      s^    
 ww||BGGOOBGGOOH,EF"D*H		aAGGI 
		s   6B
B'c                      \ rS rSr\R
                  " S5      \R
                  " S5      4\R                  " SS/SS//5      \R                  " SS/S	S
//5      4\R                  " SS/SS//5      \R                  " SS/SS//5      4\R                  " SS/SS//5      \R                  " SS/SS//5      4\R                  " SS/SS//5      \R                  " SS/SS//5      4\R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      \R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      4\R                  " / SQ/ S Q/ S!Q/ S"Q/ S#Q/ S$Q/ S%Q/ S&Q/ S'Q/ S(Q/ S)Q/5      \R                  " S	5      4\" S*S/S+S,//5      \" S*S/5      R                  \" S*S/5      R                  R                  -  4\" S*S/S+S,//5      \R                  " \" S*S/5      R                  \" S*S/5      R                  R                  -  5      4/	r
S- rS. rS6S0 jrS1 r\R                   R#                  S2\5      \R                   R#                  S3\5      S4 5       5       rS5rg/)7TestSolveLyapunov   r   r               	   
               ?      ?       @      @            @       @              @       @                  ?      @      )r&   r(      r$   r'   )r$   r%   r&      r'   )r'      r8   r8   r&   )r$   r6   r%   r      )r6   r&   r&   r$   r6   )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?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        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;   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;   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;   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;   r   g      c                    [         R                  " S5      n[         R                  " S5      n[        [        [
        X5        [        [        [
        X!5        [        [        [
        U[         R                  " S5      5        g )Nr&   r%   r&   r%   )r   oneseyeassert_raises
ValueErrorr   )selfnsqsqs      r   $test_continuous_squareness_and_shape6TestSolveLyapunov.test_continuous_squareness_and_shape_   sM    ggfoVVAYj";SEj";REj";RK    c                     [        X5      n[        [        R                  " X5      [        R                  " X1R	                  5       R                  5       5      -   U5        g N)r   r   r   dotconj	transpose)rC   aqxs       r   check_continuous_case'TestSolveLyapunov.check_continuous_casef   s?    %a+!&&,6683E3E3G)HH!	MrH   Nc                     [        XUS9n[        [        R                  " [        R                  " X5      UR	                  5       R                  5       5      U-
  SU-  5        g )Nmethodr5   )r   r   r   rK   rL   rM   )rC   rN   rO   rU   rP   s        r   check_discrete_case%TestSolveLyapunov.check_discrete_casek   sG    #A8!ffRVVA\1668+=+=+?@1Dd1f	NrH   c                     U R                    Ha  nU R                  US   US   5        U R                  US   US   5        U R                  US   US   SS9  U R                  US   US   SS9  Mc     g )Nr   r$   directrT   bilinear)casesrQ   rV   rC   cases     r   
test_casesTestSolveLyapunov.test_casesp   sz    JJD&&tAwQ8$$T!Wd1g6$$T!Wd1gh$G$$T!Wd1gj$I	 rH   dtype_adtype_qc                    [         R                  R                  S5      n[         R                  " SUS9n[         R                  " SUS9n[	        XE5      nUR                  S5      S-  R                  U5      nUR                  S5      S-  R                  U5      n[	        XE5      nUR                  S:X  d   eUR                  UR                  :X  d   eg )Ni[r#   dtyper6   r6   d   )r   randomdefault_rngzerosr   astypeshaperd   )rC   r`   ra   rngrN   rO   resrefs           r   test_size_0TestSolveLyapunov.test_size_0w   s     ii##I.HHV7+HHV7+'-ZZ#++G4ZZ#++G4'-yyF"""yyCII%%%rH    rJ   )__name__
__module____qualname____firstlineno__r   emptyarrayr@   r   Tr[   rF   rQ   rV   r^   pytestmarkparametrizedtypesro   __static_attributes__rq   rH   r   r!   r!      s    
&		&			Aq6Aq6"	#	Ar7RH%	&	( 
FC=8S/2	3	FF#gs^4	5	7 
C:Sz*	+	FF#gs^4	5	7 
FC=8S/2	3	C:c{+	,	. 
?O_"O5 
6	?O_"O5 
6	7
 
 =    
!B 
C!	F 
!Q$$	%
!Q.

VQF^--//
/	2 
!Q$$	%
((61a&>##faVn&6&6&8&88
9	<w=
E~LM
N
J [[Y/[[Y/& 0 0&rH   r!   c                      \ rS rSr\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r	\
R                  " S/S5      \
R                  " S	/S//5      \" SS
5      SS4\
R                  " SS/SS//5      \
R                  " S/S//5      \
R                  " SS/SS//5      SS4\
R                  " / SQ/ SQ/ SQ/ SQ/5      \
R                  " S	S	/SS/SS/SS	//5      \
R                  " / SQ/ SQ/ SQ/ S Q/5      \
R                  " S!5      S4\
R                  " / S"Q/ S#Q/ S$Q/ S%Q/ S&Q/ S'Q/ S(Q/ S)Q/5      \
R                  " / S*Q/ S+Q/5      R                  S,-  \
R                  " / S-Q/ S.Q/ S/Q/ S0Q/ S1Q/ S2Q/ S3Q/ S4Q/5      \
R                  " S!5      S4\
R                  " / S5Q/ S6Q/ S7Q/ S8Q/ S9Q/ S:Q/ S;Q/ S<Q/ S=Q/	5      \
R                  " / S>Q/ S?Q/ S@Q/ SAQ/ SBQ/ SCQ/ SCQ/ SCQ/ SCQ/	5      \
R                  " S5      \
R                  " S5      S4\SD   \SE   \SF   \SG   S4\
R                  " SS	/S	SH//5      \
R                  " SI/S	//5      \
R                   " SJ5      SSK4\" SLSM5      \
R                  " SNSO/S,SP//5      \
R                  " SQSR/SRSS//5      \
R                   " SJ5      \" SIS	5      -   S4\
R                  " S	ST/S	S	//5      \
R                  " S	/S//5      \
R                  " S!5      SS4\
R                  " SUS/SSU//5      \
R                  " S!5      \
R                  " S!5      \
R                  " S!5      S4\
R                  " SS/SS!//5      \
R                  " S/S//5      \
R                  " SVSW/SWSH//5      SS4\
R                  " / SXQ/ SYQ/ SZQ/5      S-  \
R                  " S5      \
R                  " / S[Q/ S\Q/ S]Q/5      R#                  \
R                  " / S^Q5      5      R#                  \
R                  " / S[Q/ S\Q/ S]Q/5      5      S-  \
R                  " S5      ST-  S_4\
R                  " / S`Q/ SaQ/ SbQ/ ScQ/5      \
R                  " / SdQ/5      R                  \
R                  " / SeQ5      SS4\
R                  " / SfQ/ SgQ/ ShQ/ SiQ/5      \
R                   " Sj5      \
R                   " Sk5      SS4\SD   \SE   \SF   \SG   S4\
R                  " SlSlSSm9\
R                  " SlSl5      SH-  -   \
R$                  " \" S\
R&                  " Sn5      S5      5      -   \
R                  " SlSlSSm9-   \
R                  " Sl5      \
R                  " Sl5      \
R                  " Sl5      S4\
R                  " \
R                   " So5      S5      \
R(                  " \
R                  " SpS5      5      \
R                  " SpS5      \
R                  " SpS5      R                  -  SS_4\SD   \SE   \SF   \SG   S4\SD   \SE   \SF   \SG   S_4\	SD   \	SE   \	SF   \	SG   S_4/rSqr\R0                  R3                  Sr\" \5      5      Ss 5       rStrg)uTestSolveContinuousAre   zcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr3   r$   r   r-   Nr'   r&               r<   r(   r8         @r   r$   r   r   )r   g=
ףp=g(\?gQ)r   g rhgףp=
gq=
ףp@)g rh?g/nRgGzgzGʿg
ףp=
?ggffffffgMbgQ?)g/$@7A`@jt?Zd;O?)r   g/$@|?5^?y&1?)r   r   gx&1?&1?)r   r   r   gsh|??r%   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   r   gSr   r   r   r   r   )r   r   r   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   r   gK7gE?r   )r   r   r   r   r   r   g^I+gtV?)r   r   r   r   r   r   r   gJ+)gQ@r   gB@p=
ף@gzG@g
ףp=
@r   r4   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGzMbP?)r3           r   r         ?r   r   皙?)r   r3   r   r   r   r   r   r   )r   r   r3   r   r   r   r   r   )r   r   r   r3   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   r   )r   r   r   r   r   r   r   r   )	g~jtg{Gz@r   r   g- r   r   r   gףp=
?)	g/$ֿgZd;O?r   r   gQr   r   r   g
ףp=
?)	gA`ТgMb.@g-Fr   gr   r   r   gq=
ףp@)	g7A`5g!rhA@gV-տg(\g1r   r   r   g(\@)	g+Ngy&1X@gT㥛Ġg(\?g/$Jr   r   r   gffffff4@)	r   r   r   r        W@ffffffbr   gJ@r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   皙)@r   皙?r   )	r   r   r   r   r   r   r   g2@r   ){Gz?gI+gSÿ)g~jth?g/$r   )g;On?gh|?5r   )g~jt?g#~jĿr   )g rh?g{Gzܿr   )r   r   r   ABQR       ư>r%   r%   zBad residual accuracygg{Gzr   r   r   rf   i  i'      .Ag  ?i)g    ZA    >Ag       )r   g    `VA    >)r   r   g    SA)r3   r   r   )r   r3   r   )r   r   r3   )r   r$   r   zBad Residual Accuracy)r   g?r   r   )r   r   gGz?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*   r8   Nr6   r9   r   r   Nr(   r   r   r   Nr+   NNj, casec                    Uu  p4pVnU(       a  [         R                  " US9  U R                  U   n[        X4XV5      n	X-  UR	                  5       R
                  U	-  -   U-   n
X-  nX[        [        R                  " U5      UR	                  5       R
                  5      -  -  n
[        U
[        R                  " U
5      US9  g)z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is truereasondecimalN)ry   xfailmin_decimalr	   rL   rx   r   r   
atleast_2dr   
zeros_like)rC   jr]   rN   brO   rknownfailuredecrP   rm   out_facts               r   test_solve_continuous_are0TestSolveContinuousAre.test_solve_continuous_are=  s     $( aLLL-q! q,eaffhjj1n$q(5%a 0(--/2C2CDDD!#r}}S'93GrH   rq   )rr   rs   rt   ru   r   mat6mat15mat18mat19mat20r   diagrw   r   r@   rx   r?   rK   rot90ri   flipudr[   r   ry   rz   r{   	enumerater   r}   rq   rH   r   r   r      s   ()D*+E*+E*+E*+E 
"q		A3*		B		
			 
Aq6D$<(	)	A3+		Aq6Ar7#	$	
			 
<*+13 
4 
Aq6D$<%4)D	E	////1 
2 
	
	 
488878846 
7 
DKM 
A
 
;;;;;;;;= 
> 
	)	, 
==BHH925>@	
A 
*))))((((* 
+ 
		+	. 
cDItCy$s)T:	Aq6As8$	%	D6A3-	 			 		" 
D%	 	E5>E5>2	3	C;u.	/	:dA.	.			 
As8aV$	%	A3+						 
Iq>B	?3	4						 
Ar7QF#	$	A3*		C9r3i(	)				 
,2,. 
/12
3 
	>>>B	C	G	G'
)),HHnnnEF*HJK
L 
S	 	" 
>#3"$ 
% 
>"	#	%	%					 
#$"#% 
& 
				 
sU3ZsU3Z>	B"	r2 4	4rxxArxx11587 
79;B!9L
M					 
!	$	266"a=	!	AA	(	
	 		" 
sU3ZsU3Z>	sU3ZsU3Z	 	" 
sU3ZsU3Z	 	"Cc
EX>K [[Y	%(89H :HrH   r   c                   |   \ rS rSr\R
                  " SS/SS//5      \R
                  " S/S//5      \R
                  " SS/SS//5      \R
                  " S//5      S4\R
                  " SS/SS//5      \R
                  " S	/S
//5      \R
                  " SS/SS//5      \R
                  " S//5      S4\R
                  " SS/SS//5      \R
                  " SS/SS//5      \R
                  " SS/SS//5      \R
                  " SS	/SS//5      S4\R
                  " / SQ/ SQ/ SQ/5      \R
                  " S/S/S//5      \R                  " S5      \R                  " S5      S4\R
                  " SS/SS//5      \R
                  " S/S//5      \R
                  " SS/SS//5      \R
                  " S//5      S4\R
                  " SS/SS//5      \R
                  " SS/SS//5      \R
                  " SS/SS //5      \R
                  " S!S/SS//5      S4\R
                  " SS/SS//5      \R
                  " S/S//5      \R
                  " SS/SS//5      \R
                  " S//5      S4\R
                  " SS/SS//5      \R
                  " SS/SS//5      \R
                  " S"S"/S"S#//5      S$-  \R
                  " SS/SS//5      S4\R
                  " SS/SS//5      \R
                  " S/S//5      \R
                  " SS/SS//5      \R
                  " S//5      S4\R
                  " / S%Q/ S&Q/ S'Q/ S(Q/5      \R
                  " S)S /S*S+/S,S-/S.S*//5      \R
                  " / S/Q/ S0Q/ S1Q/ S2Q/5      \R                  " S5      S4\R
                  " / S3Q/ S4Q/ S5Q/ S6Q/5      \R
                  " S7S8/S9S:/S;S</S=S>//5      \R                  " S5      S?-  \R                  " S5      S4\R
                  " / S@Q/ SAQ/ SBQ/ SCQ/5      \R
                  " / SDQ/ SEQ/ SFQ/ SGQ/5      \R
                  " / SHQ/ SIQ/ SJQ/ SKQ/5      \R                  " S5      S4\R
                  " / SLQ/ SMQ/ SNQ/ SOQ/ SPQ/5      S?-  \R
                  " SQSR/SSST/SUSV/SWSX/SYSZ//5      S?-  \R                  " S[5      \R                  " S5      S4\R                  " \R                  " S5      \R                  " SS/SS\95      \R                  " \R                  " S5      \R
                  " S/S/S//5      5      \R
                  " / S]Q/ S]Q/ S^Q/ S_Q/ S`Q/ S^Q/5      \R
                  " SS/SS//5      S4Sa\R
                  " / SbQ/ ScQ/ SdQ/ SeQ/ SfQ/ SgQ/ ShQ/ SiQ/ SjQ/	5      -  \R
                  " / SkQ/ SlQ/ SmQ/ SnQ/ SoQ/ SpQ/ SqQ/ SrQ/ SsQ/	5      Sa-  \R                  " / StQ5      \R                  " S5      S4\R
                  " SSu/SS//5      \R
                  " S/S//5      \R                  " S5      \R
                  " S//5      S4\R
                  " / SvQ/ SwQ/ SxQ/5      Sy-  \R                  " S5      Su\R                  " S5      -  Su\R                  " S5      -  S4\R
                  " / SzQ/ S{Q/ S|Q/ S}Q/5      \R
                  " S~/S/S/S//5      \R                  " / SQ5      \R
                  " S//5      S4\R                  " SSS\9\R                  " \R                  " SS5      5      \R                  " S5      \R
                  " S//5      S4/r
Sr\ V Vs/ s H  nSSU* -  -  PM     snn rS\S'   S \S'   S\S'   \R                  R                  S\" \
5      5      S 5       rS rSrgs  snn f )TestSolveDiscreteAreiL  r%   y      ?       r   y             r$   Nr<   y                            ?r&   r,   y      ?                     @)gX=XI?gP?g'9ԭf?)gҍK?gh2?gNցZ?)gS?gs ,?g^L^?g=S?g>%S?gFB?r'   r   r   r(   r8   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r9   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?r   gǺFg{Gz?g<,Ԛ}?gǺf)gQ?r   r   Zd;Ͽ)r   g+?=
ףp=?r   )r   r   g+?r   )r   r   r   gS㥛?)gPn?g/tgM?g[A+Q)gϷK?gH`?g$([gu?)gY9}g_":?g!'>տgCK?)g_L@geXgg+пg Tfn?g`[H?gQnHg	v>g}k,gUW;g{/L	gOaeRN?r   )g333333ggg>Q)r3   g333333?g?gG)3@)r   r3   g?g {\f@)r   r   r   ggR@)r3   r5   r5   r5   )r   r3   r5   r5   )r   r   r3   r5   )r   r   r   r3   )r%   r$   r&   r8   )r$   r%   r%   r6   )r&   r%   r8   r*   )r8   r6   r*      )g5^IW@gY8m?g&S?g&S:?g~jt?)g&1lD@gjtD@g/$0@g1w-!@ge`TR'?)gvo(@g~jtS:@gPnB@g\(/@gjt(@)gm{r@gK)@g/$5;@gx&q5@grh|D@)gNbX9?g?g      ?g\C@gRW@gJY8?gHPgH@g$(~g/$@g
ףp=
gec]@gffffffgx$(~?g/L
Fr6   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   )	g0@g     `@gGz.'@g]Fx?g\(Bg#J{/L?r   g+@g"@)	g33333#S@g33333@gq=
ףp)@g"u?gGzDg#?r   gQ@g"@)	g_g     Xv@i1  gHzG?g33333Yg/$?r   g33333'@gQ2@)	g     vg33333σ@g
ףp=R@g@g     qgMbX9@r   gQ?@g)\hH@)	i@g@g`gScg{GQ@g;On@r   gzG!U@gy_@)	g33333Äg=
ףp=\@g)\8VgEgGzU@g333333+@r   g	b@gffffffY@)	g33333yi  g{GZKg+g(\P@g{G(@gz6?gGzX@g{GjQ@)	g|fg33333r@gGz7g(\gQKN@g)\(6@r   g̼j@gQA@)	gug33333#@g{GFgmgffffffZ@g\(3@r   g33333ck@gfffffj@)g
ףp=
@g cZB>gQT)gT㥛 ?gd;Ogףp=
)gʡE?g=
ףp=*gn!@)gA`"@gq=
ףAg8@)gGz$@g     0Wg33333P@)gZd;@gQNgQ+C@)g7A`@g
ףp=jBg
ףp=J4@)gK7?gGz/gsh|@)gv/@gHzG>gzGa-@)	2   r   r   r   r   r   r   r   r   r   )   r)   )r)   r   )r   r   r9   gqq?)gG?r   r   r   )r$   r   r   r   r   )r   r   r$   r   g:0yE>)r   r   r   r$   g      ?rf   )r+   r   r   r   r   r      r   r   r   r   r   r   r   r+   r%   r'   r8   r)   g      ?r)   g-Q=r*      g-C6*?r   r   c                    Uu  p4pVnU(       a  [         R                  " US9  U R                  U   n[        X4XV5      n	UR	                  5       R
                  n
X-  X-  pUR	                  5       R
                  U-  U	-
  U-   nXR	                  5       R
                  U-  [        XjU-  -   U
5      U-  -  -  n[        U[        R                  " U5      US9  g)5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truer   atolN)
ry   r   max_tolr
   rL   rx   r   r   r   r   )rC   r   r]   rN   r   rO   r   r   r   rP   bHxaxbrm   s                 r   test_solve_discrete_are,TestSolveDiscreteAre.test_solve_discrete_are"  s     $( aLLL-||AqQ*VVXZZBffhjj2o!A%vvxzzB%GR"82"=>> 	R]]3/d;rH   c                 j   [         R                  " [         R                  " S5      5      nSUS'   [         R                  " / SQ/ SQ/5      R                  n[         R
                  " US5      [         R                  " / SQ5      -   n[         R                  " SS	/5      n[        [        [        XX45        g )
Nr&   r&   r<   )r   r$   )r$   r$   r   )r   r   r$   r   )r7   r<   gffffffir   )
r   triur?   rw   rx   	full_liker   rA   r   r	   )rC   r   r   r   r   s        r   test_infeasible$TestSolveDiscreteAre.test_infeasible8  sy    GGBGGFO$$HHi+,..LLB"''-"88GGS#Jk#7qDrH   rq   )rr   rs   rt   ru   r   rw   r@   kronr   r   r[   r   r   ry   rz   r{   r   r   r   r}   ).0inds   00r   r   r   L  s     
At9q#h'	(	A3*		Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	C52$-	 	Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	Aq6Aq6"	#	At9tQi(	)	As8b!W%	&			 
7668 
9 
J<*
|<	=				 
Aq6D$<(	)	A3+		Aq6Aq6"	#	A3%			 
FA;F,	-	E5>GU#34	5	E1:4y)	*	C8aV$	%			 
Ar7QF#	$	A3*		Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	Aq6Aq6"	#	B8b!W%	&$	/	Aq6Aq6"	#			 
Aq6Aq6"	#	A3*		Aq6Aq6"	#	A3%			 
'''') 
* 
FF#F#F#F#% 
& 
'''(* 
+ 
		 
====? 
@ 
Iy)y)z*y)+ 
, 
4		
	 
C??@B 
C 
*)(') 
* 
< !# 
$ 
		 
<>@?<	> 
? BF	
F
 
FG$G$G$G$G$	& 
' *.	
.
 
			 
BGGQFa0	1	BHHqcA3_5	6	%%%&&%' 
( 
Aq6Aq6"	#			 

F
F
D
G
G
H
J
H
H
J	K 	
K 
.--./..-.0 
1 49
9 
.	/		+	. 
As8aV$	%	A3*			A3%		 
< 
 #&
( 
	rvvay	rvvay	 
'  
! 
E7QC!qc*	+			D6(			 
q		266#q>	"		A3%			q}
EN4K)45#sR#X~5GGBK GBK GBK[[Y	%(89< :<*EE 6s   $^8r   c                     [         R                  " / SQ/ SQ/ SQ/5      [         R                  " SS/SS/SS	//5      [         R                  " S
5      [         R                  " S5      [         R                  " / SQ/ SQ/ SQ/5      [         R                  " S5      S 4[         R                  " / SQ/ SQ/ SQ/5      [         R                  " SS/SS/SS	//5      [         R                  " S
5      [         R                  " S5      [         R                  " / SQ/ SQ/ SQ/5      [         R                  " S5      S 4/n SnS n[        U 5       H  u  p4U" XAU   5        M     g )Ng? ??g[,Y?g7h?g;)ƣ?g7j*0	<?gɚ&ꢡ?gڠݸ?g*[K?gfSdc?6Wtk?]p?;?/LX?	Gr?m!#{?r&   r%   gGY?g X.e?g6u?g?gp?gv?g<d&?g?g2?r>   )r)   r)   c                    U u  p#pEpgnU(       a  [         R                  " US9  [        X#XEXg5      n	UR                  5       R                  R                  U	R                  U5      5      UR                  5       R                  R                  U	R                  U5      5      -   U-   n
UR                  5       R                  R                  U	5      R                  U5      U-   nXR                  [        [        R                  " U5      UR                  5       R                  5      5      -  n
[        U
[        R                  " U
5      US9  g)r   r   r   N)ry   r   r	   rL   rx   rK   r   r   r   r   r   )r]   r   rN   r   rO   r   esr   rP   rm   r   s               r   _test_factory<test_solve_generalized_continuous_are.<locals>._test_factoryd  s    )-&aA,LL- qQ2ffhjjnnQUU1X&a)AAAE668::>>!$((+a/||E"--"2HMMO4E4EFGG!#r}}S'93GrH   )r   rw   r@   ri   r?   r   )r[   r   r   r   r]   s        r   %test_solve_generalized_continuous_arer   B  sU    
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		!
E> K
H u%	d,- &rH   c                      [        S5      n [        R                  " / SQ/ SQ/ SQ/5      [        R                  " SS/SS/S	S
//5      [        R                  " S5      [        R                  " S5      [        R                  " / SQ/ SQ/ SQ/5      [        R                  " S5      S 4[        R                  " / SQ/ SQ/ SQ/5      [        R                  " SS/SS/S	S
//5      [        R                  " S5      [        R                  " S5      [        R                  " / SQ/ SQ/ SQ/5      [        R
                  " S5      S 4U S   U S   U S   U S   S U S   S 4/nSnS n[        U5       H  u  pEU" XRU   5        M     g )Nzgendare_20170120_data.npzr   r   r   r   r   r   r   r   r   r&   r%   r   r   r   r>   r   r   r   r   S)p~=r   gxD\8<c                    U u  p#pEpgnU(       a  [         R                  " US9  [        X#XEXg5      n	Uc#  [        R                  " UR
                  S   5      nUc  [        R                  " U5      nUR                  5       R                  R                  U	R                  U5      5      UR                  5       R                  R                  U	R                  U5      5      -
  U-   n
XR                  5       R                  R                  U	R                  U5      5      U-   R                  [        XSR                  5       R                  R                  U	R                  U5      5      -   UR                  5       R                  R                  U	R                  U5      5      UR                  5       R                  -   5      5      -  n
[        U
[        R                  " U
5      US9  g)r   r   Nr   r   )ry   r   r
   r   r@   rk   r   rL   rx   rK   r   r   )r]   r   rN   r   rO   r   r   r   r   rP   rm   s              r   r   :test_solve_generalized_discrete_are.<locals>._test_factory  sA   )-&aA,LL-qQ109qwwqz"A9a AffhjjnnQUU1X&a)AAAE

quuQx(1,11!FFHJJNN155844668::>>!%%(3affhjj@ 	 	R]]3/d;rH   )r   r   rw   r@   ri   r?   r   )mat20170120r[   max_atolr   r   r]   s         r   #test_solve_generalized_discrete_arer  t  s   89K
 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		 
S		S		S		S			S			?&
EP +H<, u%	dSM* &rH   c                  "    S n S nS nS nS ng )Nc            
         [         R                  " S5      n [         R                  " S5      n[        [        4 HL  n[        [        X SSS5        [        [        X!XS5        [        [        X!XU 5        [        [        X!XX5        MN     g )Nr>   r&   r$   r   r?   r@   r	   r
   rA   rB   rD   rE   rP   s      r   test_square_shape1test_are_validate_args.<locals>.test_square_shape  sf    ggfoVVAY&(:;A*aaA6*aRa8*aRS9*aRR=	 <rH   c                     [         R                  " S5      n [         R                  " S5      n[        [        4 H  n[        [        X!U SS5        [        [        X!XXU 5        [        [        X!U[         R                  " S5      U5        [        [        X!X[         R                  " S5      5        [        [        X!XU[         R                  " S5      5        M     g )Nr>   r'   r$   r&   r  r  s      r   test_compatible_sizes5test_are_validate_args.<locals>.test_compatible_sizes  s    ggfoVVAY&(:;A*aS!Q7*aRRSA*aRB?*aRRVVAY?*aRRC <rH   c            	          [         R                  " S5      R                  SS5      n [         R                  " S5      n[        [
        4 H'  n[        [        X!XU5        [        [        X!XU 5        M)     g )Nr(   r&   )r   arangereshaper@   r	   r
   rA   rB   )nsymsymrP   s      r   test_symmetry-test_are_validate_args.<locals>.test_symmetry  sU    yy|##Aq)ffQi&(:;A*ac=*ac= <rH   c            
          [         R                  " SS5      n U S==   S-  ss'   [         R                  " S5      n[        [        4 H  n[        [        X!XX5        M     [        [        [        XX5        g )Nr   g   mBr   r$   r&   )r   fullr@   r	   r
   rA   rB   )singrE   rP   s      r   test_singularity0test_are_validate_args.<locals>.test_singularity  s[    wwvt$T
a
VVAY&(:;A*aRR> < 	j"6IrH   c                  z   [         R                  " S[         R                  5      n [         R                  " S5      n[        [
        4 Hp  n[        [        X XU5        [        [        X!XU5        [        [        X!XU5        [        [        X!XU 5        [        [        X!XX5        [        [        X!XXU 5        Mr     g )Nr   r%   )r   r  nanr@   r	   r
   rA   rB   )nmrE   rP   s      r   test_finiteness/test_are_validate_args.<locals>.test_finiteness  s    WWVRVV$VVAY&(:;A*aRR8*aRR8*aRR8*aRR8*aRR<*aRRR@ <rH   rq   )r  r  r  r  r  s        r   test_are_validate_argsr    s    >D>J	ArH   c                   B   \ rS rSr\R
                  " S5      \R
                  " S5      \R
                  " S5      4\R
                  " S5      \R
                  " S5      \R
                  " S5      4\R
                  " S5      \R
                  " S5      \R
                  " S5      4\R                  " SS/SS	//5      \R                  " S
S/SS//5      \R                  " SS/SS//5      4\R                  " / SQ/ SQ/ SQ/ SQ/5      \R                  " / SQ/ SQ/ SQ/ SQ/5      \R                  " / SQ/ SQ/ SQ/ SQ/5      4\R                  " SS/SS//5      \R                  " S S!/S"S#//5      \R                  " S$S%/S&S//5      4\R                  " S'S/S"S//5      \R                  " S S/S"S#//5      \R                  " S$S%/S&S//5      4\R                  " SS/SS//5      \R                  " S S/S"S#//5      \R                  " S$S%/S&S//5      4\R                  " SS/SS//5      \R                  " S S/S"S#//5      \R                  " SS/S S//5      4\R                  " / S(Q/ S)Q/ S*Q/5      \R                  " SS+/S	S
//5      \R                  " SS/S+S	/S
S//5      4\R                  " / S,Q/ S)Q/ S*Q/5      \R                  " SS+/S	S-//5      \R                  " SS!/S+S./S/S0//5      4/rS1 rS2 r	S3 r
\R                  R                  S4\5      \R                  R                  S5\5      \R                  R                  S6\5      \R                  R                  S7SS+/5      \R                  R                  S8SS+/5      S9 5       5       5       5       5       rS:rg;)<TestSolveSylvesteri  r#   r   )r   r%   )r%   r   r$   r%   r   r'   r6   r8   r7   r(   r)   r*   r+   )r3   r   r   r   )r   r3   r-   r   )r   r   r4   r   )r   r   r%   r6   )r-   r   r   r3   )r   r3   r   r   )r   r   r3   r<   )r   r   r$   r$   )r   r3   r   r   )r   r   r3   r   )r   r   r   r3   r,   r-   r.   r/   r5   r   r4   r   r0   r1   r2   r3   )r7   r$   r8   )r&   r6   r9   )r'   r(   r%   r&   )r7   r   y      @       @y      @      y              @y              @y      @      @c                     [        XU5      n[        [        R                  " X5      [        R                  " XB5      -   U5        g rJ   )r   r   r   rK   rC   rN   r   crP   s        r   
check_caseTestSolveSylvester.check_case$  s-    A!$!"&&,"=qArH   c                 b    U R                    H  nU R                  US   US   US   5        M!     g )Nr   r$   r%   )r[   r$  r\   s     r   r^   TestSolveSylvester.test_cases(  s,    JJDOODGT!Wd1g6 rH   c                 8   [         R                  " SS/SS//5      n[         R                  " S//5      n[         R                  " SS/5      R                  SS5      n[        XU5      n[	        U[         R                  " SS/5      R                  SS5      5        g )Nr3   r   r-   r<   r$   )r   rw   r  r   r   r"  s        r   test_trivialTestSolveSylvester.test_trivial,  s~    HHsCj3*-.HHseWHHc3Z ((Q/A!$!!RXXsCj%9%A%A"a%HIrH   r`   dtype_bra   mnc                 p   Xs=:X  a  S:w  a  O  O[         R                  " S5        [        R                  R	                  S5      n[        R
                  " X4US9n[        R
                  " X"4US9n[        R
                  " X4US9n	[        XxU	5      n
UR                  S5      S-  R                  U5      nUR                  S5      S-  R                  U5      nUR                  S5      S-  R                  U5      n	[        XxU	5      nU
R                  X4:X  d   eU
R                  UR                  :X  d   eg )	Nr   z6m = n != 0 is not a case that needs to be tested here.l   >& rc   re   rf   )r8   r8   )r6   r8   )
ry   skipr   rg   rh   ri   r   rj   rk   rd   )rC   r,  r-  r`   r+  ra   rl   rN   r   rO   rm   rn   s               r   ro   TestSolveSylvester.test_size_06  s     ;Q;KKPQii##O4HHaV7+HHaV7+HHaV7+aA&ZZ#++G4ZZ#++G4ZZ#++G4aA&yyQF"""yyCII%%%rH   rq   N)rr   rs   rt   ru   r   rv   rw   r[   r$  r^   r)  ry   rz   r{   r|   ro   r}   rq   rH   r   r   r     s    
&		&		&		 ((6
	&		&	
 ((6
	&		&	
 
Aq6Aq6"	#	Aq6Aq6"	#	Ar7RH%	&	(
 
>%"! 
" 
#%"! 
" 
>!!!# 
$	% 
FC=8S/2	3	D":Sz*	+	FF#gs^4	5	7 
C:Sz*	+	D!9sCj)	*	FF#gs^4	5	7 
FC=8S/2	3	D!9sCj)	*	FF#gs^4	5	7 
FC=8S/2	3	D!9sCj)	*	C:c{+	,	. 
9i3	4	Aq6Aq6"	#	Aq6Aq6Aq6*	+	- 
=)Y7	8	Aq6At9%	&	Ar7QGb$Z0	1	3e5EnB7J [[Y/[[Y/[[Y/[[S1a&)[[S1a&)& * * 0 0 0
&rH   r   )"r   numpyr   numpy.testingr   r   ry   r   rA   scipy.linalgr   r   r   r	   r
   r   r   r   scipy.sparse._sputilsr   intfloatfloat32complex	complex64r|   r   r!   r   r   r   r  r  r   rq   rH   r   <module>r:     s    	  D  * ( K A 7 7 ( ubjj'2<<	8g& g&TAH AHHsE sEl/.dD+N.Ab`& `&rH   