a
    CCCf{                     @   s   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	d
 ZG dd dZG dd dZG dd dZdd Zdd Zdd ZG d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                 C   sZ   t jt jt jtd| }t|}t|	 W  d   S 1 sL0    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f r   [/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/linalg/tests/test_solvers.py
_load_data   s
    r   c                   @   s  e Zd Zeddgddggeddgddggfed	d
gddggeddgdd
ggfedd
gddggeddgdd
ggfed	d
gddgged
d
gdd
ggfeg dg dg dg dg dgeg dg dg dg dg dgfeg dg dg dg d g d!g d"g d#g d$g d%g d&g d'gedfed(dgd)d*gged(dgjed(dgjj fed(dgd)d*ggeed(dgjed(dgjj fgZd+d, Z	d-d. Z
d4d0d1Zd2d3 Zd/S )5TestSolveLyapunov            	   
               ?      ?       @      @            @       @              @       @                  ?      @      )r"   r$      r    r#   )r    r!   r"      r#   )r#      r4   r4   r"   )r    r2   r!   r      )r2   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#   )y?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        r7   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r6   r7   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r6   r7   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r6   r7   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r6   r7   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r6   r7   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r6   r7   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r6   r7   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r7   r6   r7   r7   )r7   r7   r7   r7   r7   r7   r7   r7   r7   r6   r7   r   g      c                 C   sH   t d}t d}ttt|| ttt|| ttt|t d d S )Nr"   r!   r"   r!   )r   oneseyeassert_raises
ValueErrorr   )selfnsqsqr   r   r   $test_continuous_squareness_and_shapeX   s
    

z6TestSolveLyapunov.test_continuous_squareness_and_shapec                 C   s4   t ||}tt||t||   | d S N)r   r   r   dotconj	transpose)r>   aqxr   r   r   check_continuous_case_   s    
 z'TestSolveLyapunov.check_continuous_caseNc                 C   s<   t |||d}ttt|||  | d|  d S )Nmethodr1   )r   r   r   rC   rD   rE   )r>   rF   rG   rK   rH   r   r   r   check_discrete_cased   s    $z%TestSolveLyapunov.check_discrete_casec                 C   sh   | j D ]\}| |d |d  | |d |d  | j|d |d dd | j|d |d dd qd S )Nr   r    directrJ   Zbilinear)casesrI   rL   r>   caser   r   r   
test_casesi   s
    
zTestSolveLyapunov.test_cases)N)__name__
__module____qualname__r   arrayr;   r   TrN   rA   rI   rL   rQ   r   r   r   r   r      sX   
!#"<
r   c                   @   s  e Zd ZedZedZedZedZedZe	
dgde	dgdggedd	dd
fe	ddgddgge	dgdgge	ddgddggdd
fe	g dg dg dg dge	ddgddgddgddgge	g dg dg dg dge	d d
fe	g d!g d"g d#g d$g d%g d&g d'g d(ge	g d)g d*gjd+ e	g d,g d-g d.g d/g d0g d1g d2g d3ge	d d
fe	g d4g d5g d6g d7g d8g d9g d:g d;g d<g	e	g d=g d>g d?g d@g dAg dBg dBg dBg dBg	e	de	dd
fedC edD edE edF d
fe	ddgddGgge	dHgdgge	dIddJfedKdLe	dMdNgd+dOgge	dPdQgdQdRgge	dIedHd d
fe	ddSgddgge	dgdgge	d dd
fe	dTdgddTgge	d e	d e	d d
fe	ddgdd gge	dgdgge	dUdVgdVdGggdd
fe	g dWg dXg dYgd e	de	g dZg d[g d\ge	
g d]e	g dZg d[g d\gd e	ddS d^fe	g d_g d`g dag dbge	g dcgje	
g dddd
fe	g deg dfg dgg dhge	die	djdd
fedC edD edE edF d
fe	jdkdkddle	dkdkdG  e	ede	dmd e	jdkdkddl e	dke	dke	dkd
fe	
e	dnde	e	dode	dode	dodj 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dqeedrds Zd
S )tTestSolveContinuousArezcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr/   r    r   r)   Nr#   r"               r8   r$   r4         @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`   ra   gsh|??r!   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   rb   gSrc   r   r   r   r   )r   r   rb   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   rd   gK7gE?r   )r   r   r   r   r   rd   g^I+gtV?)r   r   r   r   r   r   rd   gJ+)gQ@rZ   gB@p=
ף@gzG@g
ףp=
@re   r0   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGzMbP?)r/           rg   rg         ?rg   rg   皙?)rg   r/   rg   rg   ri   rg   rg   rg   )rg   rg   r/   rg   rg   rh   rg   rg   )rg   rg   rg   r/   rg   rg   rg   rg   )rh   ri   rg   rg   ri   rg   rg   rg   )rg   rg   rh   rg   rg   ri   rg   rg   )rg   rg   rg   rg   rg   rg   ri   rg   )ri   rg   rg   rg   rg   rg   rg   ri   )	g~jtg{Gz@rg   rg   g- rg   rg   rg   gףp=
?)	g/$ֿgZd;O?rg   rg   gQrg   rg   rg   g
ףp=
?)	gA`ТgMb.@g-Frg   grg   rg   rg   gq=
ףp@)	g7A`5g!rhA@gV-տg(\g1rg   rg   rg   g(\@)	g+Ngy&1X@gT㥛Ġg(\?g/$Jrg   rg   rg   gffffff4@)	r   r   r   r        W@ffffffbrg   gJ@rg   )	r   r   r   r   r   rj   rk   r   r   )	r   r   r   r   r   皙)@rg   皙?r   )	r   r   r   r   rl   rg   rg   g2@rm   ){Gz?gI+gSÿ)g~jth?g/$rg   )g;On?gh|?5rg   )g~jt?g#~jĿrg   )g rh?g{Gzܿrg   )rg   rg   rg   ABQR       ư>r!   r!   zBad residual accuracygg{Gzri   rg   rn   d   i  i'      .Ag  ?i)g    ZA    >Ag       )ry   g    `VA    >)rg   rz   g    SA)r/   rs   rs   )rs   r/   rs   )rs   rs   r/   )rt   r    rw   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   rw   )r    r   r    r   )ưr    r   r   )r8   r{   r   r   )r   r   rt   r    )r   r   r8   rt   )r#   r    )r#   r#   @   k)>   r   )      )   r'      r   r&   r4   Nr2   r5   r   r   Nr$   r   r   r   Nr'   NNj, casec                 C   s   |\}}}}}|rt j|d | j| }t||||}	|	| | j|	  | }
|	| }|
|tt|| j 8 }
t	|
t
|
|d dS )z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is truereasondecimalN)pytestxfailmin_decimalr   rD   rV   r   r   
atleast_2dr   
zeros_like)r>   jrP   rF   brG   rknownfailuredecrH   resout_factr   r   r   test_solve_continuous_are&  s    
z0TestSolveContinuousAre.test_solve_continuous_are)rR   rS   rT   r   Zmat6Zmat15Zmat18Zmat19Zmat20r   diagrU   r
   r;   rV   r:   rC   Zrot90zerosflipudrN   r   r   markparametrize	enumerater   r   r   r   r   rW   q   sj  
 





	


	
	"  -rW   c                   @   s  e Zd Zeddgddggedgdggeddgddggedggdfeddgddggedgd	ggeddgddggedggdfed
dgddggeddgdd
ggeddgddggeddgdd
ggdfeg dg dg dgedgdgdgged
eddfedd
gddggedgdggeddgddggedggdfeddgddggeddgddggeddgddgged dgdd
ggdfeddgddggedgdggeddgddggedggdfeddgddggeddgddgged!d!gd!d"ggd# edd
gd
dggdfeddgddggedgdggeddgddggedggdfeg d$g d%g d&g d'ged(dgd)d*gd+d,gd-d)ggeg d.g d/g d0g d1geddfeg d2g d3g d4g d5ged6d7gd8d9gd:d;gd<d=ggedd> eddfeg d?g d@g dAg dBgeg dCg dDg dEg dFgeg dGg dHg dIg dJgeddfeg dKg dLg dMg dNg dOgd> edPdQgdRdSgdTdUgdVdWgdXdYggd> edZeddfeedejddgdd[eededgdgdggeg d\g d\g d]g d^g d_g d]ged
dgddggdfd`eg dag dbg dcg ddg deg dfg dgg dhg dig	 eg djg dkg dlg dmg dng dog dpg dqg drg	d` eg dsed
dfeddtgddggedgdggededggdufeg dvg dwg dxgdy ed
dted
 dted
 dzfeg d{g d|g d}g d~gedgdgdgdggeg dedggdfejddd[eeddededggdfgZ	dZ
dd e
D Zded< ejdee	dd Zdd ZdS )TestSolveDiscreteArer!   y      ?       r   y             r    Nr8   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$   r4   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r5   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?ri   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?rn   )g333333ggg>Q)r/   g333333?g?gG)3@)rg   r/   g?g {\f@)rg   rg   rg   ggR@)r/   r1   r1   r1   )rg   r/   r1   r1   )rg   rg   r/   r1   )rg   rg   rg   r/   )r!   r    r"   r4   )r    r!   r!   r2   )r"   r!   r4   r&   )r4   r2   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
Fr2   r}   )r    r    r   r   r   r   )r   r   r   r   r   r   )r   r   r   r    r8   r   )r   r   r   r8   r    r   rf   )	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   rw   *Presumed issue with OpenBLAS, see gh-16926)   r%   )r%   r   )r   r   r5   gqq?z!Issue with OpenBLAS, see gh-16926)gG?r   r   r   )r    r   r   r   r[   )r   r   r    r   g:0yE>)r   r   r   r    g      ?rv   )r'   r   r   r   r   r      r   r   r   r   r   r   r   r'   r!   r2   r4   r%   c                 C   s   g | ]}d d|   qS )g      ?r%   r   ).0indr   r   r   
<listcomp>      zTestSolveDiscreteAre.<listcomp>g-Q=r&   r   c                 C   s   |\}}}}}|rt j|d | j| }t||||}	| j}
|	| |	|  }}| j| |	 | }|| j| t||
|  |
|  8 }t|t	||d dS )5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is truer   atolN)
r   r   max_tolr	   rD   rV   r   r   r   r   )r>   r   rP   rF   r   rG   r   r   r   rH   ZbHZxaxbr   r   r   r   test_solve_discrete_are  s    

(z,TestSolveDiscreteAre.test_solve_discrete_arec                 C   sn   t t d}d|d< t g dg dgj}t |dt g d }t dd	g}ttt	|||| d S )
Nr"   r"   r8   )r   r    )r    r    r   )r   r   r    r   )r3   r8   gffffffiri   )
r   Ztriur:   rU   rV   Z	full_liker   r<   r   r   )r>   ro   rp   rq   rr   r   r   r   test_infeasible  s    z$TestSolveDiscreteAre.test_infeasible)rR   rS   rT   r   rU   r;   Zkronr   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   5  s  










"


	

	  H
r   c                  C   s  t g dg dg dgt ddgddgdd	ggt d
t dt g dg dg dgt dd ft g dg dg dgt ddgddgdd	ggt d
t dt g dg dg dgt dd fg} d}dd }t| D ]\}}||||  qd 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?r9   )r%   r%   c                 S   s   | \}}}}}}}|r"t j|d t||||||}	| j|	|| j|	| | }
| j|	|| }|
|tt|| j8 }
t	|
t
|
|d dS )r   r   r   N)r   r   r   rD   rV   rC   r   r   r   r   r   )rP   r   rF   r   rG   r   esr   rH   r   r   r   r   r   _test_factoryE  s    0 z<test_solve_generalized_continuous_are.<locals>._test_factory)r   rU   r;   r   r:   r   )rN   r   r   r   rP   r   r   r   %test_solve_generalized_continuous_are#  sN    





r   c                  C   s6  t d} tg dg dg dgtddgddgd	d
ggtdtdtg dg dg dgtdd ftg dg dg dgtddgddgd	d
ggtdtdtg dg dg dgtddf| d | d | d | d d | d d fg}d}dd }t|D ]\}}||||  qd S )Nzgendare_20170120_data.npzr   r   r   r   r   r   r   r   r   r"   r!   r   r   r   r9   r   ro   rp   rq   rr   S)p~=r   gxD\8<c              
   S   s  | \}}}}}}}|r"t j|d t||||||}	|du rLt|jd }|du r^t|}| j	|		|| j	|		| | }
|
| j	|		|| 	t
|| j	|		| | j	|		|| j 8 }
t|
t|
|d dS )r   r   Nr   r   )r   r   r	   r   r;   shaper   rD   rV   rC   r   r   )rP   r   rF   r   rG   r   r   r   r   rH   r   r   r   r   r     s    
0z:test_solve_generalized_discrete_are.<locals>._test_factory)r   r   rU   r;   r   r:   r   )Zmat20170120rN   Zmax_atolr   r   rP   r   r   r   #test_solve_generalized_discrete_areU  s`    





(r   c                  C   s,   dd } dd }dd }dd }d	d
 }d S )Nc               	   S   sp   t d} t d}ttfD ]N}tt|| ddd tt|||| d tt|||||  tt||||||  qd S )Nr9   r"   r    r   r:   r;   r   r	   r<   r=   r?   r@   rH   r   r   r   test_square_shape  s    

z1test_are_validate_args.<locals>.test_square_shapec                  S   s   t d} t d}ttfD ]v}tt||| dd tt|||||||  tt|||t d| tt||||t d tt|||||t d qd S )Nr9   r#   r    r"   r   r   r   r   r   test_compatible_sizes  s    

z5test_are_validate_args.<locals>.test_compatible_sizesc                  S   sR   t ddd} t d}ttfD ](}tt|||| | tt|||||  q$d S )Nr$   r"   )r   Zarangereshaper;   r   r	   r<   r=   )ZnsymsymrH   r   r   r   test_symmetry  s
    
z-test_are_validate_args.<locals>.test_symmetryc               	   S   s^   t dd} | d  d8  < t d}ttfD ]}tt||||||  q.ttt||||  d S )Nr   g   mBru   r    r"   )r   fullr;   r   r	   r<   r=   )Zsingr@   rH   r   r   r   test_singularity  s    
z0test_are_validate_args.<locals>.test_singularityc               
   S   s   t dt j} t d}ttfD ]v}tt|| ||| tt||| || tt|||| | tt|||||  tt||||||  tt|||||||  q d S )Nru   r!   )r   r   nanr;   r   r	   r<   r=   )nmr@   rH   r   r   r   test_finiteness  s    
z/test_are_validate_args.<locals>.test_finitenessr   )r   r   r   r   r   r   r   r   test_are_validate_args  s
    	
	r   c                   @   sT  e Zd Zeddgddggeddgddggedd	gd
dggfeg dg dg dg dgeg dg dg dg dgeg dg dg dg dgfeddgddggeddgddggedd gd!dggfed"dgddggeddgddggedd gd!dggfeddgddggeddgddggedd gd!dggfeddgddggeddgddggeddgddggfeg d#g d$g d%gedd&gddggeddgd&dgddggfeg d'g d$g d%gedd&gdd(ggeddgd&d)gd*d+ggfgZd,d- Zd.d/ Zd0d1 Zd2S )3TestSolveSylvesterr    r!   r   r#   r2   r4   r3   r$   r%   r&   r'   )r/   r   r   r   )r   r/   r)   rg   )r   r   r0   r   )r   r   r!   r2   )r)   r   r   r/   )r   r/   rg   rg   )r   r   r/   r8   )r   r   r    r    )r   r/   r   r   )r   r   r/   r   )r   r   r   r/   r(   r)   r*   r+   r1   r   r0   rZ   r,   r-   r.   r/   )r3   r    r4   )r"   r2   r5   )r#   r$   r!   r"   )r3   r   y      @       @y      @      y              @y              @y      @      @c                 C   s.   t |||}tt||t|| | d S rB   )r   r   r   rC   r>   rF   r   crH   r   r   r   
check_case  s    zTestSolveSylvester.check_casec                 C   s*   | j D ]}| |d |d |d  qd S )Nr   r    r!   )rN   r   rO   r   r   r   rQ      s    
zTestSolveSylvester.test_casesc                 C   sf   t ddgddgg}t dgg}t ddgdd}t|||}t|t ddgdd d S )Nr/   rg   r)   r8   r    )r   rU   r   r   r   r   r   r   r   test_trivial  s
    zTestSolveSylvester.test_trivialN)	rR   rS   rT   r   rU   rN   r   rQ   r   r   r   r   r   r     s`   


-r   )r   numpyr   Znumpy.testingr   r   r   r   r<   Zscipy.linalgr   r   r   r   r	   r
   r   r   Zscipy.sparse._sputilsr   r   r   rW   r   r   r   r   r   r   r   r   r   <module>   s&   W E o2G1