
    tKg7|                         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y)    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                 H   t         j                  j                  t         j                  j                  t         j                  j	                  t
                    d|       }t        j                  |      5 }t        |j                               cddd       S # 1 sw Y   yxY w)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      c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_solvers.py
_load_datar      s^    
 ww||BGGOOBGGOOH,EF"D*H		aAGGI 
		s   5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y-)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             y )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   sQ    ggfoVVAYj";S"Ej";REj";RK    c                     t        ||      }t        t        j                  ||      t        j                  ||j	                         j                               z   |       y N)r   r   r   dotconj	transpose)rA   aqxs       r   check_continuous_casez'TestSolveLyapunov.check_continuous_case_   sE    %a+!&&A,16683E3E3G)HH!	MrE   Nc                     t        |||      }t        t        j                  t        j                  ||      |j	                         j                               |z
  d|z         y )Nmethodr3   )r   r   r   rH   rI   rJ   )rA   rK   rL   rQ   rM   s        r   check_discrete_casez%TestSolveLyapunov.check_discrete_cased   sK    #Aq8!ffRVVAq\1668+=+=+?@1Dd1f	NrE   c                     | j                   D ]f  }| j                  |d   |d          | j                  |d   |d          | j                  |d   |d   d       | j                  |d   |d   d       h y )Nr   r"   directrP   bilinear)casesrN   rR   rA   cases     r   
test_caseszTestSolveLyapunov.test_casesi   sz    JJD&&tAwQ8$$T!Wd1g6$$T!Wd1gh$G$$T!Wd1gj$I	 rE   rG   )__name__
__module____qualname__r   arrayr>   r   TrV   rD   rN   rR   rY    rE   r   r!   r!      sV    
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	<q:
ExLM
N
JrE   r!   c                      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      j!                   e	j                  g d]            j!                   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.                  j1                  dq ee            dr        Zy
)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	                         j
                  |	z  z   |z   }
|	|z  }|
|t        t        j                  |      |j	                         j
                        z  z  }
t        |
t        j                  |
      |       y)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LL-q! Aq!,!eaffhjj1n$q(q5x%a 0(--/2C2CDDD!#r}}S'93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*+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'
)),BHHnnnEF*HJK
L 
S	 	" 
>#3"$ 
% 
>"	#	%	%					 
#$"#% 
& 
				 
sU3ZsU3Z>	B"	r2 4	4xrxxAxrxx11587 
79?B!9L
M					 
!	$	6266"a=	!	AA	(	
	 		" 
sU3ZsU3Z>	sU3ZsU3Z	 	" 
sU3ZsU3Z	 	"Cc
EX>K [[Y	%(89H :HrE   ra   c                   z   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
e
D  cg c]  }dd| z  z   c}} Zded<   ded<   ded<   ej                  j                  d ee	            d        Zd Zyc c}} w )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'   g      ?r'   g-Q=r(      g-C6*?r   r   c                    |\  }}}}}|rt        j                  |       | j                  |   }t        ||||      }	|j	                         j
                  }
|	|z  |	|z  }}|j	                         j
                  |z  |	z
  |z   }||j	                         j
                  |z  t        ||
|z  z   |
      |z  z  z  }t        |t        j                  |      |       y)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LL-||Aq!Q*VVXZZQABffhjj2o!A%qvvxzzB%BGR"82"=>> 	R]]3/d;rE   c                 b   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        ||||       y )
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}    GGBGGFO$$HHi+,..LLB"''-"88GGS#Jk#7Aq!DrE   )rZ   r[   r\   r   r]   r>   kronr   r   rV   r   r   r   r   r   r   r   r   ).0inds   00r   r   r   5  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$	& 
' *.	
.
 
			 
GBGGQFa0	1	HBHHqcA3_5	6	%%%&&%' 
( 
Aq6Aq6"	#			 

F
F
D
G
G
H
J
H
H
J	K 	
K 
.--./..-.0 
1 49
9 
.	/		+	. 
As8aV$	%	A3*			A3%		 
< 
 #&
( 
	vrvvay	vrvvay	 
'  
! 
E7QC!qc*	+			D6(			 
q		6266#q>	"		A3%			q}
EN4K)45#sR#X~5GGBK GBK GBK[[Y	%(89< :<*EE 6s   (^7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 ]  \  }} ||||           y )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                  j                  |	j                  |            |j                         j                  j                  |	j                  |            z   |z   }
|j                         j                  j                  |	      j                  |      |z   }|
|j                  t        t        j                  |      |j                         j                              z  }
t        |
t        j                  |
      |       y)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,LL- Aq!Q2ffhjjnnQUU1X&a)AAAE668::>>!$((+a/x||E"--"2HMMO4E4EFGG!#r}}S'93GrE   )r   r]   r>   r   r=   r   )rV   r   r   r   rX   s        r   %test_solve_generalized_continuous_arer   +  sY    
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		!
E> K
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 ]  \  }} ||||           y )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                  j                  |	j                  |            |j                         j                  j                  |	j                  |            z
  |z   }
