
    e!h                     "   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j0                  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!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      g/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_solvers.py
_load_datar      sg    
 ww||BGGOOBGGOOH,EF"D*H		 aAGGI  s   5BB!c                      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                  j!                  d1e      ej                  j!                  d2e      d3               Zy.)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             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_shape_   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)rB   aqxs       r   check_continuous_casez'TestSolveLyapunov.check_continuous_casef   sE    %a+!&&A,16683E3E3G)HH!	MrF   Nc                     t        |||      }t        t        j                  t        j                  ||      |j	                         j                               |z
  d|z         y )Nmethodr4   )r   r   r   rI   rJ   rK   )rB   rL   rM   rR   rN   s        r   check_discrete_casez%TestSolveLyapunov.check_discrete_casek   sK    #Aq8!ffRVVAq\1668+=+=+?@1Dd1f	NrF   c                     | j                   D ]f  }| j                  |d   |d          | j                  |d   |d          | j                  |d   |d   d       | j                  |d   |d   d       h y )Nr   r#   directrQ   bilinear)casesrO   rS   rB   cases     r   
test_caseszTestSolveLyapunov.test_casesp   s    JJ 	JD&&tAwQ8$$T!Wd1g6$$T!Wd1gh$G$$T!Wd1gj$I		JrF   dtype_adtype_qc                    t         j                  j                  d      }t        j                  d|      }t        j                  d|      }t	        ||      }|j                  d      dz  j                  |      }|j                  d      dz  j                  |      }t	        ||      }|j                  dk(  sJ |j                  |j                  k(  sJ y )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     ii##I.HHV7+HHV7+'1-ZZ#++G4ZZ#++G4'1-yyF"""yyCII%%%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	FF#gs^4	5	7 
C:Sz*	+	FF#gs^4	5	7 
FC=8S/2	3	C:c{+	,	. 
?O_"O5 
6	?O_"O5 
6	7
 
 =    
!B 
C!	F 
!Q$$	%
!Q.

VQF^--//
/	2 
!Q$$	%
"((61a&>##faVn&6&6&8&88
9	<w=
E~LM
N
J [[Y/[[Y/& 0 0&rF   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.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	                         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)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LL-q! Aq!,!eaffhjj1n$q(q5x%a 0(--/2C2CDDD!#r}}S'93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*+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rF   rw   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&   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(   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)
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LL-||Aq!Q*VVXZZQABffhjj2o!A%qvvxzzB%BGR"82"=>> 	R]]3/d;rF   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   )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}    GGBGGFO$$HHi+,..LLB"''-"88GGS#Jk#7Aq!DrF   )rk   rl   rm   r   ro   r?   kronr   r   rW   r   r   rq   rr   rs   r   r   r   ).0inds   00r   r   r   L  s	     
At9q#h'	(	A3*		Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	C52$-	 	Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	Aq6Aq6"	#	At9tQi(	)	As8b!W%	&			 
7668 
9 
J<*
|<	=				 
Aq6D$<(	)	A3+		Aq6Aq6"	#	A3%			 
FA;F,	-	E5>GU#34	5	E1:4y)	*	C8aV$	%			 
Ar7QF#	$	A3*		Aq6Aq6"	#	A3%			 
Aq6Ar7#	$	Aq6Aq6"	#	B8b!W%	&$	/	Aq6Aq6"	#			 
Aq6Aq6"	#	A3*		Aq6Aq6"	#	A3%			 
'''') 
* 
FF#F#F#F#% 
& 
'''(* 
+ 
		 
====? 
@ 
Iy)y)z*y)+ 
, 
4		
	 
C??@B 
C 
*)(') 
* 
< !# 
$ 
		 
<>@?<	> 
? BF	
F
 
FG$G$G$G$G$	& 
' *.	
.
 
			 
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)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,LL- Aq!Q2ffhjjnnQUU1X&a)AAAE668::>>!$((+a/x||E"--"2HMMO4E4EFGG!#r}}S'93GrF   )r   ro   r?   rd   r>   r   )rW   r   r   r   rY   s        r   %test_solve_generalized_continuous_arer   B  s^    
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		!
E> K
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 ]  \  }} ||||           y )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                  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   )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  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;rF   )r   r   ro   r?   rd   r>   r   )mat20170120rW   max_atolr   r   rY   s         r   #test_solve_generalized_discrete_arer   t  s   89K
 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
