
    ^Mh                     (   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 eeej        eej        g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/html/test/jupyter/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                   J   e Zd Z ej        d           ej        d          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        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d4d/Zd0 Zej                            d1e          ej                            d2e          d3                         Zd.S )5TestSolveLyapunovr   r               	   
               ?      ?       @      @            @       @              @       @                  ?      @      )r%   r'      r#   r&   )r#   r$   r%      r&   )r&      r7   r7   r%   )r#   r5   r$   r      )r5   r%   r%   r#   r5   )r$   r&   r#   r   r#   )r&   r#   r   r$   r   )r#   r   r%   r   r%   )r   r$   r   r#   r   )r#   r   r%   r   r&   )y?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        r:   r:   r:   r:   r:   r:   r:   r:   r:   )r:   r9   r:   r:   r:   r:   r:   r:   r:   r:   r:   )r:   r:   r9   r:   r:   r:   r:   r:   r:   r:   r:   )r:   r:   r:   r9   r:   r:   r:   r:   r:   r:   r:   )r:   r:   r:   r:   r9   r:   r:   r:   r:   r:   r:   )r:   r:   r:   r:   r:   r9   r:   r:   r:   r:   r:   )r:   r:   r:   r:   r:   r:   r9   r:   r:   r:   r:   )r:   r:   r:   r:   r:   r:   r:   r9   r:   r:   r:   )r:   r:   r:   r:   r:   r:   r:   r:   r9   r:   r:   )r:   r:   r:   r:   r:   r:   r:   r:   r:   r9   r:   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_shape_   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)rB   aqxs       r   check_continuous_casez'TestSolveLyapunov.check_continuous_casef   sf    %a++!&A,,166883E3E3G3G)H)HH!	M 	M 	M 	M 	MrF   Nc                     t          |||          }t          t          j        t          j        ||          |                                                                          |z
  d|z             d S )Nmethodr4   )r   r   r   rI   rJ   rK   )rB   rL   rM   rR   rN   s        r   check_discrete_casez%TestSolveLyapunov.check_discrete_casek   so    #Aq888!fRVAq\\16688+=+=+?+?@@1Dd1f	N 	N 	N 	N 	NrF   c                 2   | j         D ]}|                     |d         |d                    |                     |d         |d                    |                     |d         |d         d           |                     |d         |d         d           d S )Nr   r#   directrQ   bilinear)casesrO   rS   rB   cases     r   
