
     hby                         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	 Z G d
 d          Zd Zd Zd Zd Zd Z G 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                 `   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/html/Sam_Eipo/venv/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$      r5   r5   r#   )r!   r3   r"   r      )r3   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$   )y?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        r8   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r7   r8   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r7   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r7   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r7   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r7   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r7   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r7   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r8   r7   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r8   r8   r7   r8   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)r@   aqxs       r   check_continuous_casez'TestSolveLyapunov.check_continuous_case_   sf    %a++!&A,,166883E3E3G3G)H)HH!	M 	M 	M 	M 	MrD   Nc                     t          |||          }t          t          j        t          j        ||          |                                                                          |z
  d|z             d S )Nmethodr2   )r   r   r   rG   rH   rI   )r@   rJ   rK   rP   rL   s        r   check_discrete_casez%TestSolveLyapunov.check_discrete_cased   so    #Aq888!fRVAq\\16688+=+=+?+?@@1Dd1f	N 	N 	N 	N 	NrD   c                 2   | j         D ]}|                     |d         |d                    |                     |d         |d                    |                     |d         |d         d           |                     |d         |d         d           d S )Nr   r!   directrO   bilinear)casesrM   rQ   r@   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rD   rF   )__name__
__module____qualname__r   arrayr=   r   TrU   rC   rM   rQ   rX    rD   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rD   r    c                  ~   t          d          } t          d          }t          d          }t          d          }t          d          }t          j        dgd          t          j        dgdgg          t	          dd	          dd ft          j        d
dgddgg          t          j        dgdgg          t          j        ddgddgg          dd ft          j        g dg dg dg dg          t          j        ddgddgddgddgg          t          j        g dg dg dg dg          t          j        d          d ft          j        g d g d!g d"g d#g d$g d%g d&g d'g          t          j        g d(g d)g          j        d*z  t          j        g d+g d,g d-g d.g d/g d0g d1g d2g          t          j        d          d ft          j        g d3g d4g d5g d6g d7g d8g d9g d:g d;g	          t          j        g d<g d=g d>g d?g d@g dAg dAg dAg dAg	          t          j        d          t          j        d          d f| dB         | dC         | dD         | dE         d ft          j        ddgddFgg          t          j        dGgdgg          t          j        dH          ddIft	          dJdK          t          j        dLdMgd*dNgg          t          j        dOdPgdPdQgg          t          j        dH          t	          dGd          z   d ft          j        ddRgddgg          t          j        dgdgg          t          j        d          dd ft          j        dSdgddSgg          t          j        d          t          j        d          t          j        d          d ft          j        ddgd
dgg          t          j        dgdgg          t          j        dTdUgdUdFgg          dd ft          j        g dVg dWg dXg          dz  t          j        d          t          j        g dYg dZg d[g                              t          j        g d\                                        t          j        g dYg dZg d[g                    dz  t          j        d          dRz  d]ft          j        g d^g d_g d`g dag          t          j        g dbg          j        t          j        g dc          dd ft          j        g ddg deg dfg dgg          t          j        dh          t          j        di          dd f|dB         |dC         |dD         |dE         d ft          j        djdjdk          t          j        djdj          dFz  z   t          j	        t	          dt          j
        dl          d                    z   t          j        djdjdk          z   t          j        dj          t          j        dj          t          j        dj          d ft          j        t          j        dm          d          t          j        t          j        dnd                    t          j        dnd          t          j        dnd          j        z  dd]f|dB         |dC         |dD         |dE         d f|dB         |dC         |dD         |dE         d]f|dB         |dC         |dD         |dE         d]fg}do}dp }t          |          D ]\  }}	 ||	||                    d S )qNzcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr0   r!   r   r*   r$   r#               r9   r%   r5         @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?)rd   g/$@|?5^?y&1?)re   rg   gx&1?&1?)rf   rh   ri   gsh|??r"   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   rj   gSrk   r   r   r   r   )r   r   rj   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   rl   gK7gE?r   )r   r   r   r   r   rl   g^I+gtV?)r   r   r   r   r   r   rl   gJ+)gQ@rb   gB@p=