&			 
===? 
@ 
L,/ ,/ ,/1 
2 
		===? 
@ 
		 
S		S		S		S			S			?&
EP +H<, u% +	TdHSM*+rF   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@   rA   rC   rD   rN   s      r   test_square_shapez1test_are_validate_args.<locals>.test_square_shape  s{    ggfoVVAY&(:; 	>A*aaA6*aRa8*aRS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              y )Nr=   r&   r#   r%   r   r   s      r   test_compatible_sizesz5test_are_validate_args.<locals>.test_compatible_sizes  s    ggfoVVAY&(:; 	DA*aS!Q7*aRRSA*aRB?*aRRVVAY?*aRRC	DrF   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@   rA   )nsymsymrN   s      r   test_symmetryz-test_are_validate_args.<locals>.test_symmetry  sb    yy|##Aq)ffQi&(:; 	>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        ||||        y )Nr   g   mBr   r#   r%   )r   fullr?   r	   r
   r@   rA   )singrD   rN   s      r   test_singularityz0test_are_validate_args.<locals>.test_singularity  sj    wwvt$T
a
VVAY&(:; 	?A*aRR>	? 	j"6BD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        |||||||         y )Nr   r$   )r   r  nanr?   r	   r
   r@   rA   )nmrD   rN   s      r   test_finitenessz/test_are_validate_args.<locals>.test_finiteness  s    WWVRVV$VVAY&(:; 	AA*aRR8*aRR8*aRR8*aRR8*aRR<*aRRR@	ArF   ru   )r   r   r  r  r
  s        r   test_are_validate_argsr    s    >D>J	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                  j                  d3e      e
j                  j                  d4e      e
j                  j                  d5e      e
j                  j                  d6dd*g      e
j                  j                  d7dd*g      d8                                    Zy9):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   |       y rH   )r   r   r   rI   rB   rL   r   crN   s        r   
check_casezTestSolveSylvester.check_case$  s3    Aq!$!"&&A,1"=qArF   c                 ^    | j                   D ]  }| j                  |d   |d   |d            y )Nr   r#   r$   )rW   r  rX   s     r   rZ   zTestSolveSylvester.test_cases(  s1    JJ 	7DOODGT!Wd1g6	7rF   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 )Nr2   r   r,   r;   r#   )r   ro   r   r   r   r  s        r   test_trivialzTestSolveSylvester.test_trivial,  s    HHsCj3*-.HHseWHHc3Z ((Q/Aq!$!!RXXsCj%9%A%A"a%HIrF   r[   dtype_br\   mnc                    ||cxk(  rdk7  rn nt        j                  d       t        j                  j	                  d      }t        j
                  ||f|      }t        j
                  ||f|      }t        j
                  ||f|      }	t        |||	      }
|j                  d      dz  j                  |      }|j                  d      dz  j                  |      }|j                  d      dz  j                  |      }	t        |||	      }|
j                  ||fk(  sJ |
j                  |j                  k(  sJ y )	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  s    ;Q;KKPQii##O4HHaV7+HHaV7+HHaV7+aA&ZZ#++G4ZZ#++G4ZZ#++G4aA&yyQF"""yyCII%%%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	D":Sz*	+	FF#gs^4	5	7 
C:Sz*	+	D!9sCj)	*	FF#gs^4	5	7 
FC=8S/2	3	D!9sCj)	*	FF#gs^4	5	7 
FC=8S/2	3	D!9sCj)	*	C:c{+	,	. 
9i3	4	Aq6Aq6"	#	Aq6Aq6Aq6*	+	- 
=)Y7	8	Aq6At9%	&	Ar7QGb$Z0	1	3e5EnB7J [[Y/[[Y/[[Y/[[S1a&)[[S1a&)& * * 0 0 0
&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  * ( K A 7 7 ( ubjj'2<<	8g& g&TAH AHHsE sEl/.dD+N.Ab`& `&rF   