test_caseszTestSolveLyapunov.test_casesp   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rF   dtype_adtype_qc                    t           j                            d          }t          j        d|          }t          j        d|          }t	          ||          }|                    d          dz                      |          }|                    d          dz                      |          }t	          ||          }|j        dk    sJ |j        |j        k    sJ d S )Ni[r"   dtyper5   r5   d   )r   randomdefault_rngzerosr   astypeshaper_   )rB   r[   r\   rngrL   rM   resrefs           r   test_size_0zTestSolveLyapunov.test_size_0w   s     i##I..HV7+++HV7+++'1--ZZ#++G44ZZ#++G44'1--yF""""yCI%%%%%%rF   rH   )__name__
__module____qualname__r   emptyarrayr?   r   TrW   rE   rO   rS   rZ   pytestmarkparametrizedtypesrj    rF   r   r!   r!      s        
&			&				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	<w=
E~L L LM M M
N N N N
J J J [Y//[Y//& & 0/ 0/& & &rF   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.npzr2   r#   r   r,   Nr&   r%               r;   r'   r7         @r   r#   r   r   )r   g=
ףp=g(\?gQ)r   g rhgףp=
gq=
ףp@)g rh?g/nRgGzgzGʿg
ףp=
?ggffffffgMbgQ?)g/$@7A`@jt?Zd;O?)r|   g/$@|?5^?y&1?)r}   r   gx&1?&1?)r~   r   r   gsh|??r$   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   r   gSr   r   r   r   r   )r   r   r   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   r   gK7gE?r   )r   r   r   r   r   r   g^I+gtV?)r   r   r   r   r   r   r   gJ+)gQ@rz   gB@p=
ף@gzG@g
ףp=
@r   r3   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGzMbP?)r2           r   r         ?r   r   皙?)r   r2   r   r   r   r   r   r   )r   r   r2   r   r   r   r   r   )r   r   r   r2   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )	g~jtg{Gz@r   r   g- r   r   r   gףp=
?)	g/$ֿgZd;O?r   r   gQr   r   r   g
ףp=
?)	gA`ТgMb.@g-Fr   gr   r   r   gq=
ףp@)	g7A`5g!rhA@gV-տg(\g1r   r   r   g(\@)	g+Ngy&1X@gT㥛Ġg(\?g/$Jr   r   r   gffffff4@)	r   r   r   r        W@ffffffbr   gJ@r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   皙)@r   皙?r   )	r   r   r   r   r   r   r   g2@r   ){Gz?gI+gSÿ)g~jth?g/$r   )g;On?gh|?5r   )g~jt?g#~jĿr   )g rh?g{Gzܿr   )r   r   r   ABQR       ư>r$   r$   zBad residual accuracygg{Gzr   r   r   ra   i  i'      .Ag  ?i)g    ZA    >Ag       )r   g    `VA    >)r   r   g    SA)r2   r   r   )r   r2   r   )r   r   r2   )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)   r7   Nr5   r8   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)rq   xfailmin_decimalr	   rJ   rp   r   r   
atleast_2dr   
zeros_like)rB   jrY   rL   brM   rknownfailuredecrN   rh   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GrF   )rk   rl   rm   r   mat6mat15mat18mat19mat20r   diagro   r   r?   rp   r>   rI   rot90rd   flipudrW   r   rq   rr   rs   	enumerater   ru   rF   r   rw   rw      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rF   rw   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&   rx   ry   r'   r7   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r8   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?r   gǺFg{Gz?g<,Ԛ}?gǺf)gQ?r   r   Zd;Ͽ)r   g+?=
ףp=?r   )r   r   g+?r   )r   r   r   gS㥛?)gPn?g/tgM?g[A+Q)gϷK?gH`?g$([gu?)gY9}g_":?g!'>տgCK?)g_L@geXgg+пg Tfn?g`[H?gQnHg	v>g}k,gUW;g{/L	gOaeRN?r   )g333333ggg>Q)r2   g333333?g?gG)3@)r   r2   g?g {\f@)r   r   r   ggR@)r2   r4   r4   r4   )r   r2   r4   r4   )r   r   r2   r4   )r   r   r   r2   )r$   r#   r%   r7   )r#   r$   r$   r5   )r%   r$   r7   r)   )r7   r5   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
Fr5   r   )r#   r#   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r#   r;   r   )r   r   r   r;   r#   r   r   )	g0@g     `@gGz.'@g]Fx?g\(Bg#J{/L?r   g+@g"@)	g33333#S@g33333@gq=
ףp)@g"u?gGzDg#?r   gQ@g"@)	g_g     Xv@i1  gHzG?g33333Yg/$?r   g33333'@gQ2@)	g     vg33333σ@g
ףp=R@g@g     qgMbX9@r   gQ?@g)\hH@)	i@g@g`gScg{GQ@g;On@r   gzG!U@gy_@)	g33333Äg=
ףp=\@g)\8VgEgGzU@g333333+@r   g	b@gffffffY@)	g33333yi  g{GZKg+g(\P@g{G(@gz6?gGzX@g{GjQ@)	g|fg33333r@gGz7g(\gQKN@g)\(6@r   g̼j@gQA@)	gug33333#@g{GFgmgffffffZ@g\(3@r   g33333ck@gfffffj@)g
ףp=
@g cZB>gQT)gT㥛 ?gd;Ogףp=
)gʡE?g=
ףp=*gn!@)gA`"@gq=
ףAg8@)gGz$@g     0Wg33333P@)gZd;@gQNgQ+C@)g7A`@g
ףp=jBg
ףp=J4@)gK7?gGz/gsh|@)gv/@gHzG>gzGa-@)	2   r   r   r   r   r   r   r   r   r   )   r(   )r(   r   )r   r   r8   gqq?)gG?r   r   r   )r#   r   r   r   r{   )r   r   r#   r   g:0yE>)r   r   r   r#   g      ?ra   )r*   r   r   r   r   r      r   r   r   r   r   r   r   r*   r$   r&   r7   r(   c                      g | ]}d d| z  z  S )g      ?r(   ru   ).0inds     r   
<listcomp>zTestSolveDiscreteAre.<listcomp>  s"    555#sR#X~555rF   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)
rq   r   max_tolr
   rJ   rp   r   r   r   r   )rB   r   rY   rL   r   rM   r   r   r   rN   bHxaxbrh   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;;;;;;rF   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   )r6   r;   gffffffir   )
r   triur>   ro   rp   	full_liker   r@   r   r	   )rB   r   r   r   r   s        r   test_infeasiblez$TestSolveDiscreteAre.test_infeasible8  s    GBGFOO$$$Hiii+,,.LB"'---"8"88GS#Jk#7Aq!DDDDDrF   )rk   rl   rm   r   ro   r?   kronr   r   rW   r   r   rq   rr   rs   r   r   r   ru   rF   r   r   r   L  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rF   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)rq   r   r	   rJ   rp   rI   r   r   r   r   r   )rY   r   rL   r   rM   r   esr   rN   rh   r   s               r   _test_factoryz<test_solve_generalized_continuous_are.<locals>._test_factoryd  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GrF   )r   ro   r?   rd   r>   r   )rW   r   r   r   rY   s        r   %test_solve_generalized_continuous_arer   B  s    
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
&				 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
		!
E> K
H 
H 
H u%% . .	TdK,----. .rF   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=   r   r   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   )rq   r   r
   r   r?   rf   r   rJ   rp   rI   r   r   )rY   r   rL   r   rM   r   r   r   r   rN   rh   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;;;;;;rF   )r   r   ro   r?   rd   r>   r   )mat20170120rW   max_atolr   r   rY   s         r   #test_solve_generalized_discrete_arer   t  s!   899K
 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
&				 
=========? 
@ 
@ 
L,/ ,/ ,/1 
2 
2 
		=========? 
@ 
@ 
		 
S		S		S		S			S			?&
EP +H< < <, u%% + +	TdHSM****+ +rF   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@   rA   rC   rD   rN   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====		> 	>rF   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rF   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@   rA   )nsymsymrN   s      r   test_symmetryz-test_are_validate_args.<locals>.test_symmetry  s~    y||##Aq))fQii&(:; 	> 	>A*ac4===*ac3====	> 	>rF   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@   rA   )singrD   rN   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IrF   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@   rA   )nmrD   rN   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rF   ru   )r   r   r  r  r  s        r   test_are_validate_argsr    sb    > > >D D D> > >J J J	A 	A 	A 	A 	ArF   c                      e Zd Z ej        d           ej        d           ej        d          f ej        d           ej        d           ej        d          f ej        d           ej        d           ej        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          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d0 Zd1 Zd2 Z	e
j                            d3e          e
j                            d4e          e
j                            d5e          e
j                            d6dd*g          e
j                            d7dd*g          d8                                                             Zd9S ):TestSolveSylvesterr"   r   )r   r$   )r$   r   r#   r$   r   r&   r5   r7   r6   r'   r(   r)   r*   )r2   r   r   r   )r   r2   r,   r   )r   r   r3   r   )r   r   r$   r5   )r,   r   r   r2   )r   r2   r   r   )r   r   r2   r;   )r   r   r#   r#   )r   r2   r   r   )r   r   r2   r   )r   r   r   r2   r+   r,   r-   r.   r4   r   r3   rz   r/   r0   r1   r2   )r6   r#   r7   )r%   r5   r8   )r&   r'   r$   r%   )r6   r   y      @       @y      @      y              @y              @y      @      @c                     t          |||          }t          t          j        ||          t          j        ||          z   |           d S rH   )r   r   r   rI   rB   rL   r   crN   s        r   
check_casezTestSolveSylvester.check_case$  sB    Aq!$$!"&A,,1"=qAAAAArF   c                 l    | j         D ]+}|                     |d         |d         |d                    ,d S )Nr   r#   r$   )rW   r  rX   s     r   rZ   zTestSolveSylvester.test_cases(  sB    J 	7 	7DOODGT!Wd1g6666	7 	7rF   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 )Nr2   r   r,   r;   r#   )r   ro   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IrF   r[   dtype_br\   mnc                    ||cxk    rdk    rn nt          j        d           t          j                            d          }t          j        ||f|          }t          j        ||f|          }t          j        ||f|          }	t          |||	          }
|                    d          dz                      |          }|                    d          dz                      |          }|                    d          dz                      |          }	t          |||	          }|
j        ||fk    sJ |
j	        |j	        k    sJ d S )	Nr   z6m = n != 0 is not a case that needs to be tested here.l   >& r^   r`   ra   )r7   r7   )r5   r7   )
rq   skipr   rb   rc   rd   r   re   rf   r_   )rB   r  r  r[   r  r\   rg   rL   r   rM   rh   ri   s               r   rj   zTestSolveSylvester.test_size_06  sK    ;;;;Q;;;;;KPQQQi##O44HaV7+++HaV7+++HaV7+++aA&&ZZ#++G44ZZ#++G44ZZ#++G44aA&&yQF""""yCI%%%%%%rF   N)rk   rl   rm   r   rn   ro   rW   r  rZ   r  rq   rr   rs   rt   rj   ru   rF   r   r  r    s        
&			&			&			 "(6

	&			&		
 "(6

	&			&		
 
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	3e5EnB B B7 7 7J J J [Y//[Y//[Y//[S1a&))[S1a&))& & *) *) 0/ 0/ 0/
& & &rF   r  )"r   numpyr   numpy.testingr   r   rq   r   r@   scipy.linalgr   r   r   r	   r
   r   r   r   scipy.sparse._sputilsr   intfloatfloat32complex	complex64rt   r   r!   rw   r   r   r   r  r  ru   rF   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 ( ( ( ( ( ( ubj'2<	8  g& g& g& g& g& g& g& g&T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`& `& `& `& `& `& `& `& `& `&rF   