
    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||BGOOBGOOH,E,EFF"D* *H			 aAGGII                 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?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        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    gfooVAYY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,,166883E3E3G3G)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    #Aq888!fRVAq\\16688+=+=+?+?@@1Dd1f	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&&tAwQ888$$T!Wd1g666$$T!Wd1gh$GGG$$T!Wd1gj$IIII		J 	JrE   rG   )__name__
__module____qualname__r   arrayr>   r   TrV   rD   rN   rR   rY    rE   r   r!   r!      sP        
Aq6Aq6"	#	#	Ar7RH%	&	&	( 
FC=8S/2	3	3	FF#gs^4	5	5	7 
C:Sz*	+	+	FF#gs^4	5	5	7 
FC=8S/2	3	3	C:c{+	,	,	. 
???OOO___"??OOO5 
6 
6	???OOO___"??OOO5 
6 
6	7
 
                       =    
!  
!B 
C!	F 
!Q$$	%	%
&!Q..
VVQF^^-/
/	2 
!Q$$	%	%
"(661a&>>#ffaVnn&6&88
9
9	<q:
Ex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 rhgףp=
gq=
ףp@)g rh?g/nRgGzgzGʿg
ףp=
?ggffffffgMbgQ?)g/$@7A`@jt?Zd;O?)rf   g/$@|?5^?y&1?)rg   ri   gx&1?&1?)rh   rj   rk   gsh|??r#   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   rl   gSrm   r   r   r   r   )r   r   rl   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   rn   gK7gE?r   )r   r   r   r   r   rn   g^I+gtV?)r   r   r   r   r   r   rn   gJ+)gQ@rd   gB@p=
ף@gzG@g
ףp=
@ro   r2   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGz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~jtg{Gz@rq   rq   g- rq   rq   rq   gףp=
?)	g/$ֿgZd;O?rq   rq   gQrq   rq   rq   g
ףp=
?)	gA`ТgMb.@g-Frq   grq   rq   rq   gq=
ףp@)	g7A`5g!rhA@gV-տg(\g1rq   rq   rq   g(\@)	g+Ngy&1X@gT㥛Ġg(\?g/$Jrq   rq   rq   gffffff4@)	r   r   r   r        W@ffffffbrq   gJ@rq   )	r   r   r   r   r   rt   ru   r   r   )	r   r   r   r   r   皙)@rq   皙?r   )	r   r   r   r   rv   rq   rq   g2@rw   ){Gz?gI+gSÿ)g~jth?g/$rq   )g;On?gh|?5rq   )g~jt?g#~jĿrq   )g rh?g{Gzܿrq   )rq   rq   rq   ABQR       ư>r#   r#   zBad residual accuracygg{Gzrs   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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(   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     $( 1aL 	.L----q! Aq!,,!eaffhhj1n$q(q5x%a 0 0(--//2CDDDD!#r}S'9'93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			A3*			B			
			 
Aq6D$<(	)	)	A3+			Aq6Ar7#	$	$	
			 
<<<***+++1113 
4 
4 
Aq6D$<%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ItCy$s)T:	Aq6As8$	%	%	D6A3-	 	 			 		" 
D%	 	 	E5>E5>2	3	3	C;u.	/	/	::dA..	.			 
As8aV$	%	%	A3+							 
Iq>B	?3	4	4						 
Ar7QF#	$	$	A3*			C9r3i(	)	)				 
,,,222,,,. 
/ 
/12
3 
	>>>>>>>>>B	C	C	G	G''
) 
)),BHnnnnnnnnnEFF*H *HJK
L 
S	 	" 
>>>###333"??$ 
% 
% 
>>>"	#	#	%						 
###$$$"??###% 
& 
& 
				 
sU3ZsU3Z>	B"			r2 4	4xrxAxrx1115587 87 
79?B!9L9L9L
M					 
!	$	$	626"a==	!	!	AA	(	
	 		" 
sU3ZsU3Z>	sU3ZsU3Z	 	" 
sU3ZsU3Z	 	"Cc
EX>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        dd[           ej         ej        dd                     ej        d           ej        dgg          dfgZ	dZ
d e
D             Zded<   ded<   ded<   ej                            d ee	                    d             Zd ZdS )TestSolveDiscreteArer#   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%   rb   rc   r&   r6   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r7   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?rs   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?rx   )g333333ggg>Q)r1   g333333?g?gG)3@)rq   r1   g?g {\f@)rq   rq   rq   ggR@)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@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
Fr4   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   )	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   r7   gqq?)gG?r   r   r   )r"   r   r   r   re   )r   r   r"   r   g:0yE>)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#sR#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     $( 1aL 	.L----|Aq!Q**VVXXZQABffhhj2o!A%qvvxxzB%BGR"8"82"=>> 	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:   gffffffirs   )
r   triur=   r]   r^   	full_liker   r?   r   r	   )rA   ry   rz   r{   r|   s        r   test_infeasiblez$TestSolveDiscreteAre.test_infeasible!  s    GBGFOO$$$Hiii+,,.LB"'---"8"88GS#Jk#7Aq!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         
At9q#h'	(	(	A3*			Aq6Aq6"	#	#	A3%			 
Aq6Ar7#	$	$	C52$-	 	 	Aq6Aq6"	#	#	A3%			 
Aq6Ar7#	$	$	Aq6Aq6"	#	#	At9tQi(	)	)	As8b!W%	&	&			 
7776666668 
9 
9 
J<*
|<	=	=				 
Aq6D$<(	)	)	A3+			Aq6Aq6"	#	#	A3%			 
FA;F,	-	-	E5>GU#34	5	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CC??????@@@B 
C 
C 
***)))(((''') 
* 
* 
<<<<< ==!>># 
$ 
$ 
		 
<<<>>>@@@???<<<	> 
? 
? BF	
F
 
FG$G$G$G$G$	& 
' 
' *.	
.
 
			 
GBGQFa000	1	1	HBHqcA3_55	6	6	%%%%%%%%%&&&&&&%%%' 
( 
( 
Aq6Aq6"	#	#			 

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 
...	/	/		+	. 
As8aV$	%	%	A3*				A3%		 
<<<,,++ 
  
 #&
( 
	vrvayy	vrvayy	 
''',,,,,,  
! 
! 
E7QC!qc*	+	+				D6(				 
q				626#q>>	"	"		A3%			q}
EN4K55555GGBK GBK GBK[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?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                    | \  }}}}}}}|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   )-&1aAq, 	.L---- Aq!Q22ffhhjnnQUU1XX&&a)A)AAAE6688:>>!$$((++a/x||E"-"2"2HMMOO4EFFGGG!#r}S'9'93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dK,----. .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   gxD\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   )-&1aAq, 	.L----q!Q1a009qwqz""A9a  AffhhjnnQUU1XX&&a)A)AAAE
quuQxx((1,11!AFFHHJNN155884446688:>>!%%((33affhhj@   	 	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9K
 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
&				 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
		 
S		S		S		S			S			?&
EP +H< < <, u%% + +	TdHSM****+ +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    gfooVAYY&(:; 	> 	>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    gfooVAYY&(:; 	D 	DA*aS!Q777*aRRSAAA*aRB???*aRRVAYY???*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||##Aq))fQii&(:; 	> 	>A*ac4===*ac3====	> 	>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    wvt$$T


a


VAYY&(:; 	? 	?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    WVRV$$VAYY&(:; 	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    Aq!$$!"&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 	7DOODGT!Wd1g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    HsCj3*-..HseWHc3Z  ((Q//Aq!$$!!RXsCj%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        
Aq6Aq6"	#	#	Aq6Aq6"	#	#	Ar7RH%	&	&	(
 
>>>%%%"??<<! 
" 
" 
###%%%"??<<! 
" 
" 
>>>!>>!>>!>># 
$ 
$	% 
FC=8S/2	3	3	D":Sz*	+	+	FF#gs^4	5	5	7 
C:Sz*	+	+	D!9sCj)	*	*	FF#gs^4	5	5	7 
FC=8S/2	3	3	D!9sCj)	*	*	FF#gs^4	5	5	7 
FC=8S/2	3	3	D!9sCj)	*	*	C:c{+	,	,	. 
999iii3	4	4	Aq6Aq6"	#	#	Aq6Aq6Aq6*	+	+	- 
===)))YYY7	8	8	Aq6At9%	&	&	Ar7QGb$Z0	1	1	3Q+EZ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   