/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin x . mult ik . api Ċ Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . Mult ik . engine Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . Mult ik . engines Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . Mult ik . linalg Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . Mult ik . math Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . Mult ik . stat Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . linalg . Lin Alg Ċ import Ġorg . jetbrains . kotlin x . mult ik . api . math . Math Ċ Ċ /** Ċ Ġ* ĠA bb re vi ated Ġname Ġfor Ġ[ Mult ik ]. Ċ Ġ*/ Ċ public Ġtype alias Ġmk Ġ= ĠMult ik ĊĊ Ċ /** Ċ Ġ* ĠThe Ġbasic Ġobject Ġthrough Ġwhich Ġcalls Ġall Ġndarray Ġfunctions . ĠG ives Ġaccess Ġto Ġndarray Ġcreation Ġand Ġinterfaces Ġ[ Math ], Ċ Ġ* Ġ[ Lin Alg ] Ġand Ġ[ Statistics ]. Ċ Ġ* ĠCalling Ġ[ Mult ik ] Ġwill Ġload Ġthe Ġengine . ĠThe Ġdefault Ġis Ġ" DEFAULT ". Ċ Ġ* ĠIf Ġno Ġengine Ġis Ġfound , Ġthen Ġan Ġexception Ġis Ġthrown Ġonly Ġwhen Ġyou Ġcall Ġan Ġimplementation Ġthat Ġrequires Ġthe Ġengine . Ċ Ġ* Ċ Ġ* ĠNote : ĠThrough Ġ[ Mult ik ], Ġyou Ġcan Ġset Ġyour Ġown Ġinterface Ġimplementation . Ċ Ġ* Ċ Ġ* Ġ@ property Ġengine Ġcurrently Ġused Ġengine . Ċ Ġ* Ġ@ property Ġengines Ġlist Ġof Ġengines . Ċ Ġ* Ġ@ property Ġmath Ġreturns Ġthe Ġ[ Math ] Ġimplementation Ġof Ġthe Ġcorresponding Ġengine . Ċ Ġ* Ġ@ property Ġl inalg Ġreturns Ġthe Ġ[ Lin Alg ] Ġimplementation Ġof Ġthe Ġcorresponding Ġengine . Ċ Ġ* Ġ@ property Ġstat Ġreturns Ġthe Ġ[ Statistics ] Ġimplementation Ġof Ġthe Ġcorresponding Ġengine . Ċ Ġ*/ Ċ public Ġobject ĠMult ik Ġ{ ĊĠĠĠ Ġpublic Ġval Ġengine : ĠString ? Ġget () Ġ= ĠEngine . getDefault Engine () ĊĊĠĠĠ Ġprivate Ġval Ġ_ engines : ĠMutable Map < String , ĠEngine Type > Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠ Ġ" DEFAULT " Ġto ĠDefault Engine Type , ĊĠĠĠĠĠĠĠ Ġ" JVM " Ġto ĠJ vm Engine Type , ĊĠĠĠĠĠĠĠ Ġ" NATIVE " Ġto ĠNative Engine Type ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġpublic Ġval Ġengines : ĠMap < String , ĠEngine Type > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ engines ĊĊĠĠĠ Ġpublic Ġval Ġmath : ĠMath Ġget () Ġ= ĠEngine . get Math () ĊĠĠĠ Ġpublic Ġval Ġl inalg : ĠLin Alg Ġget () Ġ= ĠEngine . get Lin Alg () ĊĠĠĠ Ġpublic Ġval Ġstat : ĠStatistics Ġget () Ġ= ĠEngine . get Statistics () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġengine Ġto Ġ[ engines ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġadd Engine ( type : ĠEngine Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ engines . put If Absent ( type . name , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġengine Ġof Ġtype Ġ[ type ] Ġas Ġthe Ġcurrent Ġimplementation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġset Engine ( type : ĠEngine Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type . name Ġin Ġengines ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEngine . setDefault Engine ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġlist Ġof Ġ[ elements ]. ĠS ugar Ġfor Ġeasy Ġarray Ġcreation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġ< T > Ġget ( var arg Ġelements : ĠT ): ĠList < T > Ġ= Ġelements . toList () Ċ } Ċ