L iކ6ddlZddlZddlmZmZddlZddlmZddl m Z ddl m Z m Z ddl m Z mZddl mZmZmZddlmZeeej,eej0gZd ZGd d ZGd d ZGddZGddZdZdZ dZ!GddZ"y)N)assert_array_almost_equalassert_allclose)raises)solve_sylvester)solve_continuous_lyapunovsolve_discrete_lyapunov)solve_continuous_aresolve_discrete_are) block_diagsolve LinAlgError)matrixcHtjjtjjtjj t d|}t j|5}t|jcdddS#1swYyxYw)zo Load npz data file under data/ Returns a copy of the data, rather than keeping the npz file open. dataN) ospathjoinabspathdirname__file__nploaddictitems)namefilenamefs e/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_solvers.py _load_datarsg ww||BGGOOBGGOOH,EF"D*H  aAGGIs 5BB!ceZdZejdejdfej ddgddggej ddgdd ggfej d d gd d ggej ddgdd ggfej dd gdd ggej ddgdd ggfej d d gd d ggej d d gdd ggfej gdgdgdgdgdgej gdgdgdgdgdgfej gdgdgd gd!gd"gd#gd$gd%gd&gd'gd(g ej dfed)dgd*d+gged)dgjed)dgjjzfed)dgd*d+ggej ed)dgjed)dgjjzfg Z d,Z d-Z d4d/Z d0Z ejj!d1eejj!d2ed3Zy.)5TestSolveLyapunovrr ??@@@@@@?@)r%r'r#r&)r#r$r%r&)r&r7r7r%)r#r5r$r)r5r%r%r#r5)r$r&r#rr#)r&r#rr$r)r#rr%rr%)rr$rr#r)r#rr%rr&) 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:r9r:r:r:r:r:r:r:r:r:) r:r:r9r:r:r:r:r:r:r:r:) r:r:r:r9r:r:r:r:r:r:r:) r:r:r:r:r9r:r:r:r:r:r:) r:r:r:r:r:r9r:r:r:r:r:) r:r:r:r:r:r:r9r:r:r:r:) r:r:r:r:r:r:r:r9r:r:r:) r:r:r:r:r:r:r:r:r9r:r:) r:r:r:r:r:r:r:r:r:r9r:rgctjd}tjd}ttt ||ttt ||ttt |tjdy)Nr%r$r%r$)roneseye assert_raises ValueErrorr)selfnsqsqs r$test_continuous_squareness_and_shapez6TestSolveLyapunov.test_continuous_squareness_and_shape_sQggfo VVAYj";S"Ej";REj";RKct||}ttj||tj||j j z|yN)rrrdotconj transpose)rBaqxs rcheck_continuous_casez'TestSolveLyapunov.check_continuous_casefsE %a +!&&A,16683E3E3G)HH! MrFNct|||}ttjtj|||j j |z d|zy)Nmethodr4)rrrrIrJrK)rBrLrMrRrNs rcheck_discrete_casez%TestSolveLyapunov.check_discrete_caseksK #Aq 8!ffRVVAq\1668+=+=+?@1Dd1f NrFc|jD]f}|j|d|d|j|d|d|j|d|dd|j|d|ddhy)Nrr#directrQbilinear)casesrOrSrBcases r test_caseszTestSolveLyapunov.test_casespsJJ JD  & &tAwQ 8  $ $T!Wd1g 6  $ $T!Wd1gh $ G  $ $T!Wd1gj $ I  JrFdtype_adtype_qctjjd}tjd|}tjd|}t ||}|jddzj |}|jddzj |}t ||}|j dk(sJ|j|jk(sJy)Ni[ r"dtyper5r5d)rrandom default_rngzerosrastypeshaper_)rBr[r\rngrLrMresrefs r test_size_0zTestSolveLyapunov.test_size_0wsii##I. HHV7 + HHV7 +'1- ZZ  # + +G 4 ZZ  # + +G 4'1-yyF"""yyCII%%%rFrH)__name__ __module__ __qualname__remptyarrayr?rTrWrErOrSrZpytestmark parametrizedtypesrjrFrr!r!s &  &   Aq6Aq6" # Ar7RH% & ( FC=8S/2 3 FF#gs^4 5 7 C:Sz* + FF#gs^4 5 7 FC=8S/2 3 C:c{+ , . ?O_"O5 6 ?O_"O5 6 7 =  !B C! F !Q$$ % !Q.  VQF^--// / 2 !Q$$ % "((61a&>##faVn&6&6&8&88 9 gd?gd@gdAgdBgdBgdBgdBg e jde jd d fedCedDedEedFd fe jddgddGgge jdHgdgge jdIddJfe dKdLe jdMdNgd+dOgge jdPdQgdQdRgge jdIe dHdzd fe jddSgddgge jdgdgge jd dd fe jdTdgddTgge jd e jd e jd d fe jd dgd d gge jdgdgge jdUdVgdVdGggdd fe jgdWgdXgdYgd z e jd e jgdZgd[gd\gj!e jgd]j!e jgdZgd[gd\gdz e jd dSzd^fe jgd_gd`gdagdbge jgdcgje jgdddd fe jgdegdfgdggdhge jdie jdjdd fedCedDedEedFd fe jdkdkdle jdkdkdGzze j"e de j$dmdze jdkdkdlze jdke jdke jdkd fe je jdnde j&e jdode jdode jdodjzdd^fedCedDedEedFd fedCedDedEedFd^fedCedDedEedFd^fgZdpZej.j1dqeedrZy )sTestSolveContinuousArezcarex_6_data.npzzcarex_15_data.npzzcarex_18_data.npzzcarex_19_data.npzzcarex_20_data.npzr2r#rr,Nr&r% r;r'r7@rr#rr)rg= ףp=g(\?gQ)rg rhgףp= gq= ףp@)g rh?g/nRgGzgzGʿg ףp= ?ggffffffgMbgQ?)g/$@7A`@jt?Zd;O?)r|g/$@|?5^?y&1?)r}rgx&1?&1?)r~rrgsh|??r$)gʡEg!rh?rrrrrr)NbX9?g7A`On?rrrrr)rrgSrrrrr)rrrgS㥛g`"?rrr)rrr/$?g= ףp=g rh?rr)rrrrrgK7gE?r)rrrrrrg^I +gtV?)rrrrrrrgJ +)gQ@rzgB@p= ף@gzG@g ףp= @rr3)g ףp= gRQgffffffg(\g(\ g(\g{GzgGzMbP?)r2rr?rr皙?)rr2rrrrrr)rrr2rrrrr)rrrr2rrrr)rrrrrrrr)rrrrrrrr)rrrrrrrr)rrrrrrrr) g~jtg{Gz@rrg-rrrgףp= ?) g/$ֿgZd;O?rrgQrrrg ףp= ?) gA`ТgMb.@g-Frgrrrgq= ףp@) g7A`5g!rhA@gV-տg(\g1rrrg(\@) g +Ngy&1X@gT㥛Ġg(\?g/$Jrrrgffffff4@) rrrrW@ffffffbrgJ@r) rrrrrrrrr) rrrrr皙)@r皙?r) rrrrrrrg2@r){Gz?gI +gSÿ)g~jth?g/$r)g;On?gh|?5r)g~jt?g#~jĿr)g rh?g{Gzܿr)rrrABQRư>r$r$zBad residual accuracygg{Gzrrrraii'.Ag?i)gZA>Ag)rg`VA>)rrgSA)r2rr)rr2r)rrr2)rr#rzBad Residual Accuracy)rg?rr)rrgGz?r)rggagA)rrrg.)rrrr)r#rr#r)ưr#rr)r;rrr)rrrr#)rrr;r)r&r#)r&r&@k)>r))r* rr)r7Nr5r8rrNr'rrrNr*NNj, casec|\}}}}}|rtj||j|}t||||} | |z|j j | zz|z} | |z} | | t tj|| j j zz} t| tj| |y)z3Checks if 0 = XA + A'X - XB(R)^{-1} B'X + Q is truereasondecimalN) rqxfail min_decimalr rJrpr r atleast_2dr zeros_like) rBjrYrLbrMr knownfailuredecrNrhout_facts rtest_solve_continuous_arez0TestSolveContinuousAre.test_solve_continuous_are=s$( 1aL  LL -q! Aq! ,!eaffhjj1n$q(q5 x% a 0(--/2C2CDDD!#r}}S'93GrF)rkrlrmrmat6mat15mat18mat19mat20rdiagror r?rpr>rIrot90rdflipudrWrrqrrrs enumeraterrurFrrwrws* ( )D * +E * +E * +E * +E "q  A3*  B    Aq6D$<( ) A3+  Aq6Ar7# $   <*+13 4 Aq6D$<%4)D E ////1 2    488878846 7 DKM A  ;;;;;;;;= >  ) ,  = = B H H 9 2 5 > @ A *))))((((* +   + . cDItCy$s)T: Aq6As8$ % D6A3-   " D% E5>E5>2 3 C;u . / :dA. .   As8aV$ % A3+     Iq>B ?3 4      Ar7QF# $ A3*  C9r3i( )   ,2,. /12 3  >>>B C G G' )), BHHnnnE F*HJK L S  " >#3"$ % >" # % %     #$"#% &     sU3ZsU3Z> B" r2 4 4xrxxAxrxx11587 79?B!9L M      ! $ 6266"a= ! AA (  " sU3ZsU3Z> sU3ZsU3Z  " sU3ZsU3Z  "Cc EX>K [[Y %(89 H: HrFrwczeZdZejddgddggejdgdggejddgddggejdggdfejddgddggejdgd ggejddgddggejdggdfejd dgddggejddgdd ggejdd gd dggejddgd d ggdfejgdgdgdgejdgdgdggej d ej ddfejdd gddggejdgdggejddgddggejdggdfejddgddggejddgddggejddgddggejd dgdd ggdfejddgddggejdgdggejddgddggejdggdfejddgddggejddgddggejd!d!gd!d"ggd#zejdd gd dggdfejddgddggejdgdggejddgddggejdggdfejgd$gd%gd&gd'gejd(dgd)d*gd+d,gd-d)ggejgd.gd/gd0gd1gej ddfejgd2gd3gd4gd5gejd6d7gd8d9gd:d;gdzej ddfejgd?gd@gdAgdBgejgdCgdDgdEgdFgejgdGgdHgdIgdJgej ddfejgdKgdLgdMgdNgdOgd>zejdPdQgdRdSgdTdUgdVdWgdXdYggd>zej dZej ddfej ej dejddgd[ej ej dejdgdgdggejgd\gd\gd]gd^gd_gd]gejd dgddggdfd`ejgdagdbgdcgddgdegdfgdggdhgdig zejgdjgdkgdlgdmgdngdogdpgdqgdrg d`zejgdsej d dfejddtgddggejdgdggej dejdggdfejgdugdvgdwgdxzej d dtej d zdtej d zdfejgdygdzgd{gd|gejd}gdgdgdggejgd~ejdggdfej dd[ejej ddej dejdggdfgZ dZ e Dcgc] }dd| zz c}}Z de d<de d<de d<e jjdee dZdZycc}}w)TestSolveDiscreteArer$y?ryr#Nr;y?r%r+y?@)gX=XI?gPŽ?g'9ԭf?)gҍK?gh2?gNցZ?)gS?gs ,?g^L^?g=S?g>%S?gFB?r&rxryr'r7g~:p?g2w-!?g5^I @gx&1gZd;O @g{Gzt?g{Gz?gUUUUUU?r8gF]tE?)V-?gx&?rr)gx&rrr)rrrg/$?)rrg/$ÿrgF%uk?rgǺFg{Gz?g<,Ԛ}?gǺf)gQ?rrZd;Ͽ)rg+?= ףp=?r)rrg +?r)rrrgS㥛?)gPn?g/tg M?g[A+Q)gϷK?gH`?g$([gu?)gY9}g_":?g!'>տgCK?)g_L@geXgg +пg Tfn?g`[H?gQnHg v>g}k,gUW;g{/L gOaeRN?r)g333333gg g>Q)r2g333333?g?gG)3 @)rr2g?g{\f@)rrrggR@)r2r4r4r4)rr2r4r4)rrr2r4)rrrr2)r$r#r%r7)r#r$r$r5)r%r$r7r))r7r5r))g5^I W@gY8m?g&S?g&S:?g~jt?)g&1lD@gjtD@g/$0@g1w-!@ge`TR'?)gvo(@g~jtS:@gPnB@g\(/@gjt(@)gm{r@gK)@g/$5;@gx&q5@grh|D@)gNbX9?g?g?g\C @gRW@gJY8?gHPgH@g $(~g/$@g ףp= gec] @gffffffgx $(~?g/L Fr5r)r#r#rrrr)rrrrrr)rrrr#r;r)rrrr;r#rr) g0@g`@gGz.'@g]Fx ?g\(Bg#J{/L?rg+@g"@) g33333#S@g33333 @gq= ףp)@g"u?gGzDg#?rgQ@g"@) g_gXv@i1gHzG?g33333Yg/$?rg33333'@gQ2@) gvg33333σ@g ףp=R@g@gqgMbX9@rgQ?@g)\hH@) i@g@g`gScg{GQ@g;On@rgzG!U@gy_@) g33333Äg= ףp=\@g)\8VgEgGzU@g333333+@rg b@gffffffY@) g33333yig{GZKg+g(\P@g{G(@gz6?gGzX@g{GjQ@) g|fg33333r@gGz7g(\gQKN@g)\(6@rg̼j@gQA@) gug33333#@g{GFgmgffffffZ@g\(3@rg33333ck@gfffffj@)g ףp= @g cZB>gQT)gT㥛 ?gd;Ogףp= )gʡE?g= ףp=*gn!@)gA`"@gq= ףAg8@)gGz$@g0Wg33333P@)gZd;@gQNgQ+C@)g7A`@g ףp=jBg ףp=J4@)gK7?gGz/gsh|@)gv/@gHzG>gzGa-@) 2rrrrrrrrr)r()r(r)rrr8gqq?)gG?rrr)r#rrrr{)rrr#rg:0yE>)rrrr#?ra)r*rrrrrrrrrrrrr*r$r&r7r(g?r(g-Q=r)g-C6*?rrc|\}}}}}|rtj||j|}t||||} |j j } | |z| |z} } |j j | z| z |z} | |j j | zt || | zz| | zzz} t| tj| |y)5Checks if X = A'XA-(A'XB)(R+B'XB)^-1(B'XA)+Q) is trueratolN) rqrmax_tolr rJrpr rrr)rBrrYrLrrMrrrrNbHxaxbrhs rtest_solve_discrete_arez,TestSolveDiscreteAre.test_solve_discrete_are"s$( 1aL  LL -||A q!Q * VVXZZQABffhjj2o!A% qvvxzzB%BG R"82"=>> R]]3/d;rFcbtjtjd}d|d<tjgdgdgj}tj |dtj gdz}tj dd g}ttt||||y) Nr%r%r;)rr#)r#r#r)rrr#r)r6r;gffffffir) rtriur>rorp full_likerr@r r )rBrrrrs rtest_infeasiblez$TestSolveDiscreteAre.test_infeasible8s} GGBGGFO $$ HHi+ , . . LLB "''-"8 8 GGS#J k#7Aq!DrF)rkrlrmrror?kronrrrWrrrqrrrsrrr).0inds00rrrLs At9q#h' ( A3*  Aq6Aq6" # A3%   Aq6Ar7# $ C52$- Aq6Aq6" # A3%   Aq6Ar7# $ Aq6Aq6" # At9tQi( ) As8b!W% &   7668 9 J<* |< =     Aq6D$<( ) A3+  Aq6Aq6" # A3%   FA;F , - E5>GU#34 5 E1:4y) * C8aV$ %   Ar7QF# $ A3*  Aq6Aq6" # A3%   Aq6Ar7# $ Aq6Aq6" # B8b!W% &$ / Aq6Aq6" #   Aq6Aq6" # A3*  Aq6Aq6" # A3%   '''') * FF#F#F#F#% & '''(* +    ====? @ Iy)y)z*y)+ , 4    C??@B C *)(') * < !# $    <>@?< > ?BF  F FG$G$G$G$G$ & '*.  .     GBGGQFa0 1 HBHHqcA3_5 6 %%%&&% ' ( Aq6Aq6" #    F F D G G H J H H J K K .--./..-.0 149 9 . /  + . As8aV$ % A3*   A3%   < #& (  vrvvay vrvvay   '  ! E7QC!qc* +   D6(    q  6266#q> "  A3%  q} EN4K)45#sR#X~5GGBKGBKGBK [[Y %(89<:<*EE6s(^7rcTeZdZejj deegdZy)TestSolveCommonAresolverctjddgddgg}tjdgdgg}tjd}tjd}tjd}tjdgd gg}|||||| }|||||||} tjj || y) Ngrrggq= ףp?g?r$rg?)s)rror?rtestingr) rBrrrrrESrhris r(test_with_skipped_array_argument_gh23336z;TestSolveCommonAre.test_with_skipped_array_argument_gh23336Cs HHtTlQI. / HHtftf% & FF1I MM$  FF1I HHsecU^ $Q1a1%Q1aA& ""3,rFN) rkrlrmrqrrrsr r rrurFrrrBs- [[X(<>P'QR -S -rFrc tjgdgdgdgtjddgddgdd ggtjd tjd tjgd gd gdgtjddftjgdgdgdgtjddgddgdd ggtjd tjd tjgd gd gdgtjddfg}d}d}t |D]\}}||||y)Ng? ??g[,Y?g7h?g;)ƣ?g7j*0 ._test_factoryts)-&1aAq,  LL - Aq!Q 2ffhjjnnQUU1X&a)AAAE668::>>!$((+a/ x||E"--"2HMMO4E4EFGG!#r}}S'93GrF)rror?rdr>r)rWrrrrYs r%test_solve_generalized_continuous_arerRs^ ===? @ L,/ ,/ ,/1 2   ===? @ &    ===? @ L,/ ,/ ,/1 2   ===? @   ! E>K Hu%. TdK,-.rFc td}tjgdgdgdgtjddgddgd d ggtjd tjd tjgd gdgdgtjddftjgdgdgdgtjddgddgd d ggtjd tjd tjgd gdgdgtj ddf|d|d|d|dd|ddfg}d}d}t |D]\}}||||y)Nzgendare_20170120_data.npzrrrrrrrrrr%r$rrrr=rrrrr)p ~=rgxD\8._test_factorysQ)-&1aAq,  LL - q!Q1a 0 9qwwqz"A 9 a AffhjjnnQUU1X&a)AAAE  quuQx(1,11!AFFHJJNN155844668::>>!%%(3affhjj@  R]]3/d;rF)rrror?rdr>r) mat20170120rWmax_atolrrrYs r#test_solve_generalized_discrete_arers89K ===? @ L,/ ,/ ,/1 2   ===? @ &    ===? @ L,/ ,/ ,/1 2   ===? @    S  S  S  S  S   ?& EP+H<,u%+ TdHSM*+rFc"d}d}d}d}d}y)Nc tjd}tjd}ttfD]S}t t ||dddt t ||||dt t |||||t t ||||||Uy)Nr=r%r#rr>r?r r r@rArCrDrNs rtest_square_shapez1test_are_validate_args..test_square_shapes{ggfo VVAY&(:; >A *aaA 6 *aRa 8 *aRS 9 *aRR =  >rFc tjd}tjd}ttfD]}t t |||ddt t |||||||t t |||tjd|t t ||||tjdt t |||||tjdy)Nr=r&r#r%rrs rtest_compatible_sizesz5test_are_validate_args..test_compatible_sizessggfo VVAY&(:; DA *aS!Q 7 *aRRS A *aRB ? *aRRVVAY ? *aRR C  DrFc tjdjdd}tjd}tt fD]*}t t|||||t t|||||,y)Nr'r%)rarangereshaper?r r r@rA)nsymsymrNs r test_symmetryz-test_are_validate_args..test_symmetrysbyy|##Aq)ffQi&(:; >A *ac4 = *ac3 = >rFc tjdd}|dxxdzcc<tjd}ttfD]}t t ||||||t t t||||y)NrgmBrr#r%)rfullr?r r r@rA)singrDrNs rtest_singularityz0test_are_validate_args..test_singularitysjwwvt$ T a VVAY&(:; ?A *aRR > ? j"6BDIrFc tjdtj}tjd}tt fD]}}t t|||||t t|||||t t|||||t t|||||t t||||||t t|||||||y)Nrr$)rr nanr?r r r@rA)nmrDrNs rtest_finitenessz/test_are_validate_args..test_finitenesss WWVRVV $ VVAY&(:; AA *aRR 8 *aRR 8 *aRR 8 *aRR 8 *aRR < *aRRR @  ArFru)rrr rrs rtest_are_validate_argsrs>D>J ArFc:eZdZejdejdejdfejdejdejdfejdejdejdfej ddgddggej d d gdd ggej d d gddggfej gdgdgdgdgej gdgdgdgdgej gdgdgdgdgfej ddgddggej dd gd!d"ggej d#d$gd%dggfej d&dgd!dggej ddgd!d"ggej d#d$gd%dggfej ddgddggej ddgd!d"ggej d#d$gd%dggfej ddgddggej ddgd!d"ggej ddgddggfej gd'gd(gd)gej dd*gdd ggej ddgd*dgd d ggfej gd+gd(gd)gej dd*gdd,ggej dd gd*d-gd.d/ggfg Zd0Zd1Zd2Z e jjd3e e jjd4e e jjd5e e jjd6dd*ge jjd7dd*gd8Zy9):TestSolveSylvesterr"r)rr$)r$rr#r$rr&r5r7r6r'r(r)r*)r2rrr)rr2r,r)rrr3r)rrr$r5)r,rrr2)rr2rr)rrr2r;)rrr#r#)rr2rr)rrr2r)rrrr2r+r,r-r.r4rr3rzr/r0r1r2)r6r#r7)r%r5r8)r&r'r$r%)r6ry@@y@y@y@y@@ct|||}ttj||tj||z|yrH)rrrrIrBrLrcrNs r check_casezTestSolveSylvester.check_case4s3 Aq! $!"&&A,1"=qArFc^|jD]}|j|d|d|d y)Nrr#r$)rWrrXs rrZzTestSolveSylvester.test_cases8s1JJ 7D OODGT!Wd1g 6 7rFc2tjddgddgg}tjdgg}tjddgjdd}t|||}t |tjddgjddy)Nr2rr,r;r#)rrorrrrs r test_trivialzTestSolveSylvester.test_trivial<s HHsCj3*- . HHseW  HHc3Z ( (Q / Aq! $!!RXXsCj%9%A%A"a%HIrFr[dtype_br\mnc||cxk(rdk7rnntjdtjj d}tj ||f|}tj ||f|}tj ||f|} t ||| } |jddzj|}|jddzj|}|jddzj|} t ||| } | j||fk(sJ| j| jk(sJy) Nrz6m = n != 0 is not a case that needs to be tested here.l>&r^r`ra)r7r7)r5r7) rqskiprrbrcrdrrerfr_) rBrrr[rr\rgrLrrMrhris rrjzTestSolveSylvester.test_size_0Fs ;Q; KKP Qii##O4 HHaV7 + HHaV7 + HHaV7 +aA& ZZ  # + +G 4 ZZ  # + +G 4 ZZ  # + +G 4aA&yyQF"""yyCII%%%rFN)rkrlrmrrnrorWrrZrrqrrrsrtrjrurFrrrs &  &  &   "((6  &  &   "((6  &  &   Aq6Aq6" # Aq6Aq6" # Ar7RH% & ( >%"! " #%"! " >!!!# $ % 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{+ , . 9i3 4 Aq6Aq6" # Aq6Aq6Aq6* + - =)Y7 8 Aq6At9% & Ar7QGb$Z0 1 3e5 EnB7J [[Y/ [[Y/ [[Y/ [[S1a&) [[S1a&)&**000 &rFr)#rnumpyr numpy.testingrrrqrr@ scipy.linalgrrrr r r r r scipy.sparse._sputilsrintfloatfloat32complex complex64rtrr!rwrrrrrrrurFrr+s D *(KA77( ubjj'2<< 8g&g&TAHAHHsEsEl - - /.dD+N.Ab`&`&rF