/** Ċ Ġ* ĠThis Ġfile Ġcontains Ġtop - level Ġcommon Ġmathematical Ġfunctions Ġthat Ġoperate Ġon Ċ Ġ* ĠMat rices . ĠThese Ġdefinitions Ġfollow Ġnumpy Ġas Ġclose Ġas Ġpossible , Ġand Ġallow Ċ Ġ* Ġone Ġto Ġdo Ġthings Ġlike Ġcos ( randn ( 5 , 5 )) Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" Go lem ") Ċ @ file : Jvm Mult if ile Class Ċ Ċ package Ġgo lem Ċ Ċ import Ġgo lem . matrix .* Ċ import Ġgo lem . platform support .* Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġarc cos Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġa cos ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . acos ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġar cs in Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġas in ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . asin ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġar ct an Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġatan ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . atan ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġabsolute Ġvalue Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġabs ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . abs ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠRound s Ġeach Ġelement Ġto Ġthe Ġinteger Ġwhich Ġis Ġnearest Ġto Ġthe Ġelement Ġand Ġstill Ġless Ġthan Ġthe Ċ Ġ* Ġelement Ġ( i . e . Ġtrunc ation ). Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġceil ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . ceil ( it . toDouble ()). toDouble () Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġcos Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġcos ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . cos ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof ĠE . pow ( element ) Ġfor Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġexp ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . exp ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġnatural Ġlog arith m Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġlog ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . log ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġconsisting Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix Ġraised Ġto Ġthe Ġgiven Ġpower . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ġ@ param Ġnum Ġthe Ġpower Ġto Ġraise Ġthe Ġmatrix Ġto . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġe pow ( arr : ĠMatrix < Double >, Ġnum : ĠDouble ) Ġ= Ġarr . ep ow ( num ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġwhich Ġis Ġthe Ġinput Ġmatrix Ġmultip lied Ġby Ġitself Ġnum Ġtimes Ġ( NOT Ġelement wise Ġmultiplication !! ). Ċ Ġ* ĠFor Ġelement wise Ġsee Ġ[ ep ow ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ġ@ param Ġnum ĠThe Ġinteger Ġpower Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġnum Ġmatrix Ġmultip lies Ġof Ġthe Ġinput . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġpow ( arr : ĠMatrix < Double >, Ġnum : ĠInt ) Ġ= Ġarr . pow ( num ) Ċ Ċ /** Ċ Ġ* ĠCalculates Ġa Ġmatrix Ġconsisting Ġof Ġthe Ġsign Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . Ċ Ġ* ĠReturns Ġ- 1 Ġfor Ġpositive Ġvalues , Ġ- 1 Ġfor Ġnegative Ġvalues , Ġ 0 Ġfor Ġ 0 . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġsign ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ Ġsign um ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġsin Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġsin ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . sin ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġsqrt Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix . ĠDoes Ċ Ġ* Ġnot Ġyet Ġsupport Ġcomplex Ġnumbers . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġsqrt ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . sqrt ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġtan Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġtan ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . tan ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠRound s Ġeach Ġelement Ġto Ġthe Ġnearest Ġinteger Ġvalue . ĠFor Ġelements Ġexactly Ġbetween Ġintegers , Ċ Ġ* Ġchoose Ġthe Ġhighest Ġvalue . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġround ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . round ( it ). toDouble () Ġ} Ċ Ċ /** Ċ Ġ* ĠRound s Ġeach Ġelement Ġto Ġthe Ġinteger Ġwhich Ġis Ġnearest Ġto Ġthe Ġelement Ġand Ġstill Ġless Ġthan Ġthe Ċ Ġ* Ġelement Ġ( i . e . Ġtrunc ation ). Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ*/ Ċ fun Ġfloor ( arr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . floor ( it . toDouble ()). toDouble () Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġmatrix Ġof Ġthe Ġlog - base - b Ġof Ġeach Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ġ@ param Ġbase Ġthe Ġbase Ġof Ġthe Ġlog Ġ( i . e . Ġperforms Ġlog - base -[ base ] Ġof Ġ[ arr ] Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmatrix Ġconsisting Ġof Ġthe Ġoperation Ġperformed Ġelement - wise . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġlog b ( base : ĠInt , Ġarr : ĠMatrix < Double >) Ġ= Ġarr . map Mat Ġ{ ĠMath . log ( it ) Ġ/ ĠMath . log ( base . toDouble ()) Ġ} Ċ Ċ /** Ċ Ġ* ĠExtract s Ġthe Ġdiagonal Ġof Ġthe Ġmatrix . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return Ġa ĠN x 1 Ġcolumn Ġvector . Ċ Ġ*/ Ċ fun Ġdiag ( arr : ĠMatrix < Double >) Ġ= Ġarr . diag (). as Col Vector () Ċ Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġcumulative Ġ( ongo ing ) Ġsum Ġof Ġa Ġmatrix 's Ġelements . ĠFor Ġexample , Ċ Ġ* Ġ``` cum sum ( mat [ 1 , 2 , 3 ]) ``` Ġwould Ġreturn Ġ``` mat [ 1 , 3 , 6 ] ``` . Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠThe Ġmatrix Ġto Ġcalculate Ġthe Ġcum sum Ġon . ĠSum Ġwill Ġbe Ġcomputed Ġin Ġrow - major Ġorder . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ 1 x ( arr . num Rows * arr . num Cols ) Ġvector Ġstoring Ġthe Ġongoing Ġcum sum . Ċ Ġ* Ċ Ġ*/ Ċ fun Ġcum sum ( arr : ĠMatrix < Double >) Ġ= Ġarr . cum Sum () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġmax Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġmax ( arr : ĠMatrix < Double >) Ġ= Ġarr . max () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġmean Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġmean ( arr : ĠMatrix < Double >) Ġ= Ġarr . mean () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġmin Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġmin ( arr : ĠMatrix < Double >) Ġ= Ġarr . min () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġindex Ġof Ġthe Ġmax Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġarg Max ( arr : ĠMatrix < Double >) Ġ= Ġarr . arg Max () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġindex Ġof Ġthe Ġmin Ġelement Ġin Ġthe Ġinput Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠAn Ġar bitr arily Ġsized Ġmatrix Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġarg Min ( arr : ĠMatrix < Double >) Ġ= Ġarr . arg Min () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe ĠL 2 Ġnorm Ġof Ġthe Ġinput Ġvector Ġfor Ġvectors . Ċ Ġ* Ċ Ġ* ĠTODO : ĠGeneral ize Ġthis Ġto Ġmatrices Ċ Ġ* Ċ Ġ* Ġ@ param Ġarr ĠA ĠN x 1 Ġor Ġ 1 x N Ġvector Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġmaximum Ġvalue Ċ Ġ* Ċ Ġ*/ Ċ fun Ġnorm ( arr : ĠMatrix < Double >) Ġ= Ġarr . norm () Ċ Ċ // ĠAdv Ġfuncs Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġmatrix Ġexponential Ġof Ġthe Ġinput Ġmatrix . ĠNote Ġthat Ġthis Ġis Ċ Ġ* ĠNOT Ġthe Ġsame Ġthing Ġas Ġthe Ġelement wise Ġexponential Ġfunction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠA ĠThe Ġinput Ġmatrix Ċ Ġ* Ġ@ return Ġe Ġto Ġthe ĠA Ċ Ġ*/ Ċ fun Ġexp m ( A : ĠMatrix < Double >) Ġ= ĠA . exp m () Ċ Ċ /** Ċ Ġ* ĠConverts Ġa Ġ 3 x 1 Ġor Ġ 1 x 3 Ġvector Ġof Ġangles Ġinto Ġthe Ġskew Ġsymmetric Ġmatrix Ċ Ġ* Ġequivalent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġangles ĠThe Ġinput Ġmatrix Ċ Ġ* Ġ@ Return Ġ 3 x 3 Ġskew Ġsymmetric Ġmatrix Ċ Ġ*/ Ċ fun Ġskew ( angles : ĠMatrix < Double >): ĠMatrix < Double > Ġ{ ĊĠĠĠ Ġvar Ġs Ġ= Ġmat Ġ[ 0 , Ġ- angles [ 2 ], Ġangles [ 1 ] Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangles [ 2 ], Ġ 0 , Ġ- angles [ 0 ] Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- angles [ 1 ], Ġangles [ 0 ], Ġ 0 ] ĊĠĠĠ Ġreturn Ġs Ċ } Ċ Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġcross Ġproduct Ġof Ġtwo Ġvectors Ċ Ġ*/ Ċ fun Ġcross ( vec 1 : ĠMatrix < Double >, Ġvec 2 : ĠMatrix < Double >) Ġ= Ġskew ( vec 1 ) Ġ* Ġvec 2 Ċ Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġcross Ġproduct Ġof Ġtwo Ġvectors Ċ Ġ*/ Ċ fun Ġdot ( vec 1 : ĠMatrix < Double >, Ġvec 2 : ĠMatrix < Double >) Ġ= Ġ( vec 1 . as Row Vector () Ġ* Ġvec 2 . as Col Vector ())[ 0 ] Ċ Ċ fun Ġh stack ( var arg Ġarr s : ĠMatrix < Double >): ĠMatrix < Double > Ġ{ ĊĠĠĠ Ġval Ġout Rows Ġ= Ġarr s [ 0 ]. num Rows () ĊĠĠĠ Ġvar Ġout Cols Ġ= Ġ 0 ĊĠĠĠ Ġarr s . forEach Ġ{ Ġif Ġ( it . num Rows () Ġ!= Ġout Rows ) Ġthrow ĠIllegalArgumentException (" All Ġmatrices Ġpassed Ġto Ġh stack Ġmust Ġhave Ġthe Ġsame Ġnumber Ġof Ġrows .") Ġ} ĊĠĠĠ Ġarr s . forEach Ġ{ Ġout Cols Ġ+= Ġit . num Cols () Ġ} ĊĊĠĠĠ Ġvar Ġout Ġ= Ġzeros ( out Rows , Ġout Cols ) ĊĠĠĠ Ġvar Ġcursor Ġ= Ġ 0 ĊĠĠĠ Ġarr s . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġout [ 0 .. out Rows Ġ- Ġ 1 , Ġcursor .. ( cursor Ġ+ Ġit . num Cols () Ġ- Ġ 1 )] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġcursor Ġ+= Ġit . num Cols () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġout Ċ } Ċ Ċ fun Ġv stack ( var arg Ġarr s : ĠMatrix < Double >): ĠMatrix < Double > Ġ{ ĊĠĠĠ Ġval Ġout Cols Ġ= Ġarr s [ 0 ]. num Cols () ĊĠĠĠ Ġvar Ġout Rows Ġ= Ġ 0 ĊĠĠĠ Ġarr s . forEach Ġ{ Ġif Ġ( it . num Cols () Ġ!= Ġout Cols ) Ġthrow ĠIllegalArgumentException (" All Ġmatrices Ġpassed Ġto Ġv stack Ġmust Ġhave Ġthe Ġsame Ġnumber Ġof Ġcols .") Ġ} ĊĠĠĠ Ġarr s . forEach Ġ{ Ġout Rows Ġ+= Ġit . num Rows () Ġ} ĊĊĠĠĠ Ġvar Ġout Ġ= Ġzeros ( out Rows , Ġout Cols ) ĊĠĠĠ Ġvar Ġcursor Ġ= Ġ 0 ĊĠĠĠ Ġarr s . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġout [ cursor .. ( cursor Ġ+ Ġit . num Rows () Ġ- Ġ 1 ), Ġ 0 .. out Cols Ġ- Ġ 1 ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġcursor Ġ+= Ġit . num Rows () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġout Ċ } Ċ Ċ // ĠTODO : Ċ // fun Ġfft ( arr : ĠMatrix ) Ċ