ף@gzG@g
ףp=
@rm   r1   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGzMbP?)r0           ro   ro         ?ro   ro   皙?)ro   r0   ro   ro   rq   ro   ro   ro   )ro   ro   r0   ro   ro   rp   ro   ro   )ro   ro   ro   r0   ro   ro   ro   ro   )rp   rq   ro   ro   rq   ro   ro   ro   )ro   ro   rp   ro   ro   rq   ro   ro   )ro   ro   ro   ro   ro   ro   rq   ro   )rq   ro   ro   ro   ro   ro   ro   rq   )	g~jtg{Gz@ro   ro   g- ro   ro   ro   gףp=
?)	g/$ֿgZd;O?ro   ro   gQro   ro   ro   g
ףp=
?)	gA`ТgMb.@g-Fro   gro   ro   ro   gq=
ףp@)	g7A`5g!rhA@gV-տg(\g1ro   ro   ro   g(\@)	g+Ngy&1X@gT㥛Ġg(\?g/$Jro   ro   ro   gffffff4@)	r   r   r   r        W@ffffffbro   gJ@ro   )	r   r   r   r   r   rr   rs   r   r   )	r   r   r   r   r   皙)@ro   皙?r   )	r   r   r   r   rt   ro   ro   g2@ru   ){Gz?gI+gSÿ)g~jth?g/$ro   )g;On?gh|?5ro   )g~jt?g#~jĿro   )g rh?g{Gzܿro   )ro   ro   ro   ABQR       ư>r"   r"   zBad residual accuracygg{Gzrq   ro   rv   d   i  i'      .Ag  ?i)g    ZA    >Ag       )r   g    `VA    >)ro   r   g    SA)r0   r{   r{   )r{   r0   r{   )r{   r{   r0   )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   )r9   r   r   r   )r   r   r|   r!   )r   r   r9   r|   )r$   r!   )r$   r$   @   k)>   r   )      )   r(      r   r'   r5   Nr3   r6   r   r   Nr%   r   r   r   Nr(   NNc                    | \  }}}}}|rt          j        |           t          ||||          }|                    |          |                                j                            |          z   |z   }|                    |          }	||	                    t          t          j        |          |	                                j                            z  }t          |t          j
        |          |           dS )z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is truereasondecimalN)pytestxfailr   rG   rH   r]   r   r   
atleast_2dr   
zeros_like)
rW   decrJ   brK   rknownfailurerL   resout_facts
             r   _test_factoryz0test_solve_continuous_are.<locals>._test_factory&  s    #' 1aL 	.L---- Aq!,,eeAhh***Q.5588x||E"-"2"2HMMOO4EFFGGG!#r}S'9'93GGGGGGrD   )r   r   diagr\   r
   r=   r]   r<   rG   rot90zerosflipud	enumerate)
mat6mat15mat18mat19mat20rU   min_decimalr   indrW   s
             r   test_solve_continuous_arer   q   s   ())D*++E*++E*++E*++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''
) 
)),HnnnnnnnnnEFF*H *HJK
L 
S	 	" 
>>>###333"??$ 
% 
% 
>>>"	#	#	%						 
###$$$"??###% 
& 
& 
				 
sU3ZsU3Z>	B"			r2 4	4rxArx1115587 87 
79;B!9L9L9L
M					 
!	$	$	26"a==	!	!	AA	(	
	 		" 
