v0.3.0-dev-9 #324

Merged
altavir merged 265 commits from dev into master 2021-05-08 17:16:29 +03:00
5 changed files with 72 additions and 25 deletions
Showing only changes of commit 432f404d7c - Show all commits

View File

@ -1,12 +1,15 @@
# Module kmath-tensors # Module kmath-tensors
Common linear algebra operations on tensors. Common operations on tensors, the API consists of:
- [tensor algebra](src/commonMain/kotlin/space/kscience/kmath/tensors/api/TensorAlgebra.kt) : Basic linear algebra operations on tensors (plus, dot, etc.)
- [tensor algebra with broadcasting](src/commonMain/kotlin/space/kscience/kmath/tensors/core/algebras/BroadcastDoubleTensorAlgebra.kt) : Basic linear algebra operations implemented with broadcasting.
- [linear algebra operations](src/commonMain/kotlin/space/kscience/kmath/tensors/api/LinearOpsTensorAlgebra.kt) : Advanced linear algebra operations like LU decomposition, SVD, etc.
- [TensorAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/api/TensorAlgebra.kt) : Basic algebra operations on tensors (plus, dot, etc.)
- [TensorPartialDivisionAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/api/TensorPartialDivisionAlgebra.kt) : Emulates an algebra over a field
- [LinearOpsTensorAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/api/LinearOpsTensorAlgebra.kt) : Linear algebra operations including LU, QR, Cholesky LL and SVD decompositions
- [AnalyticTensorAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/api/AnalyticTensorAlgebra.kt) : Element-wise analytic operations
The library offers a multiplatform implementation for this interface over the `Double`'s. As the highlight, the user can find:
- [BroadcastDoubleTensorAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/core/algebras/BroadcastDoubleTensorAlgebra.kt) : Basic algebra operations implemented with broadcasting.
- [DoubleLinearOpsTensorAlgebra](src/commonMain/kotlin/space/kscience/kmath/tensors/core/algebras/DoubleLinearOpsTensorAlgebra.kt) : Includes the power method for SVD and the spectrum of symmetric matrices.
## Artifact: ## Artifact:
The Maven coordinates of this project are `space.kscience:kmath-tensors:0.3.0-dev-7`. The Maven coordinates of this project are `space.kscience:kmath-tensors:0.3.0-dev-7`.

View File