|
|j                         j                  j                  |	j                  |            |z   j                  t        ||j                         j                  j                  |	j                  |            z   |j                         j                  j                  |	j                  |            |j                         j                  z               z  }
t        |
t        j                  |
      |       y)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  sQ   )-&1aAq,LL-q!Q1a09qwwqz"A9a AffhjjnnQUU1X&a)AAAE

quuQx(1,11!AFFHJJNN155844668::>>!%%(3affhjj@ 	 	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9K
 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		 
S		S		S		S			S			?&
EP +H<, u%	TdHSM* &rE   c                  "    d } d }d }d }d }y )Nc            
         t        j                  d      } t        j                  d      }t        t        fD ]S  }t        t        || ddd       t        t        |||| d       t        t        |||||        t        t        ||||||        U y )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  sv    ggfoVVAY&(:;A*aaA6*aRa8*aRS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              y )Nr<   r%   r"   r$   r   r   s      r   test_compatible_sizesz5test_are_validate_args.<locals>.test_compatible_sizes  s    ggfoVVAY&(:;A*aS!Q7*aRRSA*aRB?*aRRVVAY?*aRRC <rE   c            	          t        j                  d      j                  dd      } t        j                  d      }t        t
        fD ]*  }t        t        |||| |       t        t        |||||        , y )Nr&   r$   )r   arangereshaper>   r	   r
   r?   r@   )nsymsymrM   s      r   test_symmetryz-test_are_validate_args.<locals>.test_symmetry  s]    yy|##Aq)ffQi&(:;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        ||||        y )Nr   g   mBr   r"   r$   )r   fullr>   r	   r
   r?   r@   )singrC   rM   s      r   test_singularityz0test_are_validate_args.<locals>.test_singularity  se    wwvt$T
a
VVAY&(:;A*aRR> < 	j"6BD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        |||||||         y )Nr   r#   )r   r   nanr>   r	   r
   r?   r@   )nmrC   rM   s      r   test_finitenessz/test_are_validate_args.<locals>.test_finiteness  s    WWVRVV$VVAY&(:;A*aRR8*aRR8*aRR8*aRR8*aRR<*aRRR@ <rE   r_   )r   r   r   r   r   s        r   test_are_validate_argsr     s    >D>J	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y/)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   |       y rG   )r   r   r   rH   rA   rK   r   crM   s        r   
check_casezTestSolveSylvester.check_case  s3    Aq!$!"&&A,1"=qArE   c                 ^    | j                   D ]  }| j                  |d   |d   |d            y )Nr   r"   r#   )rV   r  rW   s     r   rY   zTestSolveSylvester.test_cases  s,    JJDOODGT!Wd1g6 rE   c                 2   t        j                  ddgddgg      }t        j                  dgg      }t        j                  ddg      j                  dd      }t        |||      }t	        |t        j                  ddg      j                  dd             y )Nr1   rq   r+   r:   r"   )r   r]   r   r   r   r   s        r   test_trivialzTestSolveSylvester.test_trivial  s    HHsCj3*-.HHseWHHc3Z ((Q/Aq!$!!RXXsCj%9%A%A"a%H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	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	3Q+EZB7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
     sx    	  D  * ( K A 7 7 (TJ TJnAH AHHsE sEl/.dD+N.Ab<J <JrE   