sU3ZsU3Z>	sU3ZsU3Z	 	" 
sU3ZsU3Z	 	"Cc
EX>K
H 
H 
H u%% . .	TdK,----. .rD   c                     t          j        ddgddgg          t          j        dgdgg          t          j        ddgddgg          t          j        dgg          d ft          j        ddgddgg          t          j        dgdgg          t          j        ddgddgg          t          j        dgg          d ft          j        d	dgddgg          t          j        ddgdd	gg          t          j        dd
gddgg          t          j        ddgdd	gg          d ft          j        g dg dg dg          t          j        dgdgdgg          t          j        d	          t          j        d          d ft          j        dd	gddgg          t          j        dgdgg          t          j        ddgddgg          t          j        dgg          d ft          j        ddgddgg          t          j        ddgddgg          t          j        ddgddgg          t          j        ddgdd	gg          d ft          j        ddgddgg          t          j        dgdgg          t          j        ddgddgg          t          j        dgg          d ft          j        ddgddgg          t          j        ddgddgg          t          j        d d gd d!gg          d"z  t          j        dd	gd	dgg          d ft          j        ddgddgg          t          j        dgdgg          t          j        ddgddgg          t          j        dgg          d ft          j        g d#g d$g d%g d&g          t          j        d'dgd(d)gd*d+gd,d(gg          t          j        g d-g d.g d/g d0g          t          j        d          d ft          j        g d1g d2g d3g d4g          t          j        d5d6gd7d8gd9d:gd;d<gg          t          j        d          d=z  t          j        d          d ft          j        g d>g d?g d@g dAg          t          j        g dBg dCg dDg dEg          t          j        g dFg dGg dHg dIg          t          j        d          d ft          j        g dJg dKg dLg dMg dNg          d=z  t          j        dOdPgdQdRgdSdTgdUdVgdWdXgg          d=z  t          j        dY          t          j        d          d ft          j        t          j        d          t          j        ddgdZ                    t          j        t          j        d          t          j        dgdgdgg                    t          j        g d[g d[g d\g d]g d^g d\g          t          j        d	dgddgg          d fd_t          j        g d`g dag dbg dcg ddg deg dfg dgg dhg	          z  t          j        g dig djg dkg dlg dmg dng dog dpg dqg	          d_z  t          j        g dr          t          j        d	          d ft          j        ddsgddgg          t          j        dgdgg          t          j        d          t          j        dgg          dtft          j        g dug dvg dwg          dxz  t          j        d	          dst          j        d	          z  dst          j        d	          z  dyft          j        g dzg d{g d|g d}g          t          j        d~gdgdgdgg          t          j        g d          t          j        dgg          d ft          j        ddZ          t          j        t          j        dd                    t          j        d          t          j        dgg          d fg} d}d }t          |           D ]\  }} ||||                    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        dd(g          }t          t          t          ||||           d S )Nr"   y      ?       r   y             r!   r9   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`   ra   r%   r5   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r6   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?rq   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?rv   )g333333ggg>Q)r0   g333333?g?gG)3@)ro   r0   g?g {\f@)ro   ro   ro   ggR@)r0   r2   r2   r2   )ro   r0   r2   r2   )ro   ro   r0   r2   )ro   ro   ro   r0   )r"   r!   r#   r5   )r!   r"   r"   r3   )r#   r"   r5   r'   )r5   r3   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
Fr3   r   )r!   r!   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r!   r9   r   )r   r   r   r9   r!   r   rn   )	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   z*Presumed issue with OpenBLAS, see gh-16926)   r&   )r&   r   )r   r   r6   gqq?z!Issue with OpenBLAS, see gh-16926)gG?r   r   r   )r!   r   r   r   rc   )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"   r3   r5   r&   c                    | \  }}}}}|rt          j        |           t          ||||          }|                                j                            |                    |                    |z
  |z   }||                                j                            |                    |                                        t          ||                                j                            |                    |                    z   |                                j                                      |                    |                              z  }t          |t          j	        |          |           dS 5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truer   r   N)
r   r   r	   rH   r]   rG   r   r   r   r   )	rW   r   rJ   r   rK   r   r   rL   r   s	            r   r   z.test_solve_discrete_are.<locals>._test_factory  s&   #' 1aL 	.L----q!Q**ffhhjnnQUU1XX&&*Q.qvvxxz~~aeeAhh''++!AFFHHJNN15588444affhhjAAEEaeeAhhOO  	 	"#r}S'9'93GGGGGGrD   r#   r#   )r   r!   )r!   r!   r   )r   r   r!   r   )r4   r9   gffffffi)r   r\   r=   kronr   r   r   triur<   r]   	full_liker>   r   r   )	rU   r   r   r   rW   rw   rx   ry   rz   s	            r   test_solve_discrete_arer   6  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$	& 
' 
' *.	
.
 
			 
BGQFa000	1	1	BHqcA3_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%	5		7 
<<<,,++ 
  
 #&
( 
	rvayy	rvayy	,	. 
''',,,,,,  
! 
! 
E7QC!qc*	+	+				D6(				 
q				26#q>>	"	"		A3%			q}
EN4KH H H u%% . .	TdK,---- 	  AAdG
)))YYY'((*A
Qbgmmm444A
c
A+3Q1a@@@@@rD   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   r   rH   r]   rG   r   r   r   r   r   )rW   r   rJ   r   rK   r   esr   rL   r   r   s               r   r   z<test_solve_generalized_continuous_are.<locals>._test_factory=  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GrD   )r   r\   r=   r   r<   r   )rU   r   r   r   rW   s        r   %test_solve_generalized_continuous_arer     s    
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
&				 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
		!
E> K
H 
H 
H u%% . .	TdK,----. .rD   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;   rw   rx   ry   rz   S)r'   r'   r   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   rH   r]   rG   r   r   )rW   r   rJ   r   rK   r   r   r   r   rL   r   s              r   r   z:test_solve_generalized_discrete_are.<locals>._test_factoryz  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}S'9'93GGGGGGrD   )r   r   r\   r=   r   r<   r   )mat20170120rU   r   r   r   rW   s         r   #test_solve_generalized_discrete_arer   M  s%   899K
 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
&				 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
		 
S		S		S		S			S			?&
EP KH H H& u%% . .	TdK,----. .rD   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?   rA   rB   rL   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====		> 	>rD   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rD   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symrL   s      r   test_symmetryz-test_are_validate_args.<locals>.test_symmetry  s~    y||##Aq))fQii&(:; 	> 	>A*ac4===*ac3====	> 	>rD   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?   )singrB   rL   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IrD   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?   )nmrB   rL   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rD   r^   )r   r   r   r   r   s        r   test_are_validate_argsr     sb    > > >D D D> > >J J J	A 	A 	A 	A 	ArD   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$   r3   r5   r4   r%   r&   r'   r(   )r0   r   r   r   )r   r0   r*   ro   )r   r   r1   r   )r   r   r"   r3   )r*   r   r   r0   )r   r0   ro   ro   )r   r   r0   r9   )r   r   r!   r!   )r   r0   r   r   )r   r   r0   r   )r   r   r   r0   r)   r*   r+   r,   r2   r   r1   rb   r-   r.   r/   r0   )r4   r!   r5   )r#   r3   r6   )r$   r%   r"   r#   )r4   r   y      @       @y      @      y              @y              @y      @      @c                     t          |||          }t          t          j        ||          t          j        ||          z   |           d S rF   )r   r   r   rG   r@   rJ   r   crL   s        r   
check_casezTestSolveSylvester.check_case  sB    Aq!$$!"&A,,1"=qAAAAArD   c                 l    | j         D ]+}|                     |d         |d         |d                    ,d S )Nr   r!   r"   )rU   r   rV   s     r   rX   zTestSolveSylvester.test_cases  sB    J 	7 	7DOODGT!Wd1g6666	7 	7rD   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 )Nr0   ro   r*   r9   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IrD   N)	rY   rZ   r[   r   r\   rU   r   rX   r   r^   rD   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rD   r   )r   numpyr   numpy.testingr   r   r   r>   scipy.linalgr   r   r   r   r	   r
   r   r   scipy.sparse._sputilsr   r   r    r   r   r   r   r   r   r^   rD   r   <module>r      s   				     3 3 3 3 3 3  * * * * * * ( ( ( ( ( ( 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B. B. B.JbA bA bAJ/. /. /.dA. A. A.H.A .A .Ab<J <J <J <J <J <J <J <J <J <JrD   