2020-01-12 10:49:42 +03:00
|
|
|
[![JetBrains Research](https://jb.gg/badges/research.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
|
|
|
|
[![DOI](https://zenodo.org/badge/129486382.svg)](https://zenodo.org/badge/latestdoi/129486382)
|
2022-08-19 15:19:01 +03:00
|
|
|
![Gradle build](https://github.com/SciProgCentre/kmath/workflows/Gradle%20build/badge.svg)
|
2021-03-22 14:32:08 +03:00
|
|
|
[![Maven Central](https://img.shields.io/maven-central/v/space.kscience/kmath-core.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22space.kscience%22)
|
2024-02-18 15:05:56 +03:00
|
|
|
[![Space](https://img.shields.io/badge/dynamic/xml?color=orange&label=Space&query=//metadata/versioning/latest&url=https%3A%2F%2Fmaven.pkg.jetbrains.space%2Fmipt-npm%2Fp%2Fsci%2Fmaven%2Fspace%2Fkscience%2Fkmath-core%2Fmaven-metadata.xml)](https://maven.pkg.jetbrains.space/mipt-npm/p/sci/maven/space/kscience/)
|
2019-09-17 08:55:21 +03:00
|
|
|
|
2018-08-03 09:31:24 +03:00
|
|
|
# KMath
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
Could be pronounced as `key-math`. The **K**otlin **Math**ematics library was initially intended as a Kotlin-based
|
|
|
|
analog to Python's NumPy library. Later we found that kotlin is much more flexible language and allows superior
|
|
|
|
architecture designs. In contrast to `numpy` and `scipy` it is modular and has a lightweight core. The `numpy`-like
|
|
|
|
experience could be achieved with [kmath-for-real](/kmath-for-real) extension module.
|
2018-08-03 09:31:24 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
[Documentation site](https://SciProgCentre.github.io/kmath/)
|
2021-03-15 20:17:04 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
## Publications and talks
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2020-08-29 10:39:04 +03:00
|
|
|
* [A conceptual article about context-oriented design](https://proandroiddev.com/an-introduction-context-oriented-programming-in-kotlin-2e79d316b0a2)
|
|
|
|
* [Another article about context-oriented design](https://proandroiddev.com/diving-deeper-into-context-oriented-programming-in-kotlin-3ecb4ec38814)
|
|
|
|
* [ACAT 2019 conference paper](https://aip.scitation.org/doi/abs/10.1063/1.5130103)
|
2024-02-18 15:05:56 +03:00
|
|
|
* [A talk at KotlinConf 2019 about using kotlin for science](https://youtu.be/LI_5TZ7tnOE?si=4LknX41gl_YeUbIe)
|
|
|
|
* [A talk on architecture at Joker-2021 (in Russian)](https://youtu.be/1bZ2doHiRRM?si=9w953ro9yu98X_KJ)
|
|
|
|
* [The same talk in English](https://youtu.be/yP5DIc2fVwQ?si=louZzQ1dcXV6gP10)
|
|
|
|
* [A seminar on tensor API](https://youtu.be/0H99wUs0xTM?si=6c__04jrByFQtVpo)
|
2020-08-29 10:39:04 +03:00
|
|
|
|
2019-12-08 10:59:49 +03:00
|
|
|
# Goal
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2024-03-27 09:11:12 +03:00
|
|
|
* Provide a flexible and powerful API to work with mathematics abstractions in Kotlin-multiplatform (JVM, JS, Native and
|
|
|
|
Wasm).
|
2019-12-08 10:59:49 +03:00
|
|
|
* Provide basic multiplatform implementations for those abstractions (without significant performance optimization).
|
|
|
|
* Provide bindings and wrappers with those abstractions for popular optimized platform libraries.
|
|
|
|
|
|
|
|
## Non-goals
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
* Be like NumPy. It was the idea at the beginning, but we decided that we can do better in API.
|
2020-10-29 11:39:53 +03:00
|
|
|
* Provide the best performance out of the box. We have specialized libraries for that. Need only API wrappers for them.
|
2019-12-08 10:59:49 +03:00
|
|
|
* Cover all cases as immediately and in one bundle. We will modularize everything and add new features gradually.
|
2021-05-07 15:59:21 +03:00
|
|
|
* Provide specialized behavior in the core. API is made generic on purpose, so one needs to specialize for types, like
|
|
|
|
for `Double` in the core. For that we will have specialization modules like `kmath-for-real`, which will give better
|
|
|
|
experience for those, who want to work with specific types.
|
2019-12-08 10:59:49 +03:00
|
|
|
|
2021-01-30 20:12:14 +03:00
|
|
|
## Features and stability
|
2018-08-03 09:31:24 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
KMath is a modular library. Different modules provide different features with different API stability guarantees. All
|
|
|
|
core modules are released with the same version, but with different API change policy. The features are described in
|
|
|
|
module definitions below. The module stability could have the following levels:
|
|
|
|
|
|
|
|
* **PROTOTYPE**. On this level there are no compatibility guarantees. All methods and classes form those modules could
|
|
|
|
break any moment. You can still use it, but be sure to fix the specific version.
|
|
|
|
* **EXPERIMENTAL**. The general API is decided, but some changes could be made. Volatile API is marked
|
2021-08-12 16:37:53 +03:00
|
|
|
with `@UnstableKMathAPI` or other stability warning annotations.
|
2021-05-07 15:59:21 +03:00
|
|
|
* **DEVELOPMENT**. API breaking generally follows semantic versioning ideology. There could be changes in minor
|
|
|
|
versions, but not in patch versions. API is protected
|
|
|
|
with [binary-compatibility-validator](https://github.com/Kotlin/binary-compatibility-validator) tool.
|
2021-01-30 20:12:14 +03:00
|
|
|
* **STABLE**. The API stabilized. Breaking changes are allowed only in major releases.
|
2019-02-22 13:52:35 +03:00
|
|
|
|
2020-09-21 15:47:47 +03:00
|
|
|
## Modules
|
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
### [attributes-kt](attributes-kt)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> An API and basic implementation for arranging objects in a continuous memory block.
|
|
|
|
>
|
|
|
|
> **Maturity**: DEVELOPMENT
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [benchmarks](benchmarks)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-04-20 17:39:45 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [examples](examples)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-ast](kmath-ast)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-05-03 00:14:19 +03:00
|
|
|
> **Maturity**: EXPERIMENTAL
|
2020-12-22 14:02:02 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [expression-language](kmath-ast/src/commonMain/kotlin/space/kscience/kmath/ast/parser.kt) : Expression language and
|
|
|
|
its parser
|
|
|
|
> - [mst-jvm-codegen](kmath-ast/src/jvmMain/kotlin/space/kscience/kmath/asm/asm.kt) : Dynamic MST to JVM bytecode
|
|
|
|
compiler
|
2021-03-16 22:46:22 +03:00
|
|
|
> - [mst-js-codegen](kmath-ast/src/jsMain/kotlin/space/kscience/kmath/estree/estree.kt) : Dynamic MST to JS compiler
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [rendering](kmath-ast/src/commonMain/kotlin/space/kscience/kmath/ast/rendering/MathRenderer.kt) : Extendable MST
|
|
|
|
rendering
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-commons](kmath-commons)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Commons math binding for kmath
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-complex](kmath-complex)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-01-31 10:50:48 +03:00
|
|
|
> Complex numbers and quaternions.
|
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
>
|
|
|
|
> **Features:**
|
2022-07-20 08:22:41 +03:00
|
|
|
> - [complex](kmath-complex/src/commonMain/kotlin/space/kscience/kmath/complex/Complex.kt) : Complex numbers operations
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [quaternion](kmath-complex/src/commonMain/kotlin/space/kscience/kmath/complex/Quaternion.kt) : Quaternions and their
|
|
|
|
composition
|
2021-01-31 10:50:48 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-core](kmath-core)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
> Core classes, algebra definitions, basic linear algebra
|
|
|
|
>
|
|
|
|
> **Maturity**: DEVELOPMENT
|
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [algebras](kmath-core/src/commonMain/kotlin/space/kscience/kmath/operations/Algebra.kt) : Algebraic structures like
|
|
|
|
rings, spaces and fields.
|
|
|
|
> - [nd](kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/StructureND.kt) : Many-dimensional structures
|
|
|
|
and operations on them.
|
|
|
|
> - [linear](kmath-core/src/commonMain/kotlin/space/kscience/kmath/operations/Algebra.kt) : Basic linear algebra
|
|
|
|
operations (sums, products, etc.), backed by the `Space` API. Advanced linear algebra operations like matrix
|
|
|
|
inversion and LU decomposition.
|
2021-03-17 19:11:26 +03:00
|
|
|
> - [buffers](kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/Buffers.kt) : One-dimensional structure
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [expressions](kmath-core/src/commonMain/kotlin/space/kscience/kmath/expressions) : By writing a single mathematical
|
|
|
|
expression once, users will be able to apply different types of
|
|
|
|
objects to the expression by providing a context. Expressions can be used for a wide variety of purposes from high
|
|
|
|
performance calculations to code generation.
|
2021-03-16 22:46:22 +03:00
|
|
|
> - [domains](kmath-core/src/commonMain/kotlin/space/kscience/kmath/domains) : Domains
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [autodiff](kmath-core/src/commonMain/kotlin/space/kscience/kmath/expressions/SimpleAutoDiff.kt) : Automatic
|
|
|
|
differentiation
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-coroutines](kmath-coroutines)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-dimensions](kmath-dimensions)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> A proof of concept module for adding type-safe dimensions to structures
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2020-12-22 14:02:02 +03:00
|
|
|
> **Maturity**: PROTOTYPE
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-ejml](kmath-ejml)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-10-19 22:51:33 +03:00
|
|
|
>
|
2021-01-30 20:23:15 +03:00
|
|
|
> **Maturity**: PROTOTYPE
|
2021-03-22 14:32:08 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2021-05-03 00:14:19 +03:00
|
|
|
> - [ejml-vector](kmath-ejml/src/main/kotlin/space/kscience/kmath/ejml/EjmlVector.kt) : Point implementations.
|
|
|
|
> - [ejml-matrix](kmath-ejml/src/main/kotlin/space/kscience/kmath/ejml/EjmlMatrix.kt) : Matrix implementation.
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [ejml-linear-space](kmath-ejml/src/main/kotlin/space/kscience/kmath/ejml/EjmlLinearSpace.kt) : LinearSpace
|
|
|
|
implementations.
|
2020-10-19 22:51:33 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-for-real](kmath-for-real)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
> Extension module that should be used to achieve numpy-like behavior.
|
2024-03-27 09:11:12 +03:00
|
|
|
> All operations are specialized to work with `Double` numbers without declaring algebraic contexts.
|
|
|
|
> One can still use generic algebras though.
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
2020-11-29 13:32:20 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [DoubleVector](kmath-for-real/src/commonMain/kotlin/space/kscience/kmath/real/DoubleVector.kt) : Numpy-like
|
|
|
|
operations for Buffers/Points
|
|
|
|
> - [DoubleMatrix](kmath-for-real/src/commonMain/kotlin/space/kscience/kmath/real/DoubleMatrix.kt) : Numpy-like
|
|
|
|
operations for 2d real structures
|
2021-03-16 22:46:22 +03:00
|
|
|
> - [grids](kmath-for-real/src/commonMain/kotlin/space/kscience/kmath/structures/grids.kt) : Uniform grid generators
|
2020-11-29 13:32:20 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-functions](kmath-functions)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Functions, integration and interpolation
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-04-16 19:44:51 +03:00
|
|
|
> **Maturity**: EXPERIMENTAL
|
2021-01-30 20:12:14 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [piecewise](kmath-functions/src/commonMain/kotlin/space/kscience/kmath/functions/Piecewise.kt) : Piecewise
|
|
|
|
functions.
|
|
|
|
> - [polynomials](kmath-functions/src/commonMain/kotlin/space/kscience/kmath/functions/Polynomial.kt) : Polynomial
|
|
|
|
functions.
|
|
|
|
> - [linear interpolation](kmath-functions/src/commonMain/kotlin/space/kscience/kmath/interpolation/LinearInterpolator.kt) :
|
|
|
|
Linear XY interpolator.
|
|
|
|
> - [spline interpolation](kmath-functions/src/commonMain/kotlin/space/kscience/kmath/interpolation/SplineInterpolator.kt) :
|
|
|
|
Cubic spline XY interpolator.
|
2021-04-16 19:44:51 +03:00
|
|
|
> - [integration](kmath-functions/#) : Univariate and multivariate quadratures
|
2021-01-30 20:12:14 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-geometry](kmath-geometry)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-01-30 20:23:15 +03:00
|
|
|
> **Maturity**: PROTOTYPE
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-histograms](kmath-histograms)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-01-30 20:12:14 +03:00
|
|
|
> **Maturity**: PROTOTYPE
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-jafama](kmath-jafama)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Jafama integration module
|
2021-06-05 08:44:02 +03:00
|
|
|
>
|
2024-02-18 15:05:56 +03:00
|
|
|
> **Maturity**: DEPRECATED
|
2021-06-14 17:51:06 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [jafama-double](kmath-jafama/src/main/kotlin/space/kscience/kmath/jafama/) : Double ExtendedField implementations
|
|
|
|
based on Jafama
|
2021-06-05 08:44:02 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-jupyter](kmath-jupyter)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-05-03 00:14:19 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-kotlingrad](kmath-kotlingrad)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Kotlin∇ integration module
|
2020-11-29 13:32:20 +03:00
|
|
|
>
|
2021-05-09 12:40:10 +03:00
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [differentiable-mst-expression](kmath-kotlingrad/src/main/kotlin/space/kscience/kmath/kotlingrad/KotlingradExpression.kt) :
|
|
|
|
MST based DifferentiableExpression.
|
|
|
|
> - [scalars-adapters](kmath-kotlingrad/src/main/kotlin/space/kscience/kmath/kotlingrad/scalarsAdapters.kt) :
|
|
|
|
Conversions between Kotlin∇'s SFun and MST
|
2020-11-29 13:32:20 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-memory](kmath-memory)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-06-09 17:40:47 +03:00
|
|
|
> An API and basic implementation for arranging objects in a continuous memory block.
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-01-30 20:23:15 +03:00
|
|
|
> **Maturity**: DEVELOPMENT
|
2020-09-26 12:15:11 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-multik](kmath-multik)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> JetBrains Multik connector
|
2021-11-16 10:03:12 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-nd4j](kmath-nd4j)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> ND4J NDStructure implementation and according NDAlgebra classes
|
2020-10-29 11:39:53 +03:00
|
|
|
>
|
2024-02-18 15:05:56 +03:00
|
|
|
> **Maturity**: DEPRECATED
|
2020-10-29 11:39:53 +03:00
|
|
|
>
|
|
|
|
> **Features:**
|
2021-03-17 19:11:26 +03:00
|
|
|
> - [nd4jarraystructure](kmath-nd4j/#) : NDStructure wrapper for INDArray
|
|
|
|
> - [nd4jarrayrings](kmath-nd4j/#) : Rings over Nd4jArrayStructure of Int and Long
|
|
|
|
> - [nd4jarrayfields](kmath-nd4j/#) : Fields over Nd4jArrayStructure of Float and Double
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-optimization](kmath-optimization)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-11-16 10:03:12 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-stat](kmath-stat)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-symja](kmath-symja)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Symja integration module
|
2021-06-09 17:40:47 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-tensorflow](kmath-tensorflow)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Google tensorflow connector
|
2022-02-05 00:27:10 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-tensors](kmath-tensors)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2021-04-29 17:09:50 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: PROTOTYPE
|
|
|
|
>
|
|
|
|
> **Features:**
|
2024-03-27 09:11:12 +03:00
|
|
|
> - [tensor algebra](kmath-tensors/src/commonMain/kotlin/space/kscience/kmath/tensors/api/TensorAlgebra.kt) : Basic
|
|
|
|
linear algebra operations on tensors (plus, dot, etc.)
|
|
|
|
> - [tensor algebra with broadcasting](kmath-tensors/src/commonMain/kotlin/space/kscience/kmath/tensors/core/BroadcastDoubleTensorAlgebra.kt) :
|
|
|
|
Basic linear algebra operations implemented with broadcasting.
|
|
|
|
> - [linear algebra operations](kmath-tensors/src/commonMain/kotlin/space/kscience/kmath/tensors/api/LinearOpsTensorAlgebra.kt) :
|
|
|
|
Advanced linear algebra operations like LU decomposition, SVD, etc.
|
2021-04-29 17:09:50 +03:00
|
|
|
|
2022-03-31 22:23:34 +03:00
|
|
|
### [kmath-viktor](kmath-viktor)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
> Binding for https://github.com/JetBrains-Research/viktor
|
2020-09-26 12:15:11 +03:00
|
|
|
>
|
2021-01-30 20:23:15 +03:00
|
|
|
> **Maturity**: DEVELOPMENT
|
2020-09-25 10:13:38 +03:00
|
|
|
|
2022-07-20 08:22:41 +03:00
|
|
|
### [test-utils](test-utils)
|
2024-03-27 09:11:12 +03:00
|
|
|
|
2022-07-20 08:22:41 +03:00
|
|
|
>
|
|
|
|
> **Maturity**: EXPERIMENTAL
|
|
|
|
|
2018-08-03 09:31:24 +03:00
|
|
|
## Multi-platform support
|
2018-12-28 07:06:01 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
KMath is developed as a multi-platform library, which means that most of the interfaces are declared in the
|
|
|
|
[common source sets](/kmath-core/src/commonMain) and implemented there wherever it is possible. In some cases, features
|
|
|
|
are delegated to platform-specific implementations even if they could be provided in the common module for performance
|
2024-02-18 15:05:56 +03:00
|
|
|
reasons. Currently, Kotlin/JVM is the primary platform, however, Kotlin/Native and Kotlin/JS contributions and
|
2020-10-29 11:39:53 +03:00
|
|
|
feedback are also welcome.
|
2018-08-03 09:31:24 +03:00
|
|
|
|
|
|
|
## Performance
|
2018-12-28 07:06:01 +03:00
|
|
|
|
2024-03-27 09:11:12 +03:00
|
|
|
Calculation of performance is one of the major goals of KMath in the future, but in some cases it is impossible to
|
|
|
|
achieve both
|
2021-05-07 15:59:21 +03:00
|
|
|
performance and flexibility.
|
2020-10-29 11:39:53 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
We expect to focus on creating a convenient universal API first and then work on increasing performance for specific
|
2021-05-07 15:59:21 +03:00
|
|
|
cases. We expect the worst KMath benchmarks will perform better than native Python, but worse than optimized
|
2024-03-27 09:11:12 +03:00
|
|
|
native/SciPy (mostly due to boxing operations on primitive numbers). The best performance of optimized parts could be
|
|
|
|
better than SciPy.
|
2018-08-03 09:31:24 +03:00
|
|
|
|
2021-04-16 19:44:51 +03:00
|
|
|
## Requirements
|
|
|
|
|
2024-03-27 09:11:12 +03:00
|
|
|
KMath currently relies on JDK 11 for compilation and execution of Kotlin-JVM part. We recommend using GraalVM-CE or
|
|
|
|
Oracle GraalVM for execution to get better performance.
|
2021-04-16 19:44:51 +03:00
|
|
|
|
2020-10-29 11:39:53 +03:00
|
|
|
### Repositories
|
2018-09-30 17:18:04 +03:00
|
|
|
|
2021-05-07 15:59:21 +03:00
|
|
|
Release and development artifacts are accessible from mipt-npm [Space](https://www.jetbrains.com/space/)
|
|
|
|
repository `https://maven.pkg.jetbrains.space/mipt-npm/p/sci/maven` (see documentation of
|
|
|
|
[Kotlin Multiplatform](https://kotlinlang.org/docs/reference/multiplatform.html) for more details). The repository could
|
|
|
|
be reached through [repo.kotlin.link](https://repo.kotlin.link) proxy:
|
2018-09-30 17:18:04 +03:00
|
|
|
|
|
|
|
```kotlin
|
2020-10-29 11:39:53 +03:00
|
|
|
repositories {
|
2021-02-21 16:40:29 +03:00
|
|
|
maven("https://repo.kotlin.link")
|
2019-12-08 10:59:49 +03:00
|
|
|
}
|
2018-12-28 07:06:01 +03:00
|
|
|
|
2020-10-29 11:39:53 +03:00
|
|
|
dependencies {
|
2022-03-31 22:23:34 +03:00
|
|
|
api("space.kscience:kmath-core:$version")
|
|
|
|
// api("space.kscience:kmath-core-jvm:$version") for jvm-specific version
|
2019-12-08 10:59:49 +03:00
|
|
|
}
|
2018-09-30 17:18:04 +03:00
|
|
|
```
|
|
|
|
|
2018-08-03 09:31:24 +03:00
|
|
|
## Contributing
|
2018-12-28 07:06:01 +03:00
|
|
|
|
2024-02-18 15:05:56 +03:00
|
|
|
The project requires a lot of additional work. The most important thing we need is feedback about what features are
|
2024-03-27 09:11:12 +03:00
|
|
|
required the most. Feel free to create feature requests. We are also welcome to code contributions, especially in issues
|
|
|
|
marked
|
|
|
|
with [good first issue](hhttps://github.com/SciProgCentre/kmath/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
|
|
|
|
label.
|