L i|,ddlmZddlZddlZddlmZmZmZmZm Z m Z ddl Z ddl m Z ddlZddlmZmZmZmZmZmZmZmZddlmZmZmZddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)ddl*m+Z+dd l,m-Z-dd l.m/Z/m0Z0ddl1m2Z3 dd l4m5Z5 dd lm7Z8dd l,m9Z9ddl:m;Z;ejxejzgZ>ej~ejgZAe>eAzZBdxZCZDe5e5dddZCe5dddZDdZEdZFGddZGGddZHGddZIe jjdeBe jjdgddZLGdd ZMGd!d"ZNGd#d$ZOGd%d&ZPe jjdeBe jjd'gd(e jjd)d*d+ge jjd,d-d*ge jjd.d/d0gd1ZQd2ZRd3ZSd4ZTd5ZUGd6d7ZVGd8d9ZWd:ZXd;ZYd<ZZd=Z[d>Z\d?Z]d@Z^dAZ_dBZ`dCZadDZbdEZcdFZddGZeGdHdIZfdJZgdKZhdLZidMZje jjdNdOPdQZldRZme jjdSdTdUge jjde>e jjdVendWe jjdXendYe jjdZendYe jjd[dd\ge jjd]dd\gdhd^Zoe jjde>d_Zpe jjd`dVdaidXdaidZdaid[daidbdaid]daifdcZqe jjddejgdegdfgdggdhgdigdjgejgdkejgdlgdmgdngdogdpgdqgejgdrgdsgdtgdugfgdvZse jjdeBdwZte jjdxejgdyejgdzejgd{ejgd|ejgd}ejgd~ejgdejddgddgddgddgddggejddgddgd/dgddgdd\ggf ejgdejgdejgdejgdejgdejgdejgdejddgddgddgddgddggejddgddgddgddgddggf gdZue jjdeBe jjd'gde jjd.d/d0gdZve jjdeBe jjdgddZwe jjdexe>e>zeBdZye jjdexe>e>zeBdZze jjdexe>e>zeBdZ{e jjdejgdejgdejgdejgdejdWd0gdadYgddagddgddggejddgddgd\dgddWgd/dggfejgdejgdejgdejgdejddgddgddgddggejddgddgddgddggfgd˄Z|d̄Z}e jjdexeBe>e>ze jjdend/dτZ~e jjdexeBe>e>ze jjdend/dЄZe jjdexeBe>e>ze jjdend/dфZe jjdexeBe>e>ze jjdend/d҄Ze jjddejgdԢejgdբejgd֢ejgdעgdآgd٢gdڢgfgdۄZe jjdeBe jjdgdݢdބZd߄Ze jjdgde jjdddgdZe jjdddge jjdddgdZe jjdeBe jjdgddZe jjdeBdZe jjdeBe jjdddNge jjddd-gdZe jjdeBe jjddd\ge jjddd-gdZe jjdeBdze jjdddNge jjddd-gdZe jjdejgdyejgdzejgd{ejddgddgddgddgddggejddgddgd/dgddgdd\ggfejgdejgdejgdejddgddgddgddgddggejddgddgddgddgddggfgdZe jjdexeBe>e>ze jjdddfd-dfgdZe jjdexeBe>e>ze jjdddfd-dfgdZe jjdexeBe>e>ze jjdddfd-dfgdZe jjdejgdejgdejdWd0gdadYgddagddgddggejddgddgd\dgddWgd/dggfejgdejgdejddgddgddgddggejddgddgddgddggfgdZe jjdddNge jjdeBdZe jjdeBdZe jjdejgdgdgd gd gejgd gd gd gd gdd\fejgdgdgdgdgejgdgdgdgdgd\dYfgdZe jjdeBdZe jjdeBdZe jjdejgdgdgdgdgejgdgdgd gd!gejgd"gd#gd$gd%gejgd&d'd(fejgd)gd*gd+gd,gejgd-gd.gd/gd0gejgd1gd2gd3gd4gejgd&d5d6fgd7Ze jjdeBd8Ze jjd9ejgd:gd;gd<gd=gejgd>gd;gd<gd?gejgd@gdAgdBgdCgejgdDgdEgdFgdGgejgdHgdIgdFgdJgejgdKgdLgdMgdNgejgd>gdOgdPgdQgejgdRgdSgdTgdUgfge jjde>dVZe jjde>e jjdWdXe jjdYgdZd[Ze jjd\ddge jjdeBe jjdd]d^Ze jjd\ddge jjdeBe jjdd]d_Ze jjd'ed`e jjdagdbe jjd,d-d*ge jjdeBdcZe jjdeBe jjd'gdddZe jjd'ed`e jjdeBdeZe jjde>e jjdfd]dgZy#e6$rdZ5YwxYw#e6$rdZ8YwxYw(i)reduceN) assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros zeros_liketriutril tril_indices triu_indices)randrandintseed) _flapacklapackinvsvdcholeskysolveldlnorm block_diagqreighqz) _to_banded)_compute_lwork) ortho_group unitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc|tvr1|j||j|dzzj|S|j|j|S)N?)COMPLEX_DTYPESrastype)shapedtyperngs d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr52sZ % #((E"4'()/ 7 388U  " "5 ))cRtjtjdt tjj }hd}t }ttD]/}|jdr||vs||vs|j|1|gk(sJdy)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>npclapackflapackdivision HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list) r__doc__pytestskipsetsplitlistdir startswithappend)names ignore_listmissingr+s r4test_lapack_documentedrM:s ~~ ,- $$& 'E KfGF !$[)@E! NN4 ! b=NNN=r6c$eZdZdZdZdZdZy)TestFlapackSimplec gdgdgdg}gdgdgdgdg}dD]}tt|d zd}|||\}}}}} t| t| t ||t ||fd t |d d z ft |tjt |||d d \}}}}} t| t| y) N))) )rQrrga2U0*3?)rTrrgMb`?)rWrQrr)rrQrrsdzcgebalrrQ)permutescale) getattrr:rreprrrlenr8r ) selfaa1pfbalohipivscaleinfos r4 test_gebalzTestFlapackSimple.test_gebalSs  9 - *A7D1Ay)*1 &BB$ Hd4j ) %b! , "bAs1Q4y{#3 4 %hA @)*2q)B &BB$ Hd4j ) *r6cgdgdgdg}dD];}tt|dzd}|||\}}}t| t|=y)Nikiifii"iiidgehrd)r^r:rr_)rarbrdrehttaurjs r4 test_gehrdzTestFlapackSimple.test_gehrdhs\     *A7D1AyaDMBT Hd4j )  *r6c tjddgddgg}tjddgddgg}tjdd gd d gg}d }d D]u}|j||j||j|}}}td|f\} |j r|dxxdz cc<d}| |||\} } } t tj || tj | |z| |z| |||||\} } } t tj |jj| tj | |jjz| |zd| |||d\} } } t tj || tj | |z | |zdxy)NrQrRrrTrUrVrXrY TfdFD)trsylr.C)tranatranbdecimal)isgn) r8arrayr0r(isupperrdot conjugaterz) rarbbctransr2rcb1c1r|xr]rjs r4 test_trsylzTestFlapackSimple.test_trsylss HHq!fq!f% & HHq!fq!f% & HHq"gBx( ) =E%!((5/188E?BB%j2%8FE}}1 "2r2.NAud %bffRmbffQm&C&+bj 2#2r2U%HNAud %FF2<<>++Q/"&&BLLNtjtj tj|d}nA|dvr=tjtj tj|d}t|qzy)Nrmrnrpr{ Mm1OoIiFfEerrr.)langeFfEeFfrSrWMm1OoraxisIirQ) r8rr0rr(sqrtsumsquareabsrmaxr) rarbr2norm_strrcrvaluerrefs r4 test_langezTestFlapackSimple.test_langesD HH      -E) -XXe_==?tHNH)*re<h+v%}"#"#''"&&266":)>"?@C'sG<4' ffRVVBZ0!U* ffRVVBFF2JQ%?@!T) ffRVVBFF2JQ%?@ ,1 - -r6N)__name__ __module__ __qualname__rkrurrr6r4rOrOQs** *=8-r6rOceZdZdZdZy) TestLapackc&ttdryyN empty_module)hasattrr:ras r4 test_flapackzTestLapack.test_flapack 7N +  ,r6c&ttdryyr)rr9rs r4 test_clapackzTestLapack.test_clapackrr6N)rrrrrrr6r4rrs  r6rc$eZdZdZdZdZdZy)TestLeastSquaresSolversc tdttD]\}}d}d}d}t||j |}t|j |}t d|\}} t | |||} |||| \} } } t| dk\|||d || \} } } t| dk\tD]}tjd d gd dgddgg|}tjgd|}t d||f\} }}|j\}}t|jdk(r|jd}nd}t ||||} | ||| \}}} t|ddtjddg|dtj|jz||\}} } } t!||t"D]}tjdd gddgddgg|}tjgd|}t d||f\} }}|j\}}t|jdk(r|jd}nd}t ||||} | ||| \}}} t|ddtjdd g|dtj|jz||\}} } } t!||y)!NrwrQ)gels gels_lworkr2lworkrTTCCrr?@@@@ @0@g1@g4@)rrgeqrfrRr祪,-@rtol?@@?@@ @ffffff?ry1@@y4@R ?\j,?W?)r enumerateDTYPESrr0r(r#r REAL_DTYPESr8rr1r`rfinfoepsr r/)raindr2mnnrhsrcrglsglslwrr@rjrrrlqrr lqr_truths r4 test_gelsz!TestLeastSquaresSolvers.test_gelss T #F+ JCAADa""5)Ba&B)*@NJC#5!Q5ER51JAq$ DAI R6#;eDJAq$ DAI  ! /EC:::'.35B,E:B&63b"X'? #D*e88DAq288}!xx{#:q!T:EBe4LCD AcrFBHH.A.@.B38%:"$BHHUO$7$7!7 9"'r Iq!Q sI ./ /2$ /EHc?$h/$h/18=?B6eDB&63b"X'? #D*e88DAq288}!xx{#:q!T:EBe4LCD AcrFHH&J&J&L+028:288E?;N;N8N P"'r Iq!Q sI ./ /r6c tD]U}tjddgddgddgg|}tjgd|}td ||f\}}|j\}}t |jd k(r|jd }nd }||||d \} } } t tj| } | } |||| | d d d \}}}} t|dd tjddg|dtj|jzt|tjddg|dtj|jzXtD]b}tjddgddgddgg|}tjgd|}td ||f\}}|j\}}t |jd k(r|jd }nd }||||d \} }} } t tj| } t |}| } |||| || d d d \}}}} t|dd tjddg|dtj|jzt|tjddg|dtj|jzey)Nrrrrrrrr)gelsd gelsd_lworkrRrQrFrrrrYN))1)@*@.?rrrrrrrrU.*@_Y@ rr8rr(r1r`intrealrrrr/)rar2rcrrrrrrworkiworkrjr iwork_sizersrankrwork rwork_sizes r4 test_gelsdz"TestLeastSquaresSolvers.test_gelsds  9EC:::'.35B,E:B!12J35r("< E;88DAq288}!xx{!,Aq$ ; D% &EJ$RUJ%' 7 Aq$ AcrFBHH.A.@.B38%:"$BHHUO$7$7!7 9 Arxx);):)"?"ABQ ]+- .%Eu#%VnnfTrTlVAYU 9K-K,LMNnneDbDk401 6)4q&! A3$C LLQ Q1OPQsS   "%RVVBHHUO,,.CDEEBHHRZZ,@,D,D(D "**!5!9!99 ;r6N)rrrrDrr6r4r$r$s;r6r$c eZdZejj dedZejj deDcgc]}dD]}|dk(r|tvs||fc}}}}ejj dddgejj d d dgd Z ejj d gd gdgdgdZ dZ ejj dddgdZ ycc}}}}w) TestTbtrsr2cD|tvrdtjgdgdg|}tjddgddgdd gd d gg|}tjd d gddgddgddgg|}n~|tvrgtjgdgdgdg|}tjddgddgddgddgg|}tjddgd d!gd"d#gd$d%gg|}nt d&|d't d(|}|||d)*\}}t |d+t||d+d,-y.)/zTest real (f07vef) and complex (f07vsf) examples from NAG Examples available from: * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vef.html * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vsf.html )p= ףgQ@gHzG@g{Gz?)ggq= ףp@gHzGrrgp= ף0rHg(\+gףp= 0g333333*@g(\gHzG,gQ#rTrQrrSrRr )y ףp= Q@y{Gz@GzyQ?HzGy)\(??)yQ Q @yq= ףpGz@yףp= ?{Gzr)yQ?q= ףp @y)\(zGrryQ! ףp= yףp= 8Gzyp= #/)\h7y\(LHzG @yQHz6@yףp= 3@(\=y{Gz-333333yQ+3@GzT5@y@y?@y?yyt&m=#yi6@Ug$B@y[a^C?b->y-@ji&*!z Datatype z not understood.tbtrsLabruplorh㈵>rr0N)rr8rr/ ValueErrorr(rr)rar2rMrx_outrJrrjs r4test_nag_example_f07vef_f07vsfz(TestTbtrs.test_nag_example_f07vef_f07vsfs K 424 %'B65/!6* %.!5/+ % &A HHq!f!2h !f "g'$) *E n $KF:<!&'B=.9*N;)>:)>:< % &A HHr6l%w/46JK35JKM$) *E y/?@A A '%82-4T15qt4r6z dtype,trans)Nrzr}r}rNUrKr3rTc tjjd}d\}}}td|} |dk(} || z} || z } t | | dz d} | Dcgc]}|t |z }}|Dcgc]}t |f||}}|dk(rtj|||| <tj|| d }tj|dz|f|}t| D]4\}}|j|||t|d t||z|f<6t ||f||}| ||||| \}}t|d |d k(rt!||z|d y|dk(rt!|j"|z|d y|dk(r*t!|j"j%|z|d yt'dcc}wcc}w)Ni)rTrSrRrJrrUrQrdia)formatr)rMrrNrr3rTg-C6 ?rrzr}zInvalid trans argument)r8r RandomStater(r6rr5r spsdiagsr rdiagonalrminrrrzrrQ)rar2rrNr3r3rrkdrJis_upperkukl band_offsetsr band_widthswidthbandsrbrMrowkrrjs r4test_random_matriceszTestTbtrs.test_random_matrices5sii##D)  4 6CK (] "WR"q"- +78aq3q6z8 8)+-eXucB++ 3;/E"I IIe\% 8XXrAvqk5 ) - ;FC-.ZZ]BsC1Ic!A#qk)) * ; (D 5# >2UF4T1 C< AE14 0 c\ ACC!GQT 2 c\ ACCMMOa/ >56 699+s F:2F?zuplo,trans,diag)rUrTInvalid)rUrirT)rirTrTc tdtj}tdd}tdd}t t ||||||y)z?Test if invalid values of uplo, trans and diag raise exceptionsrJrrTrRN)r(r8r9rrr)rarNrr3rJrMrs r4&test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptionis>! ; !QZ AJiAtUDAr6ctjdt}tjdt}tdt}d|d<|||d\}}t |dy ) aHTest if a matrix with a zero diagonal element is singular If the i-th diagonal of A is zero, ?tbtrs should return `i` in `info` indicating the provided matrix is singular. Note that ?tbtrs requires the matrix A to be stored in banded form. In this form the diagonal corresponds to the last row.rrrTrJr)rrSrUrLN)r8r floatr(r)rarMrrJr@rjs r4test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonalvsUWWV5 ) GGAU # 65 2-4T1r6zldab,n,ldb,nrhs)rUrUrrU)rUrUrSrUctj||ft}tj||ft}tdt}t t |||y)z2Test ?tbtrs fails correctly if shapes are invalid.rrJNr8r rmr(rr)raldabrldbrrMrrJs r4test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapessF WWdAYe , GGS$Ku - 6iA.r6N) rrrrBmark parametrizerrSrrhrkrnrs).0r2rrs0000r4rFrFs@ [[Wf-+5.+5Z [[]+1NN"'N6;&+slu 7K %enNnNO [[Vc3Z0 [[Vc3Z0,711 O ,7\ [[.33356B 6B  [[.**1/ /iNsDrFr)I1OrNrUrKr3rTrrSrwc tj|||||tjjtjdd}|j||f|j||fdzz}|j tj d|jdd|}||z }tj|tjr |jn|}|dk(rtj|ntj|}|dk(r-|tj|ddtjfz}|j|}t!d|f}|||||\} } |d k(rtj"j%|tj& } tj"j%tj"j)|tj& } d | | zz } nKtj"j%|d }t!d |f\}}||\}}}|||| \} } d }t+| | |y)Nrla$rr.rwrUtrcon)rrNr3rwordrQgecongetrfrr)rrr8 default_rngrpermutedlogspaceintegers issubdtypefloatingrrrr3r4r0r(linalgrinfrr)r2rrNr3rr3Aoffsetr{rCr@norm_A norm_inv_Aranormrrluipvtrjrs r4 test_trconrs KK5'$vdVA3/0 ))  q- @ AC A #**1a&*"9""<B DAq!Q!,|011a|/=CG IAq!QQQ7%1a|44 AAq!QQQ!<%1a|44 AAq!QQQ!<%1a|44 AAq!QQQQQ!L%1a|44 AAq!QRbA>%1a|44 A1aA1!<1QQ q#==1a4)g   MM!ABE( #!!"3==?Aab!eHbhhqwwqz6JK!"a%3!QR%"((1771:*>SI!QR%!Q$5!Q$596r6cztdtjd}d}t|||dd}|dk(s|dk(sJyy) N gesdd_lwork preferredr2ilp64iA%T)r)r(i`DiD)r(r8float32r#) sgesdd_lworkrrs r4 test_sgesdd_lwork_bug_workaroundr&sQ $M*57L A <A&*$ @E I )!33 3!3 r6ceZdZejj dedZejj deejj dddZy) TestSytrdr2cntjd|}td|f}tt||y)Nrrsytrdr8r r(rrQ)rar2rrs r4test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_arrayCs. HHV5 ) 1$/j%+r6rrQrSctj||f|}td|f\}}tjd||dzzdzdz||tj|<||\}}t |d||d|\}} } } }t |dt ||dtj|jzd t | tj|t | d t | d ||| \}} } } }t |dtj||} tj|jd} | | | | f<tj|jddz }| | |dz|f<| | ||dzf<tj|||}t|dz D]x}tj||}|d||dzf|d|d||<tj|||| |tj||zz }tj||}ztj |d }|j"|||<tj|j"tj||}t || dtj|jzd y) Nr)r sytrd_lworkrQrRrrrrUrr/rr)r8r r(arangetriu_indices_fromrrrrr3rr1r r6outerrrrz)rar2rrrrrrjdatarqertrzrgk2QrBrHi_lowerQTAQs r4 test_sytrdzTestSytrd.test_sytrdJs| HHaV5 ) 5t < { IIaAaC!AU 3 "  q !""!n tT1!&aq >aCT1aa(;(;&;#F2771:&3S!!&au 5aCT1 MM!5 ) IIaggaj !!Q$ YYqwwqz!| $"Q$( "bd(  FF1au %qs A%(A!QqSMAbqEAaDq!5)CFRXXa^,CCAq! A  //!R(SS\' vvacc266!Q<( aa(;(;&;#Fr6N) rrrrBrtrurrrrr6r4rrBse [[Wk2,3,  [[Wk2 [[S&)7G*37Gr6rceZdZejj dedZejj dee eejj dddZ y) TestHetrd complex_dtypecntjd|}td|f}tt||y)Nrrhetrdr)rarrrs r4test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrays. HHV= 1 1$/j%+r6zreal_dtype,complex_dtyperrc "tj||f|}td|f\}}tjd||dzzdzdz|dtjd||dzzdzdz|zz|tj|<tj |tj tj|dD]}|||\}} t| dt||} ||d| \} } } }} t| dt| |d tj|jzd t| tj tj|t| d t|d ||| \} } } }} t| dtj||}tj|jdt}| |||f<tj|jddz t}| ||dz|f<| |||dzf<tj |||}t#|dz D]}tj||}| d||dzf|d|d ||<tj |||||tj$|tj&|zz }tj(||}tj*|d}tj&|j,|||<tj(tj&|j,tj(||}t||dtj|jzd y)Nr)r hetrd_lworkrQrRr.rrQrrrrUrr/rrrrw)r8r r(rr fill_diagonalrr3rr#rrrrr1rr r6rrrrrz)rar real_dtyperrrrrr@rjrrrqrrtrzrgrrrBrrrQHAQs r4 test_hetrdzTestHetrd.test_hetrds HHaV= 1 5t < { IIaAaC!AZ 8299Q1Q3 1 J?? @ "  q !" BGGBGGAJ/0 "A!!1-GAt q ! " {A.!&aq >aCT1aa(<(@(@&@sK2772771:./3S!!&au 5aCT1 MM!: . IIaggaj ,!Q$ YYqwwqz!|3 /"Q$( "bd(  FF1a} -qs A-0A!QqSMAbqEAaDq!=1a&288Arwwqz223Aq! A  //!R(WWQSS\*' vvbggacclBFF1aL1  !"RXXj1555C r6N) rrrrBrtrur/rziprrrr6r4rrsp [[_n=,>,  [[7 n=? [[S&)A*?Ar6rc ttD]W\}}td|\}}t|ddd}|dkr\t j gdgdgd gd gd gd g|}t j gd |}t j ddg|}n_t j gdgdgdgdgdgdg}t j dgdgdgdgdgdgg}t j d|}t j gdgdg|}||||||\} } } } } |dkrt j gd} nt j gd} t| | d Zy)!N)gglse gglse_lworkrrVrTrR)rrrd)g= ףp=g{Gzg(\ؿ?)zGgHzG?gףp= ӿQ)ffffff@gQ?g?gffffffֿ)rg{Gz?Qg{Gz?)333333?g333333?rg ףp= )g{Gz{Gz?gzG?)grgGz?gHzGgzGg= ףp=?r)yQ?QyQQ?yQ{Gz@y= ףp=?)y\(\○Gz?y333333RQ?yQzG?yQQ?)yףp= ?q= ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\ ףp= ׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq= ףpݿyQ?q= ףp?)yHzG?Qѿy?QyQ뱿Gz?yp= ף?p= ף?yRQ ףp= ?yffffff?GzyzGGzyQ?ffffff @yp= ף)\(@y(\@Q?)rrr)rrrrr)^"L?\}?rr)y!f?$_Kdy^gŵ翸F @y!f?}dy61ŵe_ @r)rrr(r#r8rr r) rr2func func_lworkrrbrrqrr@resultrs r4 test_gglsersx',? U+,D279jzQ!q9 7553434 6 >C DA AOA"b/AMNKKKK MNA ;-%,&-%,&-%, ()A %(A HH'):;5 I!!Q1E:1a 7xx!-.H xx!:;H "&(A>Y,?r6c tdtttzD]>\}}d}|dkr9t d|}t d|\}}t ||j |}nHt d|}t d|\}}t ||t ||d zzj |}||jjzd z d tj||zz}t|d }t||}|||d \} } } || | |d \} } ttd | z tjj!|d z | zd kAy)NrrwrT sytrf_lworkr)syconsytrf hetrf_lwork)heconhetrfr.rRrQrr)rbipivrrrd)rrrr/r(rr0rrzr8r rr#rrrcond) rr2rrfunconfunctrfrrrldurr@rconds r4test_sycon_heconr sJJ~ 56A U  7)-uEJ./AOOFGa##E*A*-uEJ./AOOFGad1ajm+33E:A^Q 266!5#9!9 9Q z1-qQ7 T1Cd%qAqAeGbiinnQ!n445e;a?@-Ar6cJtdttD]\}}d}td|\}}}}t ||j |}||j zdz }t ||j |}||j zdz dtj||zz}|||\} } } t| dk(||\} } t| dk(||| \} } t| dk(|| \}} } t| dk(t|| dy) Nrrw)rsygstsyevdsygvdrrRrgiUMu?r) rrrr(rr0rzr8r rr)rr2rrr r r rBeig_gvdr@rjrrbeigs r4 test_sygstr!s%J ,3 U %57I(@(@/2Qw!|! D? Dr6c <tjjd}d\}}}ttD]_\}}t d|\}}t |||}|dkr\t|j||j|} |j||j|} t d|\} } nt|j|||j||dzzj|} |j||t||dzzj|} t d|\} } t | ||} || | \}}}tjtj|||d d |d ff}tj||}t|Dcgc]D}|||||gd d fjj||gd d fjzz F}}t!tj|}|dkrd nd }d tj"|dj$z}| ||| | \}}t'|dk(t)||j| z t+| |d| ||| || \}}t'|dk(t)||jjj| z t+| |d| ||| d| \}}t'|dk(t)|| j|z t+| |d| ||| d|| \}}t'|dk(t)|| j|jjz t+| |dby cc}w)a This test performs a matrix multiplication with an arbitrary m x n matrix C and a unitary matrix Q without explicitly forming the array. The array data is encoded in the rectangular part of A which is obtained from ?TZRZF. Q size is inferred by m, n, side keywords. r)rwrrrrrR)ormrz ormrz_lworkr.)unmrz unmrz_lworkrNrzr}rwrrrr/rr)rr)rrr)r8rrYrrr(r#rrr0r1r r6rzrrrrrrrr)r3qmqncnrr2rrlwork_rzrr}orun_mrz orun_mrz_lw lwork_mrzr rtrjr!r"rrrrtolcqs r4test_ormrz_unmrzr<s6 ))   %CJBB'.! U*+C168x!(B3 7SXXb"%,,U34AR ''.A$45M;@%B !Hkchhr2&"b)9")<<DDUKLA"b!DRLO3;;EBA$45M;@%B !Hk#;B7 ax0 C IIrvvb.1bc6 ; < VVBe $DI"INqr#a&A36A36)9:::NN 2663 QwCE#JOO,,BQi8D QUU1X z!}3RHBQe9ED QVVXZZ^^A.. 1 C !BQS BD QUU1X z!}3RHBQSYOD QUU1668::.. 1 C ![.!,Os/A Nc tjjd}ttD]G\}}d}|dkDr:|j |||j ||dzzj |}d}n#|j ||j |}d}td|\}}||\}} t| d k(||d \} } t| d k(|||d \} } t| d k(|||d \} } t| d k(t|dz|dzf|} t|dd|dzdf| ddddf<| |dzdzdddfxxt|d|dzd|dzfjjz cc<t|dz|dzf|}t|ddd|dzf|ddddf<|d|dzddfxxt||dzd|dzdfjjz cc<t|| jddt| | jjjddt| |jddt| |jjjdd|||\}} t| d k(||| d \}} t| d k(||| |d \}} t| d k(||| |d \}} t| d k(t|t|t|t|t|t|t|t|Jy)z Test conversion routines between the Rectangular Full Packed (RFP) format and Standard Triangular Array (TR) rrrQr.r}rz)r&r'rrrKrNrU)transrrNrRNrF)order)r8rrYrrrr0r(rr rrrzrrreshape)r3rr2rA_fullr@r&r'A_tf_UrjA_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Ts r4test_tfttr_trttfrOsX ))   %C'1: U  7hhq!nsxx1~b'88@@GFFhhq!n,,U3FF'(:%H uV}  V#.  vf3?$ vf3?$ !A#q!tE2<1a451"aAa!V UadUEQTE\ : ? ? A C CC!A#q!tE2v,q%1a4%x0Q!Q$d6l1a45!Q$%<8==?AAA!&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J L "&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J LQ'  QS1  q(6D$ q(6D$ !&$v,7!(DL9!&$v,7!(DL9c1:r6ctjjd}ttD]\}}d}|dkDr8|j |||j ||dzzj |}n!|j ||j |}td|\}}||\}}t|dk(||d \} }t|dk(t|} t||dzzd z|} t|j| | d d t|} t||dzzd z|} t|j| | d d t|| t| | |||\} }t|dk(||| d \}}t|dk(t| t|t|t|y ) r>rrrQr.)trttptpttrrrrKr?rRN)r8rrYrrrr0r(rrr rrzrrr)r3rr2rrDrQrRA_tp_UrjA_tp_LindsA_tp_U_mA_tp_L_mrKrLs r4test_tpttr_trttprXs ))   %C' 8 U  7hhq!nsxx1~b'88@@GFhhq!n,,U3F'(:%H uV}  V#.  AAaC!51F|~~t, AAaC!51F|~~t, !&(3!&(3Q'  QS1  !&$v,7!&$v,7A 8r6cztjjd}ttD] \}}d}|dkDrd|j |||j ||dzzj |}||jjz|t|zz}n?|j ||j |}||jz|t|zz}td|\}}}||\}} |||\} } t| dk(||| \} } t|} t| |  y) zk Test Cholesky factorization of a positive definite Rectangular Full Packed (RFP) format array rrrQr.)pftrfr&r'rrN)r8rrYrrrr0rrzr r(rrr)r3rr2rrrZr&r'r*rj Achol_rfpA_chol_rr@Achols r4 test_pftrfr^Gs" ))   %C'3 U  7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A./J5:<ue!H T3- 4 Ay) ! !(E2%3r6ctjjd}ttD]+\}}d}|dkDrd|j |||j ||dzzj |}||jjz|t|zz}n?|j ||j |}||jz|t|zz}td|\}}}}||\} } ||| \} } ||| \} } t| dk(||| \} }t|}t| t||dzdk(rd nd .y ) z Test Cholesky factorization of a positive definite Rectangular Full Packed (RFP) format array to find its inverse rrrQr.)pftrirZr&r'rrrRrTrVrN)r8rrYrrrr0rrzr r(rrrr)r3rr2rrr`rZr&r'r*rj A_chol_rfp A_inv_rfpA_inv_rr@Ainvs r4 test_pftrirebsT ))   %C'D U  7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A%57@=B &C"ueU!H T C= D:. 4 1i( 1v!'4:/2Qw!|! D-Dr6cVtjjd}ttD]w\}}d}|dkDrd|j |||j ||dzzj |}||jjz|t|zz}n?|j ||j |}||jz|t|zz}t|df|}t|dzdf|}t|dz df|}td|\}} } } | |\} } | || \}} ||||\}} t| d k(tt||||||||\}} t| d k(tt!||||dzd k(rd nd zy )z Test Cholesky factorization of a positive definite Rectangular Full Packed (RFP) format array and solve a linear system rrrQr.rSrrR)pftrsrZr&r'rrTrVrN)r8rrYrrrr0rrzr r r(rrrrr)r3rr2rrrBf1Bf2rgrZr&r'r*rjrar+s r4 test_pftrsrjs ))   %C'D U  7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A !Qu %AaC85)AaC85)%57@=B &C"ueU!H T C= D1j#. d i:s;1j!, d !%1+t/2Qw!|! D7Dr6c 0tjjd}ttD]d\}}d}|dkDrd|j |||j ||dzzj |}||jjz|t|zz}n?|j ||j |}||jz|t|zz}|dkrdnd}tdd |d f| \}}}||\} } |j |dj |} ||dd | d| } ||| \} } t| t| j| jj d|zz|dzd k(rdndgy)zT Test for performing a symmetric rank-k operation for matrix in RFP format. rrrQr.rRrhr&r'frkrrrrTrVrN)r8rrYrrrr0rrzr r(rrr)r3rr2rrprefixr&r'shfrkr*r@r}Afp_outA_outs r4test_sfrk_hfrkrrs} ))   %C'D U  7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("AQwC.VHC./Q5:<ueqQ HHQN ! !% (1b!Q,G$q!%quuQVVXZZ/@.@1Q3.F)G/2Qw!|! D#Dr6c tjjd}ttD]\}}d}|dkDr[|j dd||f|j dd||fdzzj |}||jjz}nB|j dd||fj |}||jz|t|zz}dtj|djz}td | \}}}t||d } t|dd \} } } t||d } ||d| \} }}|| |d \}}}tt!|dt!| | ddfd|dt|dd \}} } ||d \} }}|| |d \}}}tt#|dt#|| ddfd|dy)zt Test for going back and forth between the returned format of he/sytrf to L and D factors/permutations. rrwrQir.r.r)syconvrrrrF)r hermitianrrNrr/r)r8rrYrrrr0rrzr rrr(r#rrrr)r3rr2rrr:rutrf trf_lworklwrKDpermrrrjrbrrUs r4 test_syconvr|s ))   %C'L U  7S"q!f-S"q!f-b0128&- AFFHJJA CaV,33E:AACC!CF("A"**U3Z__--!13BIN"PY Iq 2!u5 1d Iq 2aq3T4CQ/ 1dQ d1T1W:r&:2N!u5 1daq/T4CQ/ 1dQ D47Q$7cK5Lr6ceZdZdZdZdZy) TestBlockedQRzd Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt and tpmqr. c tjjd}ttD]\}}d}|dkDr8|j |||j ||dzzj |}n!|j ||j |}dtj|djz}td|\}}|||\} } } | d k(sJtj| d tj||z} tj||| | z| jjzz } tj| }t| jj| ztj|||d t| |z||d |dkDr:|j |||j ||dzzj |}d }n#|j ||j |}d}dD]}d|fD]}|| | |||\}} | d k(sJ||k(r| jj}n| }|dk(r||z}n||z}t|||d ||fdk(sc|| | |\}} | d k(sJt!||t#t$|| | |dt#t$|| | |dy)NrrrQr.r.r)geqrtgemqrtrrrrr/r}rzrKrrTrrrKrKrTrrr))r8rrYrrrr0rrr(rr rzrrrrrr)rar3rr2rrr:rrrbtrjrrrr} transposerrrqqC c_defaults r4test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrtsii##D)#F+: AJCAQwXXa^chhq!nR&77??FXXa^++E2bjjs11C,-@NME6q!JAq$19 92!77Aq&Q);;A A ACCHHJNBFF1E,B!# % AE13R 8QwXXa^chhq!nR&77??F XXa^++E2 " 3!9-3E$Q14uEGAt19$9 )CCHHJs{UU#Ar"=e} 2*0Aq/ 4#qy(y$Y2)3 30 )VQ13 ? )VQ1C @u: Ar6c  tjjd}ttD]\}}d}|dkDro|j |||j ||dzzj |}|j |||j ||dzzj |}nB|j ||j |}|j ||j |}dtj|djz}td|\}} d |d z|fD]} || |||\} } } }|d k(sJttj| d tj|d ttj| | |z dz tj|| |z dz tj|| |z tj| | |z }}tjtj|||f}tjd |z||| z|jj!zz }tjtj| tj"| f}t%|jj!|ztjd |z||d t%||ztjtj||f|d |dkDrq|j |||j ||dzzj |}|j |||j ||dzzj |}d}nD|j ||j |}|j ||j |}d}dD]}d|fD]}| | | | ||||\}}}|d k(sJ||k(r|jj!}n|}|dk(r8tj||fd }tj||fd }||z}n7tj||fd}tj||fd}||z}t%|||d ||fdk(s| | | | ||\}} }|d k(sJt||t| |t't(| | | | ||dt't(| | | | ||dy)NrrrQr.r.r)tpqrttpmqrtrrrRrrr/r}rzrrTrrKrrrrr))r8rrYrrrr0rrr(rrrr5r rzrrrrr)!rar3rr2rrrr:rrlrbrrrjB_pentb_pentrrrr}rzrrrrrqrcdCDqCDr d_defaults! r4test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt(s{ii##D)#F+O KJCAQwXXa^chhq!nR&77??FXXa^chhq!nR&77??FXXa^++E2XXa^++E2bjjs11C,-@NME6a^@ K %aAq 1 1aqy yRWWQ^RWWQ^<RWWQA 2BGGAq1uqy4IJ"$AE!2BGGAq1u4ENNBFF1E$:F#CDFF1q5.Q1CCNNBGGAJ a0@#AB  Qq1uE0J%(r3Ar~~rwwqz66J'K%(r37!Q#((1a.*;;CCEJA!Q#((1a.*;;CCEJA #I!Q//6A!Q//6A #I&7D"%y!17%+Aq!Q27&9 1d#qy(y I- ! A !A3;!#AQ!?B!#AQ!?B"#b&C!#AQ!?B!#AQ!?B"$q&C'CcC %=J69?1aA9N6Iy$#'19,9(A6(A6377:iAq!QSIiAq!QcJA@ KO Kr6N)rrrrArrrr6r4r~r~s <A|QKr6r~c:tjjd}ttD]i\}}d}d}t d|}|dkDrj|j |||z j|d|j |||z j|zz}||jjz}n3|j |||z j|}||jz}||\}}} } t|} d| | |z d| |z df<t| dd tjtjjz} d tjtjjz} |d vr| n| }t!||dz dd|dz f| jj| zd| ||d \}}} } t#|}d|| |z d| |z df<t| dd tjtjjz} d tjtjjz} |d vr| n| }t!||dz dd|dz f||jjzd| ly) NrrwrRpstrfrrQr.rrrRrPrr8rrYrrr(rr0rrzrrrrrr9rr)r3rr2rrrrrpivr_crjrU single_atol double_atolr0rKs r4 test_pstrfr|G ))   %C'#P U   6 7AaC ''.chhq!A#6F6M6Me6T1TTAAFFHJJAAaC ''.AACCA!!H3T G "#'(C!GH T1RXXbjj1555 RXXbjj1555 !Vm{#a%CE*AFFHJJN$O!!1-3T G "#'(C!GH T1RXXbjj1555 RXXbjj1555 !Vm{#a%CE*A N$OG#Pr6c:tjjd}ttD]i\}}d}d}t d|}|dkDrj|j |||z j|d|j |||z j|zz}||jjz}n3|j |||z j|}||jz}||\}}} } t|} d| | |z d| |z df<t| dd tjtjjz} d tjtjjz} |d vr| n| }t!||dz dd|dz f| jj| zd| ||d \}}} } t#|}d|| |z d| |z df<t| dd tjtjjz} d tjtjjz} |d vr| n| }t!||dz dd|dz f||jjzd| ly) NrrwrRpstf2rrQr.rrrrPrr)r3rr2rrrrrrrrjrUrrr0rKs r4 test_pstf2rrr6ctjgdgdgdgdg}tjgdgdgdg}ttD] \}}|dkr3tjgd gd gd gd g}|j |}nUtjgd gdgdg|}|tjgdgdgdgdzz }|j |}t d|}||\}}}} } } |dkr,t |j ||dddf|z|zddt |j ||dddf|z|zddy)N)g?rg1w-!?gd`TRۿ)rgsrr)gs?rg2%䃮g,eX)rgsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yhoſFxrR)gЈBgtBgffffff@gٓ)@gg#fDgffffff)gHzG?gQg'Vgp= ף)g(\rgS7нr)gq= ףpgAg(\)g333333gBg333333ÿ)gZ9=gQgֽr)gffffff@gtޅBr')g(\g Zgq= ףp?)gEop=gQ?gZEqҽr.geequrrrP)r8rrrr0r(r) desired_real desired_cplxrr2rrrrrowcndcolcndamaxrjs r4 test_geeqursy88>@@@BCL 88111 23L '/ U 7CEEEGHAA:::>!,AudDqBGGAJS ! rd 2bT!V ;< 266"))B*++b01AAdGAdG!>>!((2<<*@JAudDqBGGAJ IJr6ctjjd}d}|j|}|j||j|dzz}t t D]\}}|dkr:|j||}|j |}||z}|j |}nO|j|||j||dzz}|j |}||z}|j |}td|}td|} ||d \} } } } | | || | d \}}|dkr!t|j |||z d t|j |||z d y) Nrrwr.rRgetc2rgesc2rr*) overwrite_rhsrTr) r8rrYrrrr0r(r)r3rrrrr2rrrrrrjpivrjrr]s r4test_getc2_gesc2rsg ))   #C A88A;L88A;!R/L': U 7AAAL AAA!Q!22AAL AA 6 6$QA6D$Qd!<5 7 %l&9&9%&@&'gq : &l&9&9%&@&'gq :+:r6r)rVrUrjobarVjoburTjobvjobrrQjobpc tjjd}|\} } dtj|jz} t |||} t d|} |dk}|dk}|dk(xr| | k(}tj| }|dk(xr| xr| }|dk(xr |xr| xr|}|dk(xr |xr| xr|}|rd}n |s|rd}nd }|dkDr|dk(rtt| | |||||| y | | |||||| \}}}}}}t|||sW|d |dz |d | z}t|t| d | |dk(r |d d d | f}|rA|r?t|tj|z|jjz| | |rM:MU-=v(>M:  /   qtqyi4tT4N',Q262626262626 (8$Q4 T;'!WtAw&#bq'1E E3qU#;$ Gqya!eHBGGEN 2QVVXZZ ?N Q ATJ Q ATJ q299#8#8#; < q2#3#3E#: ; q1 %5r6c td|}|d\}}}}}}t|dt|jdt|jdt|tjdg|tj d|}||\}}}}}}t|dt|jdt|jdt|tjdg|tj d|}||\}}}}}}t|dt|jdt|jdt|tjg|tj tjdjd d j|}tj||jz}|jd } ||} t|| y ) z*Test edge arguments return expected statusrrrrrQrQ)rQrr.rwrN)r(rr1r8rr sinrrCr0asfortranarrayrzrr) r2rrrrrrrjrAcr@s r4test_gejsv_edge_argumentsrs WE 2E$)9 CAtUDq&!&!bhht512 E"A#(8 CAtUDq&!&!bhht512 e$A#(8 CAtUDq&!&!bhhr/0 ryy~%%b"-.55e٬?g٬\m?gJ{/L?g Oe?)gc]Fgꕲ q׿g\m?fc]F)g؁sFڿgZB>?g0L F%?gq= ףp)g?gR!u?guVſg&Sٿ)gǘ?gV-g ^)p?g( )gFx $g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ ?g_vO?)g}?5^Iؿg58EGr?gio?g7[ Acd}td|j}||\}}}} } } t|||t|||t|||y)z~ This test implements the example found in the NAG manual, f08khf. An example was not found for the complex case. rrrrN)r(r2r) r sva_expectu_expectv_expectr0rrrrrrrjs r4test_gejsv_NAGrsS0 D WAGG 4E#(8 CAtUDJ$/Had+Had+r6c tjjd}d}dtj|jz}t |dz f||}t |f||}t |dz f||}|j |j |j g}tj|tj|dztj|dz}tjj|} || z} td|\} } | |||\} }}}}}t||d t||dt||d tj|d tj|dztj|d z}tj||}t| D]?\}}||dz }|dd||gf|dd||gf<|dd|fxx|dd|dzf|zz cc<Ad|ddz }}|dd||gf|dd||gf<t|||z| | j }| | ||||| \}}t| |t| || |tvrd }|j| z}nd }|j!j| z}| | ||||||\}}t| || t#t$5| |dd||dddt#t$5| ||dd|dddt#t$5| |||dddddt#t$5| |d |dd|d dddd |d <d |d <| |||\}}}}} }!tj&j)||dz d k(d||dz dy#1swYxYw#1swYxYw#1swYxYw#1swY|xYw)Nrrwr.rQr2r3rgttrfgttrsrrrRrrzr}r)z?gttrf: _d[info-1] is , not the illegal value :0.)r8rrYrrr5rr3rr(r r rrrrzrrrQtestingr)"r2r3rr0durqdldiag_cpyrrrrr_dl_d_dudu2rrjrUrKrBrrb_cpyx_gttrsrb_trans__dl__d__du_du2_ipiv_infos" r4test_gttrf_gttrsrs ))   #C A %$$ $D %acV5c BB#QD3?A $acV5c BB 1668RWWY/H  RWWR_$rwwr1~5A qA AA#$6eDLE5$)"a$4!CS#tTr8A;'q(1+&r8A;' Aa(2773?:A qA#11gk1sAh;!aX+ !Q$1Q!V9Q;bAsAq3({^Aa!SkNAq1u4( FFHE#r3T15MGTq% AwT* ##'&&(**q.#r3T7%HMGTAwT* z " b"gq" z " b!CR&" z " b!RW z "# beQrUBqE"# BqE AaD*/Ar*:'D#tT5%JJs4!8}).DSPQ]OTI-IK##s0N.9N:OO.N7:OOOz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g@rffffff?r)r&rffffff@)333333 @ @r)rrrr)rrrWgC>)rrrX)rRrSrTrUrUg@gffffff@g%@g@g rgffffff&g3@rrUrWrIr )@@???)?rffffff @333333ӿ333333@ffffff ?)???@r)rrrr)rrrry~:pffffff?)r rry333333@y@@y333333 @3333332@y333333yffffff-ffffff#@y333333yfffff?@y333333"@y𿚙?yffffff(@rr y@y?@y@@ryr ry@c td|d|df\} } | |||\} } } }}}t||t| |t| |dt||| | | | |||\}}t||y)Nrrrr)r(r)rrqrdu_expd_expdu2_expipiv_exprrrrrrrrrrjrs r40test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfrXsd$$6A1GLE5$)"a$4!CS#tTC!C BD)D(##r3T15MGTGQr6)rxrwryc tjjd}|j||j|dzz}|j|dz |j|dz dzz}|j|dz |j|dz dzz}tj|tj|dztj|dz}tj|tj r3|j |j |j |j f\}}}}|j||j||j||j|f\}}}}tjj||dk(rtjnd}td|f\} } | |||\}}}} } } | |||| | ||\}}td |f\}}||\}}} ||||\}}tj|jd z}t||| y) NiTfr.rQrrwr|)rgtconrr~g?r)r8rrr3rrrr0rrrr(rrr)r2rrr3rqrrrrrrrrrjrCr@rrrrrrs r4 test_gtconrs ))   )C 1  1 b((A AE SZZA.r1 1B AE SZZA.r1 1B  RWWR_$rwwr1~5A }}UBKK(vvqvvrww7 1b"88E?AHHUORYYu5EryyQVGWWLAq"b IINN1DCK"&&QN ?E#$6=LE5!&r1b!1B2sD$ 2q"c4T :FC#$6=LE51XNBd 2u4 (FC 88E?   $DC4(r6))rSrW)rWrSrcZtd|}|\}}|||\}}t|dy)N geqrfp_lworkrrrr)r2r1r!rrrrjs r4test_geqrfp_lworkr"s3$^EBL DAqa(KE4qr6z ddtype,dtypectjjd}dtj|jz}d}t |f||dz}t |dz f||}tj |tj |dztj tj|dz}|j|jg}td|} | ||\} } } t||d t||dt| d d | d  tj | dtj tj|z} tj | }t|| |z| jjz| t |f||}||z}td|}|| | j|\}} t| d d| d  t||| y)Nrr.rwrTrQrpttrfrrzpttrf: info = z , should be 0)err_msgrpttrszpttrs: info = )r8rrYrrr5r3rrr(r rr rrrz)ddtyper2r3r0rrqrrrr$r_erjrKrzrrr&_xs r4test_pttrf_pttrsr*s ))   #C rxx"" "D A $QD&#6:A#QqSFE37A  RWWQ^#bggbggaj!&<ggaj2771a=(2771b>9 Hrwwy{{ "  (h < '1# > E GGAJA &B 7 GGAJB '"''!Q- 7 q!Q<r6zdtype,realtyper?cvtddtj|jz}t d|}d}t ||||\}}}} |||| |\} } } } t | dd| d ttjt|dtj| | |rt| tj| jztj|| t| tj| ztj| jz|| y y ) a Tests the ?pteqr lapack routine for all dtypes and compute_z parameters. It generates random SPD matrix diagonals d and e, and then confirms correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it tests that z can reform A. rrpteqrrrwrqrrCr?rzinfo = z, should be 0.rN)rr8rrr(rDrrsortr rrzrr3)r2r>r?r0rFrrqrrrCd_pteqre_pteqrz_pteqrrjs r4 test_pteqrrLY s H ## #D ge 4E A"5(AyAJAq!Q&+a1Y&O#GWgtqGD689BGGDGAJ')9E"'''"2"4"44bkk!n! # "'''"22RWWW5E5G5GG & r6ctdtd|}d}t||||\}}}}||dz |||\} } } } | dkDsJy)NrrFrrwrTrCr?rrr(rD r2r>r?rFrrqrrrCrIrJrKrjs r4test_pteqr_error_non_spdrQz s^ H ge 4E A"5(AyAJAq!Q',AE1Y&O#GWgt !8O8r6c tdtd|}d}t||||\}}}}tt||dd|||tt|||dd|||rtt||||dd|yy)NrrFrrwrrN)rr(rDrrQ) r2r>r?rFrrqrrrCs r4"test_pteqr_raise_error_wrong_shaperS s H ge 4E A"5(AyAJAq!Q*eQsVQ!yI*eQ#2!yIj%A3B9Mr6ctdtd|}d}t||||\}}}}d|d<d|d<|||||\} } } } | dkDsJy)NrrFrrwrrNrOrPs r4test_pteqr_error_singularrU sj H ge 4E A"5(AyAJAq!Q AaD AaD&+AqA&K#GWgt !8O8r6zcompute_z,d,e,d_expect,z_expect)gp= ף@rgq= ףp?r)g\(\ @g ףp= g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL F%u)gǘgŏ1w-!?g333333?gz6?cbd}td|j}tj|tj|dztj|dz}|||||\}} } } t |||t tj | tj ||y) zb Implements real (f08jgf) example from NAG Manual Mark 26. Tests for correct outputs. rrFrrQrrGrN)r(r2r8r3rr) r?rqrr9z_expectr0rFrCrr(_zrjs r4test_pteqr_NAG_f08jgfrY s D gagg 6E  RWWQ]"RWWQ^3AqAi@BBBt,BFF2Jx 0t "$r6c~tjg}td|j}t t ||y)Nr^r)r8rr(r2rr)A_emptyr^s r4#test_geqrfp_errors_with_empty_arrayrm s+hhrlG hgmm ?r:a=)q*Q-(r:a=)q*Q-(AvD) GE9 %T 1,UG 46 DJJqMQWWQZ 'N4::a=/J112 +>@ DJJqMQWWQZ 'N4::a=/J112 +>@r6c ,tjjd}td|\}}d}t |dz f||}t |f||}t |dz f||} tj |dtj |ztj | dz} t |df||} |t vrd nd } |r| jjn| | z} |d k(r |||| ndgd z\}}}}}}|||| | || ||||| }|\ }}}}}}}}}}|dk(r/d|d<d|d<|||| | }|\ }}}}}}}}}}|dkDsJdy|d k(r;d|d<d|d<d|d<|||| | |||||| }|\ }}}}}}}}}}|dkDsJdyy)NrrrrwrQrrrRrzr}rArVrrTrz&info should be > 0 for singular matrix)rrrrrr) r8rrYr(r5r3rrrz)r2rrr3rrrrrqrrrrrrrrrrrrrrrrrrrrrrjs r4test_gtsvx_error_singularr s ))   #C#$6eDLE5 A $acV5c BB#QD3?A $acV5c BB B"''!*$rwwr1~5A#QF%SAAK'CSE!qA-A!CKb!RdVAX)D#tUE5b!RUE7I@I=CS$feT4 s{"2"aQ' DMARdD&%tTaxAAAx BRb "aQTt#%1 DMARdD&%tTaxAAAx r6ctjjd}td|\}}d}t |dz f||}t |f||}t |dz f||} tj |dtj |ztj | dz} t |df||} |t vrd nd } |r| jjn| | z} |d k(r |||| ndgd z\}}}}}}|d k(r}tt||dd|| | || ||||| tt|||dd| | || ||||| tt|||| dd| || ||||| tt|||| | dd|| ||||| ytt|||| | || |dd|||| tt|||| | || ||dd||| tt|||| | || |||dd|| tt|||| | || ||||dd| y)NrrrrwrQrrrRrzr}rArVrTr) r8rrYr(r5r3rrrzrrQr)r2rrr3rrrrrqrrrrrrrrrrrs r4"test_gtsvx_error_incompatible_sizer s] ))   #C#$6eDLE5 A $acV5c BB#QD3?A $acV5c BB B"''!*$rwwr1~5A#QF%SAAK'CSE!qA-A!CKb!RdVAX)D#tUE5 s{j%CR!Ru$3E 7 j%QsVRu$3E 7 j%Q3Bu$3E 7 iAr1Sb6u$3E 7 j%QAu$s)E 7 j%QAu$3s8E 7 j%QAu$3s)U < j%QAu$3E#2JU td|j||SNr$rr(r2rqrs r4r) ')H(8?@ww)HHI1)Nr6cyN)NNNrrs r4rr+ r6ctjjd}dtj|jz}t d|}d}t |f||dz}t |dz f||} tj|tj| dztjtj| dz} t |d f|| } | | z} ||| \} }}|j| j| jg}||| | || | \} }}}}}}t||d t| |dt| |d t|d k(d |dt| |tj|dtjtj|z}tj| }t| ||ztj|jz|t!|dr Jd|t|j"dk(d|j"dt|j"dk(d|j"dy)a This tests the ?ptsvx lapack routine wrapper to solve a random system Ax = b for all dtypes and input variations. Tests for: unmodified input parameters, fact options, incompatible matrix shapes raise an error, and singular matrices return info of illegal value. rr.ptsvxrrUrTrQrrRrrrefrzinfo should be 0 but is .rrr)rRrz# but should be ({x_soln.shape[1]},)rN)r8rrYrrr(r5r3rrr rrr rrzrr1)r2r>r df_de_lambdar3r0rrrqrrrrrrrjrrrrrrKrzs r4 test_ptsvxr% s- ))   #C %$$ $D WE 2E A#QD(C81$**>8"8: DJJ$ >$**>8"8:r6c>td|j||Srrrs r4rrd rr6cyrrrs r4rrf rr6c 0tjjd}td|}d}t |f||dz}t |dz f||}tj |tj |dztj tj |dz} t |df|| } | | z} |||\} } }tt||dd|| || | tt|||dd| || | tt|||| dd|| | y) NrrrrUrTrQrrRrr) r8rrYr(r5r3rrrQr)r2r>rrr3rrrqrrrrrrrjs r4test_ptsvx_error_raise_errorsr` s  ))   #C WE 2E A#QD(C81td|j||Srrrs r4rr rr6cyrrrs r4rr rr6ctjjd}td|}d}t |f||dz}t |dz f||}tj |tj |dztj tj |dz} t |df|| } | | z} |||\} } }|d k(r]d |d <|||\} } }|||| \} } }}}}}|d kDr||ksJt |f||}|||| \} } }}}}}|d kDr||ksJy|||\} } }d | d <d | d <|||| || | \} } }}}}}|d kDsJy)NrrrrUrTrQrrRrrTrrSr)r8rrYr(r5r3r)r2r>rrr3rrrqrrrrrrrjrrrrs r4test_ptsvx_non_SPD_singularr{ s ))   #C WE 2E A#QD(C81U1X>1>>@ 4B'74($D%u Q%(HBq 1E "4 (CB!$/a5)ICq q6$s5K K KKctjjd}tj|jdz}d}t ||g||}t d|\}}|d|d }t|d d |d }|d } |d } |tvr"t|tj|d |t| |z| jjz|d |||| dd}t|d d |d }|d} |tvr"t|tj|d |t| |z| jjz|d |t|d| d |y)Nrr.rwr)geestrexcrcyNrrs r4rz!test_gees_trexc.. rr6FrrrrIr[rPrWrQr r r8rrYrrr5r(rr/rrrrz) r2r3r0rrbrrrrrCd2s r4test_gees_trexcr sM ))   %C 88E?  s "D A#QF%SAA"#4EBKD% .! 7FQq Ar A 4B 2771:AD9AEAFFHJJ&= 1aA FQq Ar A 2771:AD9AEAFFHJJ&=AdGRad3r6zt, expect, ifst, ilst)rg)\({Gz?gQ?)r皙rffffff?)rgrg?)rrrr)rlV}gV_?g|?5^?)g?rgV/?g;On?)rrrggj+)y ףp= ? ףp= ׿yRQȿQ?y)\(?п)r@yQ ףp= yq= ףpͿp= ף?)rr @yGz?(\?)rrr@)ry1%Ŀ q?ys??ܵ|ȿyHzG??ܵ?)rryV/?ݓ?yjt?vտ)rrryB>٬?=U?)rrrrcd}td|j}|||||d}t|dd|d}t|||y) zg This test implements the example found in the NAG manual, f08qfc, f08qtc, f08qgc, f08quc. rrrr)wantqrrN)r(r2rr)rifstilstexpectr0rrs r4test_trexc_NAGr  sN< D WAGG 4E 1at1 -FQq AFAD)r6ctjjd}tj|jdz}d}t ||g||}t ||g||}t d|\}}|d||dd }t|d d |d } |d } |d } |d} | d| dz } | d| dz }|tvrDt| tj| d |t| tj| d |t| | z| jjz|d |t| | z| jjz|d ||| | | | dd }t|d d |d } |d } |d} |d} |tvrDt| tj| d |t| tj| d |t| | z| jjz|d |t| | z| jjz|d |t| d| dz |d |t| d| dz | d |y)Nrr.rwr)ggestgexcrcyrrrs r4rz!test_gges_tgexc..M rr6Fr* overwrite_brrrQrrIrr[rPrWrRrSrr)r2r3r0rrbrr rrrrrrCd1rs r4test_gges_tgexcrB s8 ))   %C 88E?  s "D A#QF%SAA#QF%SAA"#4EBKD% .!QEu MFQq Aq Ar Ar A 41T7 B 41T7 B 2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&= 1aAq! $FQq Aq Aq Aq A 2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r6cjtjjd}tj|jdz}d}t ||g||}t d|\}}}|d|d }t|d d |d } |d } | d } |tvr"t| tj| d |t| | z| jjz|d |tj|} d| d<t|| | } |tvr || | | | }n|| | | | | d}t|d d |d } |d} |tvr"t| tj| d |t| | z| jjz|d |t| d| d |y)Nrr.rwr)rtrsen trsen_lworkrcyrrrs r4rz!test_gees_trsen..} rr6FrrrrIr[rPrQrVrrliworkrr8rrYrrr5r(rr/rrrrzr r#)r2r3r0rrbrrrrrrCrselectrs r4test_gees_trsenrr s ))   %C 88E?  s "D A#QF%SAA/( 7D%.! 7FQq Ar A 4B 2771:AD9AEAFFHJJ&= XXa[FF1I ; 2E vq!51vq!5qBQq Aq A 2771:AD9AEAFFHJJ&=AdGRad3r6z*t, q, expect, select, expect_s, expect_sep)g/$?g QIg~jtx?gJ4?)r58EGrgGr?gyX5;?)rg?߾rgt?)rrrg yǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g' gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?rg8EGr?)rg?gQg(\ſ)g ףp= ?gQ?rr)g)\(ܿgQտgQg(\?)rg{GzԿgp= ףg)\(?)rQrrrQg?g(\ @)yqhyfc]F?ڊe׿yMbȿ&S?y&1??п)ry?5^I @yo0*yZd;OͿ~:p?)rryx $(@4@y[ A?&?)rrry?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}? cZy+eXw? -ٿ)y"u? c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47 )yS!uq F%u @y yտGx $(?y3ı.n?rh|)yv? F%uyd`TR?I&†ۿyN@?ݓy4@ @ ^)?)ys{ @ o_yH.@|Pk @y 0*?*:Hy]m{?Gz)y) 0[tjjd}tj|jdz}d}t ||g||}t ||g||}t d|\}}}|d||dd } t| d d | d } | d } | d } | d} | d| dz }| d| dz }|tvrDt| tj| d |t| tj| d |t| | z| jjz|d |t| | z| jjz|d |tj|}d |d<t||| | }|d d z|d f}||| | | | |} t| d d | d } | d } | d} | d} |tvrDt| tj| d |t| tj| d |t| | z| jjz|d |t| | z| jjz|d |t| d| dz |d |t| d| dz |d |y)Nrr.rwr)r tgsen tgsen_lworkrcyrrrs r4rz!test_gges_tgsen.. rr6FrrrrQrrIrr[rPrVrir rr)r2r3r0rrbrr r%r&rrrrrCrrrrs r4test_gges_tgsenr( s} ))   %C 88E?  s "D A#QF%SAA#QF%SAA/( 7D%.!QEu MFQq Aq Ar Ar A 41T7 B 41T7 B 2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&= XXa[FF1I ;1 5E1XaZq "E 61aAU 3FQq Aq Ar Ar A 2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r6za, b, c, d, e, f, rans, lans)rrrr)rr&rr)rrr&r)rrrg@)rrrr)rrrr)rrg(@)g"rr*)r)rr*r)rr g3@)rrrr&)rrrr)rrrr)rrrr)rrrr)rrrr)rrrr)r+rrr)rrg r)rrr)r,rrr)rrrr)rrr&r)rrrr)rrrr)rr&rr)rrrr)rrrrc \d} td|} | ||||||\} } } }}t|dt| ddtj|j dzdt|d dtj|j dzd t| || d t| || d y)Nrtgsylrrrr.zSCALE must be 1.0rr0r%rzDIF must be nearly 0zSolution for R is incorrect)r0r%zSolution for L is incorrect)r(rrr8rr)rbrrrqrreranslansr2r0r.routloutr]difrjs r4test_tgsyl_NAGr5$ sH D ge 4E#(Aq!Q#: D$sDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24D$T9;D$T9;r6r)rTrzijob)rrQrRrSrTc |tjk(rdnd}tjjd}d\}}t |j dd||gj ||j dd||gj |d^}}} t |j dd||gj ||j dd||gj |d^} } } |j d d ||gj |} |j d d ||gj |} td | }||| | || | || \}}}}}|dk(sJd|dk\sJd|dk(r1t|ddtj|jdzdn |dk\sJd|d kr|dk(r!||z|| zz }|| z}||z|| zz }|| z}nt|dk(rotj||ztj||zz}|| z}|tj| z|tj| zz}d|z| z}t|ddt|ddyy)NgMbP?g|=lOElt/rirwr)outputr rRr.r)rr6rzINFO is non-zerorzSCALE must be non-negativer.zDIF must be 0 for ijob =0r/zDIF must be non-negativerTrzrzlhs1 and rhs1 do not match)r0rr%zlhs2 and rhs2 do not match) r8rrrr!uniformr0r(rrrr)r2rr6r0r3rrrbrqr@rrrrer.r2r3r]r4rjlhs1rhs1lhs2rhs2s r4 test_tgsylr>X s BJJ&4ED ))   0 1C DAq#++c21v.55e<++c21v.55e<!HAq1#++c21v.55e<++c21v.55e<!HAq1 BAq6"))%0A BAq6"))%0A ge 4E#(Aq!Q/44$A D$sD 19(((9 C<555< qySqrxx/B/B3/F ; =cz555z qy C<t8dQh&D7Dt8dQh&D7D c\<<?T)BLLOd,BBD7D",,q/)D2<<?,BBD:adB < >r6mtyperc|dk(r|tvrtjdtjj d}d\}}|t vr<|j||f|j||fdzzj|}n#|j||fj|}|dk(r||jzn||jjz}|j||fj|}|d|d |d f}t|| \} } } | || } | || | \} }}|dk(sJ| | |||\}}|dk(sJtj|j}t||z|d|z|zy)Nruzhetrs not for real dtypes.*M/t|0)rrUrr.rtrwrxtrsrrrr)rbrrrr.r)rrBrCr8rrr/r9r0rzrr(rrr)r?r2rr3rrrrrJrwrxrBrrrrjrrs r4 test_sy_hetrsrC s }+- 01 ))   0 1CGAt  [[q!f[ % !Q (@(C C K KE R KKaVK $ + +E 2D=ACCa!&&(**nA !T #**51AgSMeWI.5' =E*5>CC au %E!56OCt 199Cdau5GAt 199 ((5/  CAaCQs+r6c|dk(r|tvrtjdtjdk(r|t vrtjdt jjd}d}|j||f|j||fdzz}t j|t jr |j}|j|}|dk(r||jzn||jjz}|d |d f}t|| \}}||| \} } } | d k(sJ|| | |\} } | d k(sJt j |j"} t j$j'|}|r;t)t j*| t j*|d|z| zyt)t j,| t j,|d|z| zy)Nruzhetri not for real dtypes.z win-arm64z1Test segfaulting on win-arm64 in CI, see gh-23133rArr.rtrwrBrrr)rbrrr.r)rrBrC sysconfig get_platformr/r8rrrrrr0rzrr(rrrrrrr)r2rr?r3rrrJrwrBrrrjA_invrrs r4test_sy_he_trirH s }+- 01;.5N3J GH ))   0 1C A Aq6SZZA/22A }}UBKK( FF AD=ACCa!&&(**nAgSMeWC= (EU3HC!5)OCt 199$e4KE4 199 ((5/  C ))-- C  3q59E 3q59Er6rz uplo, m, n))rUrUrw)rUrwrw)rKrwrU)rKrwrwctjjd}|j||fj|}t d|f\}} |||||} |dk(rtj |ntj |}|dk(r&tjt||} d|| | f<| ||} t| | dy) Nl8#q9 r)lantrr)rNr3rUrQ>r) r8rrr0r(rrrr]r) rrNrrr3r2r3rrJrrCrBrs r4 test_lantrrL s ))   1 2C A &&u-A#$6=LE5 ad .Cck rwwqzA s{ IIc!Qi !Q$ a.CC4(r6c tjjd}d\}}}|j||f|j||fdzz}|jtjd|j dd|}||z }tj |tjr |j}|j|}d|tj||dz<d|tj|| dz <t|||}d|z|zdz} tj| |f|} || |dddf<tjj||d k(rtj nd } t#d | f\} } | | ||\}}}| |||||| d}t#d |f\}}||d}||| |d}t%||dy)N2 rwrRrRr.rrwrQrRrrwr|)gbcongbtrf)rrar`rMrrr~rr)r8rrrrrrrrr0rrr"r rrrr(r)r2rr3rr`rarrtmpLDABrMrrPrQlu_bandrr@rCrrrrs r4 test_gbconrU s ))   ,CIAr2 Aq6SZZA/22A \\"++aa)LE5RR(GT1 TbRG$  C$$6=LE5 q!B E %a (CC1%r6ctjjd}d\}}}|j||f|j||fdzz}tj|tjr |j }|j |}d|tj||dz<d|tj|| dz <t|||}td|f\}} | ||} |||||} t| | dy) NrNrOr.rrQ)langbrrKr) r8rrrrrr0rrr"r(r) r2rr3rr`rarrMrWrrrCs r4 test_langbrX s ))   ,CIAr2 Aq6SZZA/22A }}UBKK( FF A$%Abooaa !%&Abooa"q!" BA B#$6=LE5 a.C b"b !CC4(r6 compute_vctjjd}d}|j||}|j|dz |}tj|dtj|ztj|dz}tjj |}t d}||||\} } } | dk(sJttj| tj||rTtj|j} t| tj| z| jz|| d z yy) NlJ*Os{UrwrrQrstevd)rYrrr) r8rrr3reigvalshr(rrHrrrz) r2rYr3rrqrrrr[rUr!rjrs r4 test_stevdr]s  ))   2 3C A 1E "A 1q5 &A 2#bggam3A ))  Q C W %Eq!y1JAq$ 199BGGAJ -hhuo!!BGGAJ,ac3h?r6r,) functoolsrrrE numpy.testingrrrrrr rBr rnumpyr8r r r rrrrr numpy.randomrrr scipy.linalgrr:rrrrrrrrrr r!scipy.linalg._basicr"scipy.linalg.lapackr# scipy.statsr$r% scipy.sparsesparserZscipy.__config__r& ImportErrorr'r9r(scipy.linalg.blasr)rr9rr complex128r/r blas_provider blas_versionr5rMrOrrrtrurr rr$rFrrrrrrrrr rrr$r-r<rOrXr^rerjrrr|r~rrrrskipifrrr6rrrrrrrrr"rr*r,r.r<rDrLrQrSrUrYrjrmrrrrrrrrrrrrrrr rrr#r(r5r>rCrHrFrLrUrXr]rr6r4ros  //*!!!-,FFFF*.2'01,zz2::& ,, . ~ %##  /08@M./7 BL*O.]-]-@  p9p9f&)"BCD*--*CC(;;DJ/J/\&)1#s,#s,q"g& )'--2* )F).'4T'6T48AGAGHLL^.?bA63>1>FD&DR7!t7:t&8R36D@"DJD4 LFUKUKp%PP%PP*/Z <DKMKMK$:>&&!12+.q*q*q*!Q(!Q(b&))+++/3b&J+. / F(!1+!1+!1+!1+!1+!1+ '119#288%?%?%@%=%?%? %AB $288$DE#288%G%F%E%H%G%G %IJ $288%G%H%F%G%IJKLM$ ,%M$ , &)XK*XKvL#288$9:%RXX&@A%RXX&;<%RXX&9:%RXX&BC%RXXl3%RXXo6%RXXSz(,d|(+T{(+U|(+T{ ')* &RXXAw()2w()2w(*Bx(*Aw '012&&RXX&GH%RXX'45&RXX&FG%RXX'AB%RXX':;%RXX&?@%RXXo6%RXX*'=(3\'B(4i'@(3['A(1:'> '@A &RXX'7(.'7(.'8(/'8(.'7 '9:%%)* V W* V (&)1q"g&)'2*)2&)"BCD*[;6?A,&A,&^[;6?A0A0[;6?AMAM&A""((#56""((?3""((#45""((#89""((QGaVaVb"X%&G$-.""((S!Hq"g2wQ%&G$-. #"((#34""((#>?""((=1""((#56""((VW$57G%+V$4vv6F$HI""((T5MD$<$%)4L$23 E&1'&1.@)V[;%>?AeAh/&0A&<)V[;%>?AeAh/ 0A )V[;%>?AeAh/ N0A N)V[;%>?AeAh/ 0A :#288$;<#288$56#288$DE#288%F%G%G%F%HI J  =  =&)(@A=$B*=$@.#>?t - L.@ LD%=1t - L.2 L6*01 '2+ '6*+C++C\&)t}5#s,7@-6*7@t&)1v.#s,-B-/*-B`&(+t}5#s,-<-6,-<`#288$9:#288$?@#288$9:#288c3Z#tsDk&(%[3+%?@#288b!Wq"g2wR&(!W%./ 0$288$EF#288%>?#288$DE#288h %;&1;%?&2H%=&1;%?&/%< %>? $288ff%57G&,g%6&8I&,f%5%78 9:;());())3v{1<8=,>?,NO ?@BC 1: C?1:h)3v{1<8=,>?,NO ?@BC K C?K()3v{1<8=,>?,NO ?@BC " C?"J#288$67#288O4#288aWq!fq!fr2h&'W%./#288c1X2wB&(!Wq"g%78 9 $288$45#288$?@#288h %:&.%9&.%9&.%9%;<$288fg%6&,f%5&,f%5&,f%5%78 9 :;" *#;" *5$-0&)+=*1+=\&)!4*!4Hbhh))*)+,bhh211134 bhhJKHHJKbhh5556 78   0 *10 * &),>*,>^&)*4**4Z0bhh112134bhh033134bhh213245bhh| bhh6755 67bhh5656 78bhh6555 67bhh|3')T5U)T5B&)5>*5>p"bhh((((*+bhh((((*+bhh((((*+bhh((((*+bhh((((*+bhh((((*+bhh((((*+bhh((((*+9,-!.D+.;/E!.F;"+.*-1->2./->`4,/&)&),**0,.4,/&)&)F**0F6m!45(EF#s,&) )*-F6 ) &)1!&2*!&Hm!45&))*6)&+.f-@./@oo F Gs.AY AY%YAY"Y!AY"Y%AY0Y/AY0