package Ġcn . an con o . math . algebra . linear Ċ Ċ import Ġcn . an con o . math . Abstract Math Object Ċ import Ġcn . an con o . math . Calculator Holder Ċ import Ġcn . an con o . math . IM ath Object Ċ import Ġcn . an con o . math . algebra . abs . calculator .* Ċ import Ġcn . an con o . math . algebra . linear . space . Vector Space Calculator Ċ import Ġcn . an con o . math . number Models . api .* Ċ import Ġcn . an con o . utilities . Array Sup Ċ import Ġjava . util . function . Function Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . round To Long ĊĊ Ċ /* Ċ Ġ* ĠCreated Ġby Ġli y ich eng Ġat Ġ 2 0 2 1 - 0 4 - 2 8 Ġ 1 8 : 4 9 Ċ Ġ*/ ĊĊ Ċ abstract Ġclass ĠAbstract Vector < T >( ĊĠĠĠĠĠĠĠ Ġmc : ĠRing Calculator < T >, ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsize Ġof Ġthis Ġvector , Ġthe Ġnumber Ġof Ġelement Ġthat Ġthis Ġvector Ġcontains . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġsize : ĠInt ) ĊĠĠĠ Ġ: ĠAbstract Math Object < T , ĠRing Calculator < T >>( mc ), ĠGen Vector < T > Ġ{ ĊĠĠĠ Ġprotected Ġfun Ġcheck Same Size ( v : ĠAbstract Vector <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( size Ġ== Ġv . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Shape Ġmismatch : Ġ$ size Ġand Ġ${ v . size }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsum Ġof Ġall Ġelements Ġin Ġthis Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġsum (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Sequence (). reduce ( calculator :: add ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsquare Ġof Ġthe ĠE uclidean Ġnorm Ġof Ġthis Ġvector , Ġwhich ĊĠĠĠĠ Ġ* Ġis Ġequal Ġto Ġthe Ġsum Ġof Ġsquare Ġof Ġeach Ġelement . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġgenerally Ġthe Ġsame Ġas Ġ` this . inner ( this )`. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` | this | ^ 2 ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġnorm Sq (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġvar Ġre Ġ= Ġmc . zero ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġget ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre Ġ= Ġmc . add ( mc . multiply ( t , Ġt ), Ġre ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġre ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe ĠE uclidean Ġnorm Ġof Ġthis Ġvector , Ġwhich ĊĠĠĠĠ Ġ* Ġis Ġequal Ġto Ġthe Ġsquare Ġroot Ġof Ġthe Ġsum Ġof Ġsquare Ġof Ġeach Ġelements . ĊĠĠĠĠ Ġ* ĠThe Ġresult Ġis Ġnon - negative . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` | this |` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġnorm (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . square Root ( norm Sq ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġwill Ġreturn Ġthe Ġinner Ġproduct Ġof Ġ` this ` Ġand Ġ` v `. ĊĠĠĠĠ Ġ* ĠThe Ġsize Ġof Ġthe Ġtwo Ġvectors Ġmust Ġbe Ġthe Ġidentity Ġwhile Ġwhat Ġkind Ġof Ġvector ĊĠĠĠĠ Ġ* Ġ( row Ġor Ġcolumn ) Ġis Ġignored . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv Ġa Ġvector ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġinner ( scalar ) Ġproduct Ġof Ġthis Ġtwo Ġvectors . ĊĠĠĠĠ Ġ* Ġ@ throws ĠArithmetic Exception Ġif Ġdimension Ġdoesn 't Ġmatch ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġin fix Ġfun Ġinner ( v : ĠAbstract Vector < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Same Size ( v ) ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġvar Ġre Ġ= Ġmc . zero ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmc . eval Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Ġ+= Ġget ( i ) Ġ* Ġv [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġre ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġapply All ( f : Ġ( T ) Ġ-> ĠT ): ĠAbstract Vector < T > ĊĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠAbstract Vector < N > ĊĊĠĠĠ Ġoverride Ġfun Ġvalue Equals ( obj : ĠI Math Object < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ! is ĠVector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġindices . all Ġ{ Ġi Ġ-> Ġcalculator . isEqual ( this [ i ], Ġobj [ i ]) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( nf : ĠNumber Formatter < T >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġindices . join ToString (", Ġ", Ġ" (", Ġ") ") Ġ{ Ġnf . format ( get ( it )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠVector < T >( ĊĠĠĠĠĠĠĠ Ġmc : ĠRing Calculator < T >, ĊĠĠĠĠĠĠĠ Ġsize : ĠInt ) ĊĠĠĠ Ġ: ĠAbstract Vector < T >( mc , Ġsize ), ĠVector Model < T , ĠVector < T >>, ĠGen Vector < T > Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġunit Ġvector Ġof Ġthis Ġvector 's Ġdirection , Ġthrows Ġan Ġexception ĊĠĠĠĠ Ġ* Ġif Ġthis Ġvector Ġis Ġan Ġzero Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġthis / | this | ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġunit ize (): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠ Ġval Ġnorm Ġ= Ġnorm () ĊĠĠĠĠĠĠĠ Ġif Ġ( mc . is Zero ( norm )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠArithmetic Exception (" This Ġvector Ġis Ġzero !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . multiply ( mc . reci pro cal ( norm )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġwhether Ġthe Ġtwo Ġvectors Ġare Ġper pend icular . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv Ġanother Ġvector ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġof Ġthe Ġvectors Ġare Ġper pend icular ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġis Per pend icular ( v : ĠVector < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcalculator . is Zero ( inner ( v )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġangle Ġof Ġ` this ` Ġand Ġ` v `. ĊĠĠĠĠ Ġ* Ġ< pre > Ġarc cos ( this ĠÂ· Ġv Ġ/ Ġ( | this | Ġ| v | )) </ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ< pre > Ġarc cos ( this ĠÂ· Ġv Ġ/ Ġ( | this | Ġ| v | )) </ pre > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġangle ( v : ĠVector < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . arc cos ( angle Cos ( v )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcos Ġvalue Ġof Ġthe Ġangle Ġof Ġ` this ` Ġand Ġ` v `. ĊĠĠĠĠ Ġ* Ġ< pre > this ĠÂ· Ġv Ġ/ Ġ( | this | Ġ| v | )</ pre > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ< pre > this ĠÂ· Ġv Ġ/ Ġ( | this | Ġ| v | )</ pre > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġangle Cos ( v : ĠVector < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpro Ġ= Ġinner ( v ) ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠReal Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . divide ( pro , Ġmc . multiply ( norm (), Ġv . norm ())) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġwhether Ġthis Ġvector Ġis Ġa Ġzero Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġis Zero (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġsize ). all Ġ{ Ġmc . is Zero ( this [ it ]) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġwhether Ġthis Ġvector Ġis Ġan Ġunit Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġis Unit Vector (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠUnit Ring Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġmc . isEqual ( norm Sq (), Ġmc . one ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġwhether Ġthe Ġtwo Ġvectors Ġare Ġparallel . ĊĠĠĠĠ Ġ* ĠIf Ġany Ġof Ġthe Ġtwo Ġvector Ġis Ġa Ġzero Ġvector Ġ, Ġthan ĊĠĠĠĠ Ġ* Ġthe Ġmethod Ġwill Ġreturn Ġtrue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġv Ġa Ġvector ĊĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġ` this Ġ// Ġv ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġis Parallel ( v : ĠVector < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdimension Ġcheck ĊĠĠĠĠĠĠĠ Ġcheck Same Size ( v ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Zero () Ġ|| Ġv . is Zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠ Ġvar Ġnot 0 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( mc . is Zero ( get ( not 0 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! mc . is Zero ( v [ not 0 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot 0 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( not 0 Ġ+ Ġ 1 Ġ== Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= Ġget ( not 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġv [ not 0 ] ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġnot 0 Ġ+ Ġ 1 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! mc . isEqual ( mc . multiply ( t 1 , Ġv [ i ]), Ġmc . multiply ( t 2 , Ġget ( i )))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġvector Ġof Ġthe Ġgiven Ġsize . ĠThe Ġelements Ġin Ġthe Ġcorresponding Ġpositions Ġare Ġequal Ġto Ġthe Ġelements ĊĠĠĠĠ Ġ* Ġin Ġthis Ġand Ġremaining Ġelements Ġare Ġset Ġto Ġzero . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġresize ( size : ĠInt ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector . copyOf Range ( size , Ġthis , Ġ 0 , Ġsize , Ġ 0 , Ġcalculator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExp ands Ġthis Ġvector Ġadding Ġpadding Ġzeros Ġto Ġthe Ġleft Ġand Ġto Ġthe Ġright . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġexpand ( left : ĠInt , Ġright : ĠInt ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġleft Ġ+ Ġright Ġ+ Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġmin ( 0 , Ġleft ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġsize Ġ- Ġmin ( 0 , Ġright ) ĊĠĠĠĠĠĠĠ Ġval Ġdest Idx Ġ= Ġmax ( 0 , Ġleft ) ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector . copyOf Range ( new Size , Ġthis , Ġstart , Ġend , Ġdest Idx , Ġcalculator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠVector < N > ĊĊĊĠĠĠ Ġoverride Ġfun Ġadd ( y : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . add ( this , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġneg ate (): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . neg ate ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubtract ( y : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . subtract ( this , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmultiply ( k : ĠT ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . multiply ( this , Ġk ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdivide ( k : ĠT ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . divide ( this , Ġk ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMultip lies Ġthis Ġvector Ġwith Ġthe Ġmatrix Ġ[ m ], Ġviewing Ġthis Ġas Ġa Ġrow Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġis Ġrequired Ġthat Ġthe Ġ[ size ] Ġof Ġthis Ġis Ġequal Ġto Ġthe Ġ[ Matrix . row ] Ġof Ġ[ m ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ` this Ġ* Ġm ` ĊĠĠĠĠ Ġ* Ġ@ see ĠVector . multiply By Vector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġmultiply ( m : ĠMatrix < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmultiply By Vector ( this , Ġm ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( m : ĠMatrix < T >): ĠVector < T > Ġ= Ġmultiply ( m ) ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġvector Ġwhose Ġelements Ġare Ġall Ġ[ x ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġconstant ( x : ĠT , Ġsize : ĠInt , Ġmc : ĠRing Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . constant ( x , Ġsize , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġvector Ġwith Ġall Ġones . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġones ( size : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstant ( mc . one , Ġsize , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġzero Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġzero ( size : ĠInt , Ġmc : ĠRing Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . zero ( size , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġunit Ġcolumn Ġvector Ġof Ġthe Ġgiven Ġ[ size ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġunit Vector ( size : ĠInt , Ġunit Index : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . unit Vector ( size , Ġunit Index , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġall Ġunit Ġvectors Ġof Ġthe Ġgiven Ġ[ size ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġunit Vectors ( size : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠList < Vector < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . unit Vectors ( size , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġvector Ġaccording Ġto Ġthe Ġgiven Ġsupplier . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( size : ĠInt , Ġmc : ĠRing Calculator < T >, Ġsupplier : Ġ( Int ) Ġ-> ĠT ): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . of ( size , Ġmc , Ġsupplier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġvector Ġwith Ġthe Ġgiven Ġ[ elements ] Ġlist . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( elements : ĠList < T >, Ġmc : ĠRing Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . of ( elements , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġvector Ġwith Ġthe Ġgiven Ġ[ elements ] Ġarray . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( mc : ĠRing Calculator < T >, Ġvar arg Ġelements : ĠT ): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġof ( elements . asList (), Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġresult Ġof Ġ` mat Ġ* Ġv `, Ġit Ġis Ġrequired Ġthe Ġvector 's Ġsize Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġequal Ġto Ġthe Ġmatrix 's Ġcolumn Ġcount . ĠThis Ġmethod Ġwill Ġtreat Ġthe Ġvector Ġas Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġrow Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmat Ġa Ġmatrix ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġv ĠĠ Ġa Ġvector ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ` mat Ġ* Ġv ` Ġas Ġa Ġcolumn Ġvector , Ġwhich Ġhas Ġthe Ġlength Ġof Ġ` mat . getRow Count ()`. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġmultiply To Vector ( mat : ĠAbstract Matrix < T >, Ġv : ĠAbstract Vector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( mat . column Ġ== Ġv . size ) Ġ{ Ġ" mat . column Ġ!= Ġv . size " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġmat . calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArray < Any ? >( mat . row ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġt Ġ= Ġmc . zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġmat . col Indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġmc . eval Ġ{ Ġt Ġ+ Ġmat [ k , Ġj ] Ġ* Ġv [ j ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( mc , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġresult Ġof Ġv Ġ* Ġmat , Ġit Ġis Ġrequired Ġthe Ġvector 's Ġsize Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġequal Ġto Ġthe Ġmatrix 's Ġrow Ġcount . ĠThis Ġmethod Ġwill Ġignore Ġwhether Ġthe Ġvector Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġa Ġcolumn Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġv ĠĠ Ġa Ġvector ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmat Ġa Ġmatrix ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ` v Ġ* Ġmat ` Ġas Ġa Ġrow Ġvector , Ġwhich Ġhas Ġthe Ġlength Ġof Ġ` mat . getColumn Count ()`. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġmultiply By Vector ( v : ĠAbstract Vector < T >, Ġmat : ĠAbstract Matrix < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( mat . row Ġ== Ġv . size ) Ġ{ Ġ" mat . row Ġ!= Ġv . size " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġmat . calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArray < Any ? >( mat . column ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġt Ġ= Ġmc . zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmat . row Indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġmc . eval Ġ{ Ġt Ġ+ Ġv [ i ] Ġ* Ġmat [ i , Ġk ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( mc , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOr thogonal izes Ġthe Ġgiven Ġvectors Ġby Ġusing ĠSch mid t Ġmethod , Ġit Ġis Ġrequired Ġthat Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġgiven Ġvectors Ġare Ġlinear Ġir relevant . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvs Ġan Ġarray Ġof Ġvectors ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġa Ġnew Ġlist Ġof Ġvectors ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Safe Var args ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġor thogonal ize ( vs : ĠList < Vector < T >> ): ĠList < Vector < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// vs ĠĠĠ Ġ: Ġa 1 , a 2 , a 3 Ġ... Ġan ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// list Ġ Ġ: Ġb 1 , b 2 , b 3 Ġ... Ġbn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġvs . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġvs [ 0 ]. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( vs . all Ġ{ Ġit . size Ġ== Ġsize Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġvs [ 0 ]. calculator Ġas ĠField Calculator ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < Vector < T >> Ġ= ĠArrayList ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġus Ġ= ĠArrayList < Vector < T >>( n Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// us : Ġb / b ^ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( vs [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// b 1 Ġ= Ġa 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġvs [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġmc . neg ate ( u . norm Sq ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġus Ġ+= Ġu . divide ( t ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġcopy Of ( vs [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . add Mul Assign ( us [ j ]. inner ( v ), Ġlist [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġor thogonal ize And Trans ( vs : ĠList < Vector < T >> ): ĠPair < List < Vector < T >>, ĠMatrix < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Created Ġby Ġl yc Ġat Ġ 2 0 2 1 - 0 5 - 1 1 Ġ 2 0 : 5 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġvs [ 0 ]. calculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġvs . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠR Ġ= ĠMatrix . identity ( n , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġws Ġ= ĠArrayList < Vector < T >>( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠArrayList < T >( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġcopy Of ( vs [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġmc . eval Ġ{ Ġu . inner ( ws [ j ]) Ġ* Ġd [ j ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu . add Mul Assign ( mc . neg ate ( k ), Ġws [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR [ j , Ġi ] Ġ= Ġk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! u . is Zero ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġu . norm Sq () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ+= Ġmc . reci pro cal ( length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġws Ġ+= Ġu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġws Ġto ĠR ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Safe Var args ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġor thogonal ize And Unit ( vs : ĠList < Vector < T >> ): ĠList < Vector < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġor thogonal ize ( vs ). map Ġ{ Ġit . unit ize () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġsum Ġof Ġa Ġnon - empty Ġlist Ġof Ġvectors . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġsum ( vs : ĠList < Vector < T >> ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( vs . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . sum ( vs , Ġvs [ 0 ]. size , Ġvs [ 0 ]. calculator ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġvector Ġof Ġminimum Ġnorm Ġin Ġthe ĠZ - span Ġof Ġ` a , b `, Ġthat Ġis , ĊĠĠĠĠĠĠĠĠ Ġ* Ġa Ġvector Ġ` v ` Ġsuch Ġthat ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre >| v | Ġ= Ġmin Ġ{| ma Ġ+ Ġnb | Ġ: Ġm , Ġn Ġin ĠZ }</ pre > ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshortest Span ( v 1 : ĠVector < Double >, Ġv 2 : ĠVector < Double >): ĠVector < Double > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġu Ġ= Ġv 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġv 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( u . size Ġ!= Ġv . size ) Ġ{ Ġ" a . size Ġ!= Ġb . size !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Ġ= Ġu . norm Sq () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb Ġ= Ġv . norm Sq () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a Ġ< Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġa ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġt 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġu . inner ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġ( n Ġ/ Ġb ). round To Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠT Ġ= Ġa Ġ- Ġ 2 Ġ* Ġr Ġ* Ġn Ġ+ Ġr Ġ* Ġr Ġ* Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( T Ġ>= Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġu Ġ- Ġv . multiply ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcopy Of ( v : ĠGen Vector < T >, Ġmc : ĠRing Calculator < T >): ĠMutable Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector . copyOf ( v , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġcopy Ġof Ġthe Ġgiven Ġgeneric Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T , ĠV > Ġcopy Of ( v : ĠV ): ĠMutable Vector < T > Ġwhere ĠV Ġ: ĠGen Vector < T >, ĠV Ġ: ĠCalculator Holder < T , ĠRing Calculator < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy Of ( v , Ġv . calculator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġis Linear Dependent ( vs : ĠList < Abstract Vector < T >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix . from Vectors ( vs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmatrix . rank () Ġ< Ġvs . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFinds Ġa Ġmax imal Ġlinear Ġindependent Ġsubset Ġfrom Ġthe Ġgiven Ġvectors Ġand ĊĠĠĠĠĠĠĠĠ Ġ* Ġreturn Ġthem Ġas Ġa Ġvector Ġbasis . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġmax In dependent ( vs : ĠList < Abstract Vector < T >> ): ĠVector Basis < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix . from Vectors ( vs ). to Mutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpivot s Ġ= ĠMatrix Impl . to Upper Triangle ( matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector Basis . create Base Without Check ( pivot s . map Ġ{ Ġcopy Of ( vs [ it ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġcalculator Ġfor Ġthe Ġgiven Ġvector . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcalculator For ( v : ĠVector < T >): ĠVector Cal Ring < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal Ġ= Ġv . calculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cal Ġis ĠField Calculator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcalculator ( v . size , Ġcal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector Cal Ring ( cal , Ġv . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcalculator ( size : ĠInt , Ġcal : ĠField Calculator < T >): ĠVector Cal Field < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector Cal Field ( cal , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcalculator ( size : ĠInt , Ġcal : ĠRing Calculator < T >): ĠVector Cal Ring < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector Cal Ring ( cal , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ internal Ġobject ĠVector Impl Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > Ġapply 2 ( x : ĠVector < T >, Ġy : ĠVector < T >, Ġf : Ġ( T , ĠT ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( x . is Same Size ( y )) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠArray < Any ? >( x . size ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ( x [ k ], Ġy [ k ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( x . calculator , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > Ġapply 1 ( x : ĠVector < T >, Ġf : Ġ( T ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray < Any ? >( x . size ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ( x [ k ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( x . calculator , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġadd ( x : ĠVector < T >, Ġy : ĠVector < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġx . calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 2 ( x , Ġy , Ġmc :: add ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġsubtract ( x : ĠVector < T >, Ġy : ĠVector < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġx . calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 2 ( x , Ġy , Ġmc :: subtract ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġneg ate ( x : ĠVector < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġx . calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( x , Ġmc :: neg ate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġmultiply ( x : ĠVector < T >, Ġk : ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġx . calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( x ) Ġ{ Ġmc . multiply ( k , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġdivide ( x : ĠVector < T >, Ġk : ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġx . calculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( x ) Ġ{ Ġmc . divide ( k , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġsum ( vs : ĠList < Vector < T >>, Ġsize : ĠInt , Ġcal : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( vs . all Ġ{ Ġit . size Ġ== Ġsize Ġ}) Ġ{ Ġ" Size Ġmismatch ! Ġ" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠA Vector . zero ( size , Ġcal ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġvs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġv ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ abstract Ġclass ĠMutable Vector < T >( mc : ĠRing Calculator < T >, Ġsize : ĠInt ) Ġ: ĠVector < T >( mc , Ġsize ) Ġ{ ĊĊĠĠĠ Ġabstract Ġoperator Ġfun Ġset ( i : ĠInt , Ġx : ĠT ) ĊĊĠĠĠ Ġopen Ġoperator Ġfun Ġplus Assign ( y : ĠVector < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ idx ] Ġ= Ġmc . add ( this [ idx ], Ġy [ idx ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġoperator Ġfun Ġminus Assign ( y : ĠVector < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ idx ] Ġ= Ġmc . subtract ( this [ idx ], Ġy [ idx ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġoperator Ġfun Ġtimes Assign ( k : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ idx ] Ġ= Ġmc . multiply ( k , Ġthis [ idx ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġoperator Ġfun Ġdiv Assign ( k : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ idx ] Ġ= Ġmc . divide ( this [ idx ], Ġk ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġthis Ġ= Ġthis Ġ+ Ġk Ġ* Ġy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Mul Assign ( k : ĠT , Ġy : ĠVector < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġcalculator . eval Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx [ i ] Ġ+= Ġk Ġ* Ġy [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġall Ġthe Ġelements Ġin - place Ġwith Ġthe Ġfunction Ġ[ f ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġtransform ( f : Ġ( T ) Ġ-> ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] Ġ= Ġf ( this [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ class ĠA Vector < T > Ċ internal Ġconstructor ( mc : ĠRing Calculator < T >, Ġval Ġdata : ĠArray < Any ?> ) ĊĠĠĠ Ġ: ĠMutable Vector < T >( mc , Ġdata . size ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġset ( i : ĠInt , Ġx : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata [ i ] Ġ= Ġx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< N > Ġmap To ( new Calculator : ĠEqual Predicate < N >, Ġmapper : ĠFunction < T , ĠN >): ĠA Vector < N > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray < Any ? >( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . apply ( data [ it ] Ġas ĠT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( new Calculator Ġas ĠRing Calculator , ĠnewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġelement Sequence (): ĠSequence < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . as Sequence () Ġas ĠSequence < T > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply All ( f : Ġ( T ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( this , Ġf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( i : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdata [ i ] Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġto List (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . asList () Ġas ĠList < T > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsum (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġvar Ġt Ġ= Ġthis [ 0 ] ĊĠĠĠĠĠĠĠ Ġcalculator . eval Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ+= Ġv [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( y : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġis ĠA Vector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapply 2 ( this , Ġy , Ġmc :: add ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . add ( y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġneg ate (): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( this , Ġmc :: neg ate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmultiply ( k : ĠT ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( this ) Ġ{ Ġmc . multiply ( k , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdivide ( k : ĠT ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator Ġas ĠField Calculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( this ) Ġ{ Ġmc . divide ( it , Ġk ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmultiply ( n : ĠLong ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠ Ġreturn Ġapply 1 ( this ) Ġ{ Ġx Ġ-> Ġmc . multiply Long ( x , Ġn ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize ( size : ĠInt ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata . copyOf ( size ) ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> Ġthis . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmc Ġ= Ġcalculator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . fill ( mc . zero , Ġthis . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( calculator , Ġresult ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > Ġapply 2 ( x : ĠA Vector < T >, Ġy : ĠA Vector < T >, Ġf : Ġ( T , ĠT ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx . check Same Size ( y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 1 Ġ= Ġx . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 2 Ġ= Ġy . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠArray < Any ? >( d 1 . size ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ( d 1 [ k ] Ġas ĠT , Ġd 2 [ k ] Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( x . calculator , ĠnewData ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< T > Ġapply 1 ( x : ĠA Vector < T >, Ġf : Ġ( T ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġx . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn data Ġ= ĠArray < Any ? >( data . size ) Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ( data [ k ] Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( x . calculator , Ġn data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġconstant ( x : ĠT , Ġsize : ĠInt , Ġmc : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠArray Sup . fill Arr ( size , Ġx , ĠAny :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( mc , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġzero ( size : ĠInt , Ġmc : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstant ( mc . zero , Ġsize , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġones ( size : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstant ( mc . one , Ġsize , Ġmc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( size : ĠInt , Ġmc : ĠRing Calculator < T >, Ġsupplier : Ġ( Int ) Ġ-> ĠT ): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠArray < Any ? >( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupplier ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( mc , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġof ( elements : ĠList < T >, Ġmc : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠA Vector ( mc , Ġelements . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcopy Of ( v : ĠGen Vector < T >, Ġmc : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( v Ġis ĠA Vector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Vector ( v . calculator , Ġv . data . clone ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠArray < Any ? >( v . size ) Ġ{ Ġv [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Vector ( mc , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcopy Of Range ( new Size : ĠInt , Ġv : ĠGen Vector < T >, Ġstart : ĠInt , Ġend : ĠInt , Ġdest Idx : ĠInt , Ġmc : ĠRing Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġzero ( new Size , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠA Vector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . data . copy Into ( result . data , Ġdest Idx , Ġstart , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstart Ġuntil Ġend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i Ġ+ Ġdest Idx ] Ġ= Ġv [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġunit Ġcolumn Ġvector Ġof Ġthe Ġgiven Ġlength . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġunit Vector ( length : ĠInt , Ġunit Index : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠA Vector < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġzero ( length , Ġmc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ unit Index ] Ġ= Ġmc . one ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġall Ġunit Ġvectors Ġof Ġthe Ġgiven Ġlength . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġunit Vectors ( length : ĠInt , Ġmc : ĠUnit Ring Calculator < T >): ĠList < A Vector < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġlength ). map Ġ{ Ġunit Vector ( length , Ġit , Ġmc ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠConverts Ġthis Ġvector Ġas Ġa Ġcolumn Ġmatrix Ġwhose Ġshape Ġis Ġ`( size , Ġ 1 )`. Ċ Ġ*/ Ċ fun Ġ< T > ĠVector < T >. as Column Matrix (): ĠMatrix < T > Ġ{ ĊĠĠĠ Ġreturn ĠMatrix . of ( size , Ġ 1 , Ġcalculator , Ġto List ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠConverts Ġthis Ġvector Ġas Ġa Ġrow Ġmatrix Ġwhose Ġshape Ġis Ġ`( 1 , Ġsize )`. Ċ Ġ*/ Ċ fun Ġ< T > ĠVector < T >. as Row Matrix (): ĠMatrix < T > Ġ{ ĊĠĠĠ Ġreturn ĠMatrix . of ( 1 , Ġsize , Ġcalculator , Ġto List ()) Ċ } Ċ Ċ open Ġclass ĠVector Cal Ring < T >( calculator : ĠRing Calculator < T >, Ġval Ġsize : ĠInt ) Ġ: ĠModule Calculator < T , ĠVector < T >> Ġ{ ĊĠĠĠ Ġopen Ġval Ġcal : ĠRing Calculator < T > Ġ= Ġcalculator ĊĊĊĠĠĠ Ġoverride Ġval Ġscalar Calculator : ĠRing Calculator < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcal ĊĊĠĠĠ Ġoverride Ġfun Ġis Equal ( x : ĠVector < T >, Ġy : ĠVector < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . value Equals ( y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġzero : ĠVector < T > Ġ= ĠVector . zero ( size , Ġcalculator ) ĊĊĠĠĠ Ġoverride Ġfun Ġneg ate ( x : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . neg ate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscalar Multiply ( k : ĠT , Ġv : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġv . multiply ( k ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( x : ĠVector < T >, Ġy : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . add ( y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubtract ( x : ĠVector < T >, Ġy : ĠVector < T >): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . subtract ( y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Zero ( x : ĠVector < T >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . is Zero () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsum ( ps : ĠList < Vector < T >> ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ps . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġzero ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠVector Impl . sum ( ps , Ġsize , Ġcal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmultiply Long ( x : ĠVector < T >, Ġn : ĠLong ): ĠVector < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx . multiply ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġval Ġnumber Class : ĠClass < Vector < T >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠVector :: class . java Ġas ĠClass < Vector < T >> Ċ } Ċ Ċ class ĠVector Cal Field < T >( override Ġval Ġcal : ĠField Calculator < T >, Ġsize : ĠInt ) ĊĠĠĠ Ġ: ĠVector Cal Ring < T >( cal , Ġsize ), ĠVector Space Calculator < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġscalar Calculator : ĠField Calculator < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcal ĊĊĠĠĠ Ġoverride Ġval Ġvector Length : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsize Ċ Ċ }