o
    h                     @   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 eeejeejg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 s&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f r   f/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_solvers.py
_load_data   s   
$r   c                   @   s  e Zd Zeded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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d9d1d2Zd3d4 Zejd5eejd6ed7d8 Zd0S ):TestSolveLyapunovr   r               	   
               ?      ?       @      @            @       @              @       @                  ?      @      )r#   r%      r!   r$   )r!   r"   r#      r$   )r$      r5   r5   r#   )r!   r3   r"   r      )r3   r#   r#   r!   r3   )r"   r$   r!   r   r!   )r$   r!   r   r"   r   )r!   r   r#   r   r#   )r   r"   r   r!   r   )r!   r   r#   r   r$   )y?        yK?        yˡE?        y㥛 ?        yMb?        y)\(?        yZd;O?        yl?        yy&1?        y~jt?        y{Gz?        )      ?                        r8   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r7   r8   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r7   r8   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r7   r8   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r7   r8   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r7   r8   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r7   r8   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r7   r8   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r8   r7   r8   r8   )r8   r8   r8   r8   r8   r8   r8   r8   r8   r7   r8   r   g      c                 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_shape_   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_casef   s   
 z'TestSolveLyapunov.check_continuous_caseNc                 C   s<   t |||d}ttt|||  | d|  d S )Nmethodr2   )r   r   r   rD   rE   rF   )r?   rG   rH   rL   rI   r   r   r   check_discrete_casek   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!   directrK   bilinear)casesrJ   rM   r?   caser   r   r   
test_casesp   s   
zTestSolveLyapunov.test_casesdtype_adtype_qc                 C   s   t jd}t jd|d}t jd|d}t||}|dd |}|dd |}t||}|jdks9J |j|jksAJ d S )Ni[r    dtyper3   r3   d   )r   randomdefault_rngzerosr   astypeshaperW   )r?   rT   rU   rngrG   rH   resrefr   r   r   test_size_0w   s   