@ -5,59 +5,63 @@
package space.kscience.kmath.tensors.api package space.kscience.kmath.tensors.api
/**
* Element-wise analytic operations on [TensorStructure].
*
* @param T the type of items closed under analytic functions in the tensors.
*/
public interface AnalyticTensorAlgebra<T> : public interface AnalyticTensorAlgebra<T> :
TensorPartialDivisionAlgebra<T> { TensorPartialDivisionAlgebra<T> {
//https://pytorch.org/docs/stable/generated/torch.exp.html //For information: https://pytorch.org/docs/stable/generated/torch.exp.html
public fun TensorStructure<T>.exp(): TensorStructure<T> public fun TensorStructure<T>.exp(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.log.html //For information: https://pytorch.org/docs/stable/generated/torch.log.html
public fun TensorStructure<T>.log(): TensorStructure<T> public fun TensorStructure<T>.log(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.sqrt.html //For information: https://pytorch.org/docs/stable/generated/torch.sqrt.html
public fun TensorStructure<T>.sqrt(): TensorStructure<T> public fun TensorStructure<T>.sqrt(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.acos.html#torch.cos //For information: https://pytorch.org/docs/stable/generated/torch.acos.html#torch.cos
public fun TensorStructure<T>.cos(): TensorStructure<T> public fun TensorStructure<T>.cos(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.acos.html#torch.acos //For information: https://pytorch.org/docs/stable/generated/torch.acos.html#torch.acos
public fun TensorStructure<T>.acos(): TensorStructure<T> public fun TensorStructure<T>.acos(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.acosh.html#torch.cosh //For information: https://pytorch.org/docs/stable/generated/torch.acosh.html#torch.cosh
public fun TensorStructure<T>.cosh(): TensorStructure<T> public fun TensorStructure<T>.cosh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.acosh.html#torch.acosh //For information: https://pytorch.org/docs/stable/generated/torch.acosh.html#torch.acosh
public fun TensorStructure<T>.acosh(): TensorStructure<T> public fun TensorStructure<T>.acosh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.asin.html#torch.sin //For information: https://pytorch.org/docs/stable/generated/torch.asin.html#torch.sin
public fun TensorStructure<T>.sin(): TensorStructure<T> public fun TensorStructure<T>.sin(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.asin.html#torch.asin //For information: https://pytorch.org/docs/stable/generated/torch.asin.html#torch.asin
public fun TensorStructure<T>.asin(): TensorStructure<T> public fun TensorStructure<T>.asin(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.asin.html#torch.sinh //For information: https://pytorch.org/docs/stable/generated/torch.asin.html#torch.sinh
public fun TensorStructure<T>.sinh(): TensorStructure<T> public fun TensorStructure<T>.sinh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.asin.html#torch.asinh //For information: https://pytorch.org/docs/stable/generated/torch.asin.html#torch.asinh
public fun TensorStructure<T>.asinh(): TensorStructure<T> public fun TensorStructure<T>.asinh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.atan.html#torch.tan //For information: https://pytorch.org/docs/stable/generated/torch.atan.html#torch.tan
public fun TensorStructure<T>.tan(): TensorStructure<T> public fun TensorStructure<T>.tan(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.atan.html#torch.atan //https://pytorch.org/docs/stable/generated/torch.atan.html#torch.atan
public fun TensorStructure<T>.atan(): TensorStructure<T> public fun TensorStructure<T>.atan(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.atanh.html#torch.tanh //For information: https://pytorch.org/docs/stable/generated/torch.atanh.html#torch.tanh
public fun TensorStructure<T>.tanh(): TensorStructure<T> public fun TensorStructure<T>.tanh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.atanh.html#torch.atanh //For information: https://pytorch.org/docs/stable/generated/torch.atanh.html#torch.atanh
public fun TensorStructure<T>.atanh(): TensorStructure<T> public fun TensorStructure<T>.atanh(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.ceil.html#torch.ceil //For information: https://pytorch.org/docs/stable/generated/torch.ceil.html#torch.ceil
public fun TensorStructure<T>.ceil(): TensorStructure<T> public fun TensorStructure<T>.ceil(): TensorStructure<T>
//https://pytorch.org/docs/stable/generated/torch.floor.html#torch.floor //For information: https://pytorch.org/docs/stable/generated/torch.floor.html#torch.floor
public fun TensorStructure<T>.floor(): TensorStructure<T> public fun TensorStructure<T>.floor(): TensorStructure<T>
} }

View File

@ -8,7 +8,7 @@ package space.kscience.kmath.tensors.api
/** /**
* Common linear algebra operations. Operates on [TensorStructure]. * Common linear algebra operations. Operates on [TensorStructure].
* *
* @param T the type of items in the tensors. * @param T the type of items closed under division in the tensors.
*/ */
public interface LinearOpsTensorAlgebra<T> : public interface LinearOpsTensorAlgebra<T> :
TensorPartialDivisionAlgebra<T> { TensorPartialDivisionAlgebra<T> {

View File

@ -6,7 +6,7 @@
package space.kscience.kmath.tensors.api package space.kscience.kmath.tensors.api
/** /**
* Basic linear algebra operations on [TensorStructure]. * Algebra over a ring on [TensorStructure].
* For more information: https://proofwiki.org/wiki/Definition:Algebra_over_Ring * For more information: https://proofwiki.org/wiki/Definition:Algebra_over_Ring
* *
* @param T the type of items in the tensors. * @param T the type of items in the tensors.

View File

@ -5,12 +5,52 @@
package space.kscience.kmath.tensors.api package space.kscience.kmath.tensors.api
// https://proofwiki.org/wiki/Definition:Division_Algebra /**
* Algebra over a field with partial division on [TensorStructure].
* For more information: https://proofwiki.org/wiki/Definition:Division_Algebra
*
* @param T the type of items closed under division in the tensors.
*/
public interface TensorPartialDivisionAlgebra<T> : public interface TensorPartialDivisionAlgebra<T> :
TensorAlgebra<T> { TensorAlgebra<T> {
/**
* Each element of the tensor [other] is divided by this value.
* The resulting tensor is returned.
*
* @param other tensor to divide by.
* @return the division of this value by the tensor [other].
*/
public operator fun T.div(other: TensorStructure<T>): TensorStructure<T> public operator fun T.div(other: TensorStructure<T>): TensorStructure<T>
/**
* Divide by the scalar [value] each element of this tensor returns a new resulting tensor.
*
* @param value the number to divide by each element of this tensor.
* @return the division of this tensor by the [value].
*/
public operator fun TensorStructure<T>.div(value: T): TensorStructure<T> public operator fun TensorStructure<T>.div(value: T): TensorStructure<T>
/**
* Each element of the tensor [other] is divided by each element of this tensor.
* The resulting tensor is returned.
*
* @param other tensor to be divided by.
* @return the division of this tensor by [other].
*/
public operator fun TensorStructure<T>.div(other: TensorStructure<T>): TensorStructure<T> public operator fun TensorStructure<T>.div(other: TensorStructure<T>): TensorStructure<T>
/**
* Divides by the scalar [value] each element of this tensor.
*
* @param value the number to divide by each element of this tensor.
*/
public operator fun TensorStructure<T>.divAssign(value: T) public operator fun TensorStructure<T>.divAssign(value: T)
/**
* Each element of this tensor is divided by each element of the [other] tensor.
*
* @param other tensor to be divide by.
*/
public operator fun TensorStructure<T>.divAssign(other: TensorStructure<T>) public operator fun TensorStructure<T>.divAssign(other: TensorStructure<T>)
} }