zTestSolveLyapunov.test_size_0rC   )__name__
__module____qualname__r   emptyarrayr<   r   TrP   rB   rJ   rM   rS   pytestmarkparametrizedtypesrb   r   r   r   r   r      sf    
!#"?
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.npzr0   r!   r   r*   Nr$   r#               r9   r%   r5         @r   r!   r   r   )r   g=
ףp=g(\?gQ)r   g rhgףp=
gq=
ףp@)g rh?g/nRgGzgzGʿg
ףp=
?ggffffffgMbgQ?)g/$@7A`@jt?Zd;O?)rr   g/$@|?5^?y&1?)rs   ru   gx&1?&1?)rt   rv   rw   gsh|??r"   )gʡEg!rh?r   r   r   r   r   r   )NbX9?g7A`On?r   r   r   r   r   )r   rx   gSry   r   r   r   r   )r   r   rx   gS㥛g`"?r   r   r   )r   r   r   /$?g=
ףp=g rh?r   r   )r   r   r   r   rz   gK7gE?r   )r   r   r   r   r   rz   g^I+gtV?)r   r   r   r   r   r   rz   gJ+)gQ@rp   gB@p=
ף@gzG@g
ףp=
@r{   r1   )g
ףp=
gRQgffffffg(\g(\
g(\g{GzgGzMbP?)r0           r}   r}         ?r}   r}   皙?)r}   r0   r}   r}   r   r}   r}   r}   )r}   r}   r0   r}   r}   r~   r}   r}   )r}   r}   r}   r0   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   rY   i  i'      .Ag  ?i)g    ZA    >Ag       )r   g    `VA    >)r}   r   g    SA)r0   r   r   )r   r0   r   )r   r   r0   )r   r!   r   zBad Residual Accuracy)r   g?r   r   )r   r   gGz?r   )r   g    g    ag    A)r   r   r   g    .)r   r   r   r   )r!   r   r!   r   )ưr!   r   r   )r9   r   r   r   )r   r   r   r!   )r   r   r9   r   )r$   r!   )r$   r$   @   k)>   r   )      )   r(      r   r'   r5   Nr3   r6   r   r   Nr%   r   r   r   Nr(   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)ri   xfailmin_decimalr   rE   rh   r   r   
atleast_2dr   
zeros_like)r?   jrR   rG   brH   rknownfailuredecrI   r`   out_factr   r   r   test_solve_continuous_are=  s   
z0TestSolveContinuousAre.test_solve_continuous_are)rc   rd   re   r   mat6mat15mat18mat19mat20r   diagrg   r
   r<   rh   r;   rD   rot90r\   flipudrP   r   ri   rj   rk   	enumerater   r   r   r   r   rm      sn   
 





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


		"  -rm   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dfeg dug dvg dwgdx ed
dted
 dted
 dfeg dyg dzg d{g d|ged}gdgdgdggeg d~edg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< ded< ded< ejdee	dd Zdd ZdS )TestSolveDiscreteArer"   y      ?       r   y             r!   Nr9   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$   rn   ro   r%   r5   g ~:p?g2w-!?g5^I@gx&1gZd;O@g{Gzt?g{Gz?gUUUUUU?r6   gF]tE?)V-?gx&?r   r   )gx&r   r   r   )r   r   r   g/$?)r   r   g/$ÿr   gF%uk?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)r0   g333333?g?gG)3@)r}   r0   g?g {\f@)r}   r}   r}   ggR@)r0   r2   r2   r2   )r}   r0   r2   r2   )r}   r}   r0   r2   )r}   r}   r}   r0   )r"   r!   r#   r5   )r!   r"   r"   r3   )r#   r"   r5   r'   )r5   r3   r'      )g5^IW@gY8m?g&S?g&S:?g~jt?)g&1lD@gjtD@g/$0@g1w-!@ge`TR'?)gvo(@g~jtS:@gPnB@g\(/@gjt(@)gm{r@gK)@g/$5;@gx&q5@grh|D@)gNbX9?g?g      ?g\C@gRW@gJY8?gHPgH@g$(~g/$@g
ףp=
gec]@gffffffgx$(~?g/L
Fr3   r   )r!   r!   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r!   r9   r   )r   r   r   r9   r!   r   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   r6   gqq?)gG?r   r   r   )r!   r   r   r   rq   )r   r   r!   r   g:0yE>)r   r   r   r!   g      ?rY   )r(   r   r   r   r   r      r   r   r   r   r   r   r   r(   r"   r$   r5   r&   c                 C   s   g | ]	}d d|   qS )g      ?r&   r   ).0indr   r   r   
<listcomp>  s    zTestSolveDiscreteAre.<listcomp>g-Q=r'      g-C6*?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)
ri   r   max_tolr	   rE   rh   r   r   r   r   )r?   r   rR   rG   r   rH   r   r   r   rI   bH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#   r9   )r   r!   )r!   r!   r   )r   r   r!   r   )r4   r9   gffffffir   )
r   triur;   rg   rh   	full_liker   r=   r   r   )r?   r   r   r   r   r   r   r   test_infeasible8  s   z$TestSolveDiscreteAre.test_infeasible)rc   rd   re   r   rg   r<   kronr   r   rP   r   r   ri   rj   rk   r   r   r   r   r   r   r   r   L  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 ]\}}||||  qvd 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                 S   s   | \}}}}}}}|rt j|d t||||||}	| j|	|| j|	| | }
| j|	|| }|
|tt|| j8 }
t	|
t
|
|d dS )r   r   r   N)ri   r   r   rE   rh   rD   r   r   r   r   r   )rR   r   rG   r   rH   r   esr   rI   r`   r   r   r   r   _test_factoryd  s   0 z<test_solve_generalized_continuous_are.<locals>._test_factory)r   rg   r<   r\   r;   r   )rP   r   r   r   rR   r   r   r   %test_solve_generalized_continuous_areB  sP   





r   c                  C   s4  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 ]\}}||||  qd 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              
   S   s  | \}}}}}}}|rt j|d t||||||}	|du r&t|jd }|du r/t|}| j	|		|| j	|		| | }
|
| j	|		|| 	t
|| j	|		| | j	|		|| j 8 }
t|
t|
|d dS )r   r   Nr   r   )ri   r   r	   r   r<   r^   r   rE   rh   rD   r   r   )rR   r   rG   r   rH   r   r   r   r   rI   r`   r   r   r   r     s   
0z:test_solve_generalized_discrete_are.<locals>._test_factory)r   r   rg   r<   r\   r;   r   )mat20170120rP   max_atolr   r   rR   r   r   r   #test_solve_generalized_discrete_aret  sb   





(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 ]'}tt|| ddd tt|||| d tt|||||  tt||||||  qd S )Nr:   r#   r!   r   r;   r<   r   r	   r=   r>   r@   rA   rI   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 ];}tt||| dd tt|||||||  tt|||t d| tt||||t d tt|||||t d qd S )Nr:   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   arangereshaper<   r   r	   r=   r>   )nsymsymrI   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   mBr   r!   r#   )r   fullr<   r   r	   r=   r>   )singrA   rI   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 ];}tt|| ||| tt||| || tt|||| | tt|||||  tt||||||  tt|||||||  qd S )Nr   r"   )r   r   nanr<   r   r	   r=   r>   )nmrA   rI   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                   @   s  e Zd Zedededfedededfedede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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d0d1 Zd2d3 Zd4d5 Z	e
jd6ee
jd7ee
jd8ee
jd9dd*ge
jd:dd*gd;d< Zd=S )>TestSolveSylvesterr    r   )r   r"   )r"   r   r!   r"   r   r$   r3   r5   r4   r%   r&   r'   r(   )r0   r   r   r   )r   r0   r*   r}   )r   r   r1   r   )r   r   r"   r3   )r*   r   r   r0   )r   r0   r}   r}   )r   r   r0   r9   )r   r   r!   r!   )r   r0   r   r   )r   r   r0   r   )r   r   r   r0   r)   r*   r+   r,   r2   r   r1   rp   r-   r.   r/   r0   )r4   r!   r5   )r#   r3   r6   )r$   r%   r"   r#   )r4   r   y      @       @y      @      y              @y              @y      @      @c                 C   s.   t |||}tt||t|| | d S rC   )r   r   r   rD   r?   rG   r   crI   r   r   r   
check_case$  s   "zTestSolveSylvester.check_casec                 C   s*   | j D ]}| |d |d |d  qd S )Nr   r!   r"   )rP   r   rQ   r   r   r   rS   (  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 )Nr0   r}   r*   r9   r!   )r   rg   r   r   r   r   r   r   r   test_trivial,  s
    zTestSolveSylvester.test_trivialrT   dtype_brU   mnc                 C   s   ||  kr
dkrn nt d tjd}tj||f|d}tj||f|d}tj||f|d}	t|||	}
|dd |}|dd |}|dd |}	t|||	}|
j||fkseJ |
j	|j	ksmJ d S )	Nr   z6m = n != 0 is not a case that needs to be tested here.l   >& rV   rX   rY   )r5   r5   )r3   r5   )
ri   skipr   rZ   r[   r\   r   r]   r^   rW   )r?   r   r   rT   r   rU   r_   rG   r   rH   r`   ra   r   r   r   rb   6  s   
zTestSolveSylvester.test_size_0N)rc   rd   re   r   rf   rg   rP   r   rS   r   ri   rj   rk   rl   rb   r   r   r   r   r     s    


7
r   )"r   numpyr   numpy.testingr   r   ri   r   r=   scipy.linalgr   r   r   r   r	   r
   r   r   scipy.sparse._sputilsr   intfloatfloat32complex	complex64rl   r   r   rm   r   r   r   r   r   r   r   r   r   <module>   s*    j E w2G1