From 4ab2244ac93662ac24b64b3ff860b3367a13ef60 Mon Sep 17 00:00:00 2001
From: Alexander Nozik <altavir@gmail.com>
Date: Tue, 9 May 2023 19:44:39 +0300
Subject: [PATCH] update space automation

---
 CHANGELOG.md                                  |   2 +-
 .../kotlin/space/kscience/kmath/ast/utils.kt  |   2 +
 kmath-core/api/kmath-core.api                 | 893 ++++++++++++++++--
 .../kmath/structures/bufferPrimitiveAccess.kt |   1 -
 kmath-memory/api/kmath-memory.api             |  19 +-
 kmath-viktor/api/kmath-viktor.api             |   8 +-
 6 files changed, 821 insertions(+), 104 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 998e6daae..2f011881f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,7 +14,7 @@
 
 ### Security
 
-## 0.3.1-dev-RC - 2023-04-09
+## 0.3.1 - 2023-04-09
 
 ### Added
 - Wasm support for `memory`, `core`, `complex` and `functions` modules.
diff --git a/kmath-ast/src/jvmTest/kotlin/space/kscience/kmath/ast/utils.kt b/kmath-ast/src/jvmTest/kotlin/space/kscience/kmath/ast/utils.kt
index 9f0fb33ab..be890273d 100644
--- a/kmath-ast/src/jvmTest/kotlin/space/kscience/kmath/ast/utils.kt
+++ b/kmath-ast/src/jvmTest/kotlin/space/kscience/kmath/ast/utils.kt
@@ -5,6 +5,7 @@
 
 package space.kscience.kmath.ast
 
+import space.kscience.kmath.UnstableKMathAPI
 import space.kscience.kmath.expressions.Expression
 import space.kscience.kmath.expressions.MST
 import space.kscience.kmath.expressions.Symbol
@@ -30,6 +31,7 @@ private object GenericAsmCompilerTestContext : CompilerTestContext {
         asmCompile(algebra as Algebra<Double>, arguments)
 }
 
+@OptIn(UnstableKMathAPI::class)
 private object PrimitiveAsmCompilerTestContext : CompilerTestContext {
     override fun MST.compileToExpression(algebra: IntRing): Expression<Int> = asmCompileToExpression(algebra)
     override fun MST.compile(algebra: IntRing, arguments: Map<Symbol, Int>): Int = asmCompile(algebra, arguments)
diff --git a/kmath-core/api/kmath-core.api b/kmath-core/api/kmath-core.api
index 737d33f1c..e3c33e8c6 100644
--- a/kmath-core/api/kmath-core.api
+++ b/kmath-core/api/kmath-core.api
@@ -1,27 +1,100 @@
+public abstract interface class space/kscience/kmath/data/ColumnarData {
+	public abstract fun get (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getSize ()I
+}
+
 public final class space/kscience/kmath/data/ColumnarDataKt {
+	public static final fun asColumnarData (Lspace/kscience/kmath/nd/Structure2D;Ljava/util/Map;)Lspace/kscience/kmath/data/ColumnarData;
 	public static final fun getIndices (Lspace/kscience/kmath/data/ColumnarData;)Lkotlin/ranges/IntRange;
 }
 
+public abstract interface class space/kscience/kmath/data/XYColumnarData : space/kscience/kmath/data/ColumnarData {
+	public static final field Companion Lspace/kscience/kmath/data/XYColumnarData$Companion;
+	public fun get (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getX ()Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getY ()Lspace/kscience/kmath/structures/Buffer;
+}
+
 public final class space/kscience/kmath/data/XYColumnarData$Companion {
+	public final fun of (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/data/XYColumnarData;
 }
 
 public final class space/kscience/kmath/data/XYColumnarDataKt {
+	public static final fun asXYData (Lspace/kscience/kmath/data/ColumnarData;Lspace/kscience/kmath/expressions/Symbol;Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/data/XYColumnarData;
+	public static final fun asXYData (Lspace/kscience/kmath/nd/Structure2D;II)Lspace/kscience/kmath/data/XYColumnarData;
 	public static synthetic fun asXYData$default (Lspace/kscience/kmath/nd/Structure2D;IIILjava/lang/Object;)Lspace/kscience/kmath/data/XYColumnarData;
 }
 
+public abstract interface class space/kscience/kmath/data/XYErrorColumnarData : space/kscience/kmath/data/XYColumnarData {
+	public static final field Companion Lspace/kscience/kmath/data/XYErrorColumnarData$Companion;
+	public fun get (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getYErr ()Lspace/kscience/kmath/structures/Buffer;
+}
+
 public final class space/kscience/kmath/data/XYErrorColumnarData$Companion {
 	public final fun of (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/data/XYErrorColumnarData;
 }
 
+public abstract interface class space/kscience/kmath/data/XYZColumnarData : space/kscience/kmath/data/XYColumnarData {
+	public fun get (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getZ ()Lspace/kscience/kmath/structures/Buffer;
+}
+
 public abstract interface class space/kscience/kmath/domains/Domain {
 	public abstract fun contains (Lspace/kscience/kmath/structures/Buffer;)Z
 	public abstract fun getDimension ()I
 }
 
+public abstract class space/kscience/kmath/domains/Domain1D : space/kscience/kmath/domains/Domain {
+	public fun <init> (Lkotlin/ranges/ClosedRange;)V
+	public final fun contains (Ljava/lang/Comparable;)Z
+	public fun contains (Lspace/kscience/kmath/structures/Buffer;)Z
+	public fun getDimension ()I
+	public final fun getRange ()Lkotlin/ranges/ClosedRange;
+}
+
 public final class space/kscience/kmath/domains/Domain1DKt {
 	public static final fun getCenter (Lspace/kscience/kmath/domains/Domain1D;)D
 }
 
+public abstract interface class space/kscience/kmath/domains/DoubleDomain : space/kscience/kmath/domains/Domain {
+	public abstract fun getLowerBound (I)D
+	public abstract fun getUpperBound (I)D
+	public abstract fun volume ()D
+}
+
+public final class space/kscience/kmath/domains/DoubleDomain1D : space/kscience/kmath/domains/Domain1D, space/kscience/kmath/domains/DoubleDomain {
+	public fun <init> (Lkotlin/ranges/ClosedFloatingPointRange;)V
+	public fun equals (Ljava/lang/Object;)Z
+	public final fun getDoubleRange ()Lkotlin/ranges/ClosedFloatingPointRange;
+	public fun getLowerBound (I)D
+	public fun getUpperBound (I)D
+	public fun hashCode ()I
+	public fun toString ()Ljava/lang/String;
+	public fun volume ()D
+}
+
+public final class space/kscience/kmath/domains/HyperSquareDomain : space/kscience/kmath/domains/DoubleDomain {
+	public fun <init> (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)V
+	public fun contains (Lspace/kscience/kmath/structures/Buffer;)Z
+	public final fun getCenter-Dv3HvWU ()[D
+	public fun getDimension ()I
+	public final fun getLower ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getLowerBound (I)D
+	public final fun getUpper ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getUpperBound (I)D
+	public fun volume ()D
+}
+
+public final class space/kscience/kmath/domains/UnconstrainedDomain : space/kscience/kmath/domains/DoubleDomain {
+	public fun <init> (I)V
+	public fun contains (Lspace/kscience/kmath/structures/Buffer;)Z
+	public fun getDimension ()I
+	public fun getLowerBound (I)D
+	public fun getUpperBound (I)D
+	public fun volume ()D
+}
+
 public abstract interface class space/kscience/kmath/expressions/AutoDiffProcessor {
 	public abstract fun differentiate (Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/expressions/DifferentiableExpression;
 }
@@ -31,6 +104,140 @@ public class space/kscience/kmath/expressions/AutoDiffValue {
 	public final fun getValue ()Ljava/lang/Object;
 }
 
+public abstract interface class space/kscience/kmath/expressions/DS {
+	public abstract fun getData ()Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun getDerivativeAlgebra ()Lspace/kscience/kmath/expressions/DSAlgebra;
+}
+
+public abstract class space/kscience/kmath/expressions/DSAlgebra : space/kscience/kmath/expressions/ExpressionAlgebra, space/kscience/kmath/expressions/SymbolIndexer {
+	public fun <init> (Lspace/kscience/kmath/operations/Ring;ILjava/util/Map;)V
+	protected final fun DS (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun bindSymbol (Ljava/lang/String;)Ljava/lang/Object;
+	public fun bindSymbol (Ljava/lang/String;)Lspace/kscience/kmath/expressions/DSAlgebra$DSSymbol;
+	public final fun bindSymbol (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/expressions/DSAlgebra$DSSymbol;
+	public synthetic fun bindSymbolOrNull (Ljava/lang/String;)Ljava/lang/Object;
+	public fun bindSymbolOrNull (Ljava/lang/String;)Lspace/kscience/kmath/expressions/DSAlgebra$DSSymbol;
+	public final fun bindSymbolOrNull (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/expressions/DSAlgebra$DSSymbol;
+	public synthetic fun const (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun const (Ljava/lang/Object;)Lspace/kscience/kmath/expressions/DS;
+	public final fun derivative (Lspace/kscience/kmath/expressions/DS;Ljava/util/List;)Ljava/lang/Object;
+	public final fun derivative (Lspace/kscience/kmath/expressions/DS;[Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public final fun getAlgebra ()Lspace/kscience/kmath/operations/Ring;
+	public final fun getCompiler ()Lspace/kscience/kmath/expressions/DSCompiler;
+	public final fun getOrder ()I
+	public fun getSymbols ()Ljava/util/List;
+	public final fun ofDerivatives ([Ljava/lang/Object;)Lspace/kscience/kmath/expressions/DS;
+	public final fun variable (ILjava/lang/Object;)Lspace/kscience/kmath/expressions/DS;
+}
+
+public final class space/kscience/kmath/expressions/DSAlgebra$DSSymbol : space/kscience/kmath/expressions/DS, space/kscience/kmath/expressions/Symbol {
+	public fun getData ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getDerivativeAlgebra ()Lspace/kscience/kmath/expressions/DSAlgebra;
+	public fun getIdentity ()Ljava/lang/String;
+}
+
+public final class space/kscience/kmath/expressions/DSAlgebraKt {
+	public static final fun derivative (Lspace/kscience/kmath/expressions/DS;Ljava/util/List;)Ljava/lang/Object;
+	public static final fun derivative (Lspace/kscience/kmath/expressions/DS;[Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public static final fun getAutodiff (Lkotlin/jvm/internal/DoubleCompanionObject;)Lspace/kscience/kmath/expressions/DSFieldProcessor;
+	public static final fun getValue (Lspace/kscience/kmath/expressions/DS;)Ljava/lang/Object;
+}
+
+public final class space/kscience/kmath/expressions/DSCompiler {
+	public final fun getAlgebra ()Lspace/kscience/kmath/operations/Algebra;
+	public final fun getFreeParameters ()I
+	public final fun getOrder ()I
+	public final fun getPartialDerivativeIndex ([I)I
+	public final fun getPartialDerivativeOrders (I)[I
+	public final fun getSize ()I
+	public final fun getSizes ()[[I
+}
+
+public final class space/kscience/kmath/expressions/DSField : space/kscience/kmath/expressions/DSRing, space/kscience/kmath/operations/ExtendedField {
+	public fun <init> (Lspace/kscience/kmath/operations/ExtendedField;ILjava/util/Map;)V
+	public synthetic fun acos (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun acos (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun acosh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun acosh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun asin (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun asin (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun asinh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun asinh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun atan (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun atan (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun atanh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun atanh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun cos (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun cos (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun cosh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun cosh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun divide (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun divide (Lspace/kscience/kmath/expressions/DS;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun exp (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun exp (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun ln (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun ln (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun number (Ljava/lang/Number;)Ljava/lang/Object;
+	public fun number (Ljava/lang/Number;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public fun power (Lspace/kscience/kmath/expressions/DS;Ljava/lang/Number;)Lspace/kscience/kmath/expressions/DS;
+	public final fun power (Lspace/kscience/kmath/expressions/DS;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun sin (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun sin (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun sinh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun sinh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun sqrt (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun sqrt (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun tan (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun tan (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun tanh (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun tanh (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+}
+
+public final class space/kscience/kmath/expressions/DSFieldExpression : space/kscience/kmath/expressions/DifferentiableExpression {
+	public fun <init> (Lspace/kscience/kmath/operations/ExtendedField;Lkotlin/jvm/functions/Function1;)V
+	public fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
+	public final fun getAlgebra ()Lspace/kscience/kmath/operations/ExtendedField;
+	public final fun getFunction ()Lkotlin/jvm/functions/Function1;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+}
+
+public final class space/kscience/kmath/expressions/DSFieldProcessor : space/kscience/kmath/expressions/AutoDiffProcessor {
+	public fun <init> (Lspace/kscience/kmath/operations/ExtendedField;)V
+	public fun differentiate (Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/expressions/DifferentiableExpression;
+	public final fun getAlgebra ()Lspace/kscience/kmath/operations/ExtendedField;
+}
+
+public class space/kscience/kmath/expressions/DSRing : space/kscience/kmath/expressions/DSAlgebra, space/kscience/kmath/operations/NumbersAddOps, space/kscience/kmath/operations/NumericAlgebra, space/kscience/kmath/operations/Ring, space/kscience/kmath/operations/ScaleOperations {
+	public fun <init> (Lspace/kscience/kmath/operations/Ring;ILjava/util/Map;)V
+	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun add (Lspace/kscience/kmath/expressions/DS;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun bindSymbolOrNull (Ljava/lang/String;)Ljava/lang/Object;
+	public fun bindSymbolOrNull (Ljava/lang/String;)Lspace/kscience/kmath/expressions/DSAlgebra$DSSymbol;
+	public final fun getElementBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
+	public synthetic fun getOne ()Ljava/lang/Object;
+	public fun getOne ()Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun getZero ()Ljava/lang/Object;
+	public fun getZero ()Lspace/kscience/kmath/expressions/DS;
+	protected final fun mapData (Lspace/kscience/kmath/expressions/DS;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/expressions/DS;
+	protected final fun mapDataIndexed (Lspace/kscience/kmath/expressions/DS;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun minus (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun minus (Ljava/lang/Number;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun multiply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun multiply (Lspace/kscience/kmath/expressions/DS;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun number (Ljava/lang/Number;)Ljava/lang/Object;
+	public fun number (Ljava/lang/Number;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun plus (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun plus (Ljava/lang/Number;Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun plus (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public fun plus (Lspace/kscience/kmath/expressions/DS;Ljava/lang/Number;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun scale (Ljava/lang/Object;D)Ljava/lang/Object;
+	public fun scale (Lspace/kscience/kmath/expressions/DS;D)Lspace/kscience/kmath/expressions/DS;
+	protected final fun transformDataBuffer (Lspace/kscience/kmath/expressions/DS;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/expressions/DS;
+	public synthetic fun unaryMinus (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun unaryMinus (Lspace/kscience/kmath/expressions/DS;)Lspace/kscience/kmath/expressions/DS;
+}
+
 public final class space/kscience/kmath/expressions/DerivationResult {
 	public fun <init> (Ljava/lang/Object;Ljava/util/Map;Lspace/kscience/kmath/operations/Field;)V
 	public final fun derivative (Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
@@ -39,6 +246,22 @@ public final class space/kscience/kmath/expressions/DerivationResult {
 	public final fun getValue ()Ljava/lang/Object;
 }
 
+public final class space/kscience/kmath/expressions/DerivativeStructureRingExpression : space/kscience/kmath/expressions/DifferentiableExpression {
+	public fun <init> (Lspace/kscience/kmath/operations/Ring;Lspace/kscience/kmath/structures/MutableBufferFactory;Lkotlin/jvm/functions/Function1;)V
+	public synthetic fun <init> (Lspace/kscience/kmath/operations/Ring;Lspace/kscience/kmath/structures/MutableBufferFactory;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
+	public final fun getAlgebra ()Lspace/kscience/kmath/operations/Ring;
+	public final fun getElementBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
+	public final fun getFunction ()Lkotlin/jvm/functions/Function1;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+}
+
+public final class space/kscience/kmath/expressions/DiffExpressionWithDefault : space/kscience/kmath/expressions/DifferentiableExpression {
+	public fun <init> (Lspace/kscience/kmath/expressions/DifferentiableExpression;Ljava/util/Map;)V
+	public fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+}
+
 public abstract interface class space/kscience/kmath/expressions/DifferentiableExpression : space/kscience/kmath/expressions/Expression {
 	public abstract fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
 }
@@ -52,6 +275,17 @@ public final class space/kscience/kmath/expressions/DifferentiableExpressionKt {
 	public static final fun derivative (Lspace/kscience/kmath/expressions/SpecialDifferentiableExpression;[Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/expressions/Expression;
 }
 
+public abstract interface class space/kscience/kmath/expressions/DoubleExpression : space/kscience/kmath/expressions/Expression {
+	public static final field Companion Lspace/kscience/kmath/expressions/DoubleExpression$Companion;
+	public abstract fun getIndexer ()Lspace/kscience/kmath/expressions/SymbolIndexer;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Double;
+	public synthetic fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+	public abstract fun invoke ([D)D
+}
+
+public final class space/kscience/kmath/expressions/DoubleExpression$Companion {
+}
+
 public abstract interface class space/kscience/kmath/expressions/Expression {
 	public abstract fun invoke (Ljava/util/Map;)Ljava/lang/Object;
 }
@@ -64,7 +298,23 @@ public final class space/kscience/kmath/expressions/ExpressionKt {
 	public static final fun callByString (Lspace/kscience/kmath/expressions/Expression;[Lkotlin/Pair;)Ljava/lang/Object;
 	public static final fun callBySymbol (Lspace/kscience/kmath/expressions/Expression;[Lkotlin/Pair;)Ljava/lang/Object;
 	public static final fun getBinding (Lspace/kscience/kmath/expressions/ExpressionAlgebra;)Lkotlin/properties/ReadOnlyProperty;
+	public static final fun invoke (Lspace/kscience/kmath/expressions/DoubleExpression;)D
+	public static final fun invoke (Lspace/kscience/kmath/expressions/DoubleExpression;[D)D
 	public static final fun invoke (Lspace/kscience/kmath/expressions/Expression;)Ljava/lang/Object;
+	public static final fun invoke (Lspace/kscience/kmath/expressions/IntExpression;)I
+	public static final fun invoke (Lspace/kscience/kmath/expressions/IntExpression;[I)I
+	public static final fun invoke (Lspace/kscience/kmath/expressions/LongExpression;)J
+	public static final fun invoke (Lspace/kscience/kmath/expressions/LongExpression;[J)J
+}
+
+public final class space/kscience/kmath/expressions/ExpressionWithDefault : space/kscience/kmath/expressions/Expression {
+	public fun <init> (Lspace/kscience/kmath/expressions/Expression;Ljava/util/Map;)V
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+}
+
+public final class space/kscience/kmath/expressions/ExpressionWithDefaultKt {
+	public static final fun withDefaultArgs (Lspace/kscience/kmath/expressions/DifferentiableExpression;Ljava/util/Map;)Lspace/kscience/kmath/expressions/DiffExpressionWithDefault;
+	public static final fun withDefaultArgs (Lspace/kscience/kmath/expressions/Expression;Ljava/util/Map;)Lspace/kscience/kmath/expressions/ExpressionWithDefault;
 }
 
 public abstract class space/kscience/kmath/expressions/FirstDerivativeExpression : space/kscience/kmath/expressions/DifferentiableExpression {
@@ -160,6 +410,28 @@ public class space/kscience/kmath/expressions/FunctionalExpressionRing : space/k
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
 }
 
+public abstract interface class space/kscience/kmath/expressions/IntExpression : space/kscience/kmath/expressions/Expression {
+	public static final field Companion Lspace/kscience/kmath/expressions/IntExpression$Companion;
+	public abstract fun getIndexer ()Lspace/kscience/kmath/expressions/SymbolIndexer;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Integer;
+	public synthetic fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+	public abstract fun invoke ([I)I
+}
+
+public final class space/kscience/kmath/expressions/IntExpression$Companion {
+}
+
+public abstract interface class space/kscience/kmath/expressions/LongExpression : space/kscience/kmath/expressions/Expression {
+	public static final field Companion Lspace/kscience/kmath/expressions/LongExpression$Companion;
+	public abstract fun getIndexer ()Lspace/kscience/kmath/expressions/SymbolIndexer;
+	public fun invoke (Ljava/util/Map;)Ljava/lang/Long;
+	public synthetic fun invoke (Ljava/util/Map;)Ljava/lang/Object;
+	public abstract fun invoke ([J)J
+}
+
+public final class space/kscience/kmath/expressions/LongExpression$Companion {
+}
+
 public abstract interface class space/kscience/kmath/expressions/MST {
 }
 
@@ -318,6 +590,22 @@ public final class space/kscience/kmath/expressions/MstGroup : space/kscience/km
 	public fun unaryPlus (Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST$Unary;
 }
 
+public final class space/kscience/kmath/expressions/MstLogicAlgebra : space/kscience/kmath/operations/LogicAlgebra {
+	public static final field INSTANCE Lspace/kscience/kmath/expressions/MstLogicAlgebra;
+	public synthetic fun and (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun and (Lspace/kscience/kmath/expressions/MST;Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST;
+	public synthetic fun bindSymbolOrNull (Ljava/lang/String;)Ljava/lang/Object;
+	public fun bindSymbolOrNull (Ljava/lang/String;)Lspace/kscience/kmath/expressions/MST;
+	public synthetic fun const (Z)Ljava/lang/Object;
+	public fun const (Z)Lspace/kscience/kmath/expressions/Symbol;
+	public synthetic fun not (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun not (Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST;
+	public synthetic fun or (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun or (Lspace/kscience/kmath/expressions/MST;Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST;
+	public synthetic fun xor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun xor (Lspace/kscience/kmath/expressions/MST;Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST;
+}
+
 public final class space/kscience/kmath/expressions/MstNumericAlgebra : space/kscience/kmath/operations/NumericAlgebra {
 	public static final field INSTANCE Lspace/kscience/kmath/expressions/MstNumericAlgebra;
 	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
@@ -356,6 +644,35 @@ public final class space/kscience/kmath/expressions/MstRing : space/kscience/kma
 	public fun unaryPlus (Lspace/kscience/kmath/expressions/MST;)Lspace/kscience/kmath/expressions/MST$Unary;
 }
 
+public final class space/kscience/kmath/expressions/NamedMatrix : space/kscience/kmath/nd/Structure2D {
+	public static final field Companion Lspace/kscience/kmath/expressions/NamedMatrix$Companion;
+	public fun <init> (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/expressions/SymbolIndexer;)V
+	public fun elements ()Lkotlin/sequences/Sequence;
+	public fun get (II)Ljava/lang/Object;
+	public final fun get (Lspace/kscience/kmath/expressions/Symbol;Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public fun get ([I)Ljava/lang/Object;
+	public fun getColNum ()I
+	public fun getColumns ()Ljava/util/List;
+	public fun getDimension ()I
+	public synthetic fun getFeature (Lkotlin/reflect/KClass;)Ljava/lang/Object;
+	public fun getFeature (Lkotlin/reflect/KClass;)Lspace/kscience/kmath/nd/StructureFeature;
+	public final fun getIndexer ()Lspace/kscience/kmath/expressions/SymbolIndexer;
+	public fun getIndices ()Lspace/kscience/kmath/nd/ShapeIndexer;
+	public fun getRowNum ()I
+	public fun getRows ()Ljava/util/List;
+	public fun getShape-IIYLAfE ()[I
+	public final fun getValues ()Lspace/kscience/kmath/nd/Structure2D;
+}
+
+public final class space/kscience/kmath/expressions/NamedMatrix$Companion {
+	public final fun toStringWithSymbols (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/expressions/SymbolIndexer;)Ljava/lang/String;
+}
+
+public final class space/kscience/kmath/expressions/NamedMatrixKt {
+	public static final fun named (Lspace/kscience/kmath/nd/Structure2D;Ljava/util/List;)Lspace/kscience/kmath/expressions/NamedMatrix;
+	public static final fun named (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/expressions/SymbolIndexer;)Lspace/kscience/kmath/expressions/NamedMatrix;
+}
+
 public final class space/kscience/kmath/expressions/SimpleAutoDiffExpression : space/kscience/kmath/expressions/FirstDerivativeExpression {
 	public fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function1;)V
 	public fun derivativeOrNull (Lspace/kscience/kmath/expressions/Symbol;)Lspace/kscience/kmath/expressions/Expression;
@@ -461,13 +778,22 @@ public final class space/kscience/kmath/expressions/SimpleAutoDiffKt {
 	public static final fun tanh (Lspace/kscience/kmath/expressions/SimpleAutoDiffField;Lspace/kscience/kmath/expressions/AutoDiffValue;)Lspace/kscience/kmath/expressions/AutoDiffValue;
 }
 
-public abstract interface class space/kscience/kmath/expressions/SpecialDifferentiableExpression : space/kscience/kmath/expressions/DifferentiableExpression {
-	public abstract fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
+public final class space/kscience/kmath/expressions/SimpleSymbolIndexer : space/kscience/kmath/expressions/SymbolIndexer {
+	public static final synthetic fun box-impl (Ljava/util/List;)Lspace/kscience/kmath/expressions/SimpleSymbolIndexer;
+	public static fun constructor-impl (Ljava/util/List;)Ljava/util/List;
+	public fun equals (Ljava/lang/Object;)Z
+	public static fun equals-impl (Ljava/util/List;Ljava/lang/Object;)Z
+	public static final fun equals-impl0 (Ljava/util/List;Ljava/util/List;)Z
+	public fun getSymbols ()Ljava/util/List;
+	public fun hashCode ()I
+	public static fun hashCode-impl (Ljava/util/List;)I
+	public fun toString ()Ljava/lang/String;
+	public static fun toString-impl (Ljava/util/List;)Ljava/lang/String;
+	public final synthetic fun unbox-impl ()Ljava/util/List;
 }
 
-public final class space/kscience/kmath/expressions/SpecialExpressionsKt {
-	public static final fun chiSquaredExpression (Lspace/kscience/kmath/expressions/AutoDiffProcessor;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/expressions/DifferentiableExpression;
-	public static final fun genericChiSquaredExpression (Lspace/kscience/kmath/expressions/AutoDiffProcessor;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/expressions/DifferentiableExpression;
+public abstract interface class space/kscience/kmath/expressions/SpecialDifferentiableExpression : space/kscience/kmath/expressions/DifferentiableExpression {
+	public abstract fun derivativeOrNull (Ljava/util/List;)Lspace/kscience/kmath/expressions/Expression;
 }
 
 public abstract interface class space/kscience/kmath/expressions/Symbol : space/kscience/kmath/expressions/MST {
@@ -484,7 +810,25 @@ public final class space/kscience/kmath/expressions/Symbol$Companion {
 	public final fun getZError ()Lspace/kscience/kmath/expressions/Symbol;
 }
 
+public abstract interface class space/kscience/kmath/expressions/SymbolIndexer {
+	public fun get (Ljava/util/List;Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public fun get (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/expressions/Symbol;Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public fun get (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public fun get ([DLspace/kscience/kmath/expressions/Symbol;)D
+	public fun get ([Ljava/lang/Object;Lspace/kscience/kmath/expressions/Symbol;)Ljava/lang/Object;
+	public abstract fun getSymbols ()Ljava/util/List;
+	public fun indexOf (Lspace/kscience/kmath/expressions/Symbol;)I
+	public fun toDoubleArray (Ljava/util/Map;)[D
+	public fun toList (Ljava/util/Map;)Ljava/util/List;
+	public fun toMap (Lspace/kscience/kmath/structures/Buffer;)Ljava/util/Map;
+	public fun toMap ([D)Ljava/util/Map;
+	public fun toPoint (Ljava/util/Map;Lspace/kscience/kmath/structures/BufferFactory;)Lspace/kscience/kmath/structures/Buffer;
+	public fun toPoint-Udx-57Q (Ljava/util/Map;)[D
+}
+
 public final class space/kscience/kmath/expressions/SymbolIndexerKt {
+	public static final fun withSymbols (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+	public static final fun withSymbols ([Lspace/kscience/kmath/expressions/Symbol;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 }
 
 public final class space/kscience/kmath/expressions/SymbolKt {
@@ -510,7 +854,7 @@ public final class space/kscience/kmath/linear/BufferedLinearSpace : space/kscie
 }
 
 public final class space/kscience/kmath/linear/BufferedLinearSpaceKt {
-	public static final fun linearSpace (Lspace/kscience/kmath/operations/Ring;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/linear/BufferedLinearSpace;
+	public static final fun getLinearSpace (Lspace/kscience/kmath/operations/Ring;)Lspace/kscience/kmath/linear/BufferedLinearSpace;
 }
 
 public abstract interface class space/kscience/kmath/linear/CholeskyDecompositionFeature : space/kscience/kmath/linear/MatrixFeature {
@@ -581,6 +925,7 @@ public abstract interface class space/kscience/kmath/linear/LinearSpace {
 	public static final field Companion Lspace/kscience/kmath/linear/LinearSpace$Companion;
 	public abstract fun buildMatrix (IILkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/Structure2D;
 	public abstract fun buildVector (ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/structures/Buffer;
+	public fun computeFeature (Lspace/kscience/kmath/nd/Structure2D;Lkotlin/reflect/KClass;)Lspace/kscience/kmath/nd/StructureFeature;
 	public fun dot (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/nd/Structure2D;)Lspace/kscience/kmath/nd/Structure2D;
 	public fun dot (Lspace/kscience/kmath/nd/Structure2D;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public abstract fun getElementAlgebra ()Lspace/kscience/kmath/operations/Ring;
@@ -597,9 +942,7 @@ public abstract interface class space/kscience/kmath/linear/LinearSpace {
 }
 
 public final class space/kscience/kmath/linear/LinearSpace$Companion {
-	public final fun buffered (Lspace/kscience/kmath/operations/Ring;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/linear/LinearSpace;
-	public static synthetic fun buffered$default (Lspace/kscience/kmath/linear/LinearSpace$Companion;Lspace/kscience/kmath/operations/Ring;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lspace/kscience/kmath/linear/LinearSpace;
-	public final fun getDouble ()Lspace/kscience/kmath/linear/LinearSpace;
+	public final fun buffered (Lspace/kscience/kmath/operations/Ring;)Lspace/kscience/kmath/linear/LinearSpace;
 }
 
 public final class space/kscience/kmath/linear/LinearSpaceKt {
@@ -628,11 +971,11 @@ public abstract interface class space/kscience/kmath/linear/LupDecompositionFeat
 
 public final class space/kscience/kmath/linear/LupDecompositionKt {
 	public static final fun abs (Lspace/kscience/kmath/linear/LinearSpace;Ljava/lang/Comparable;)Ljava/lang/Comparable;
-	public static final fun lup (Lspace/kscience/kmath/linear/LinearSpace;Lkotlin/jvm/functions/Function2;Lspace/kscience/kmath/nd/Structure2D;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/linear/LupDecomposition;
 	public static final fun lup (Lspace/kscience/kmath/linear/LinearSpace;Lspace/kscience/kmath/nd/Structure2D;D)Lspace/kscience/kmath/linear/LupDecomposition;
+	public static final fun lup (Lspace/kscience/kmath/linear/LinearSpace;Lspace/kscience/kmath/structures/MutableBufferFactory;Lspace/kscience/kmath/nd/Structure2D;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/linear/LupDecomposition;
 	public static synthetic fun lup$default (Lspace/kscience/kmath/linear/LinearSpace;Lspace/kscience/kmath/nd/Structure2D;DILjava/lang/Object;)Lspace/kscience/kmath/linear/LupDecomposition;
 	public static final fun lupSolver (Lspace/kscience/kmath/linear/LinearSpace;D)Lspace/kscience/kmath/linear/LinearSolver;
-	public static final fun lupSolver (Lspace/kscience/kmath/linear/LinearSpace;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/linear/LinearSolver;
+	public static final fun lupSolver (Lspace/kscience/kmath/linear/LinearSpace;Lspace/kscience/kmath/structures/MutableBufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/linear/LinearSolver;
 	public static synthetic fun lupSolver$default (Lspace/kscience/kmath/linear/LinearSpace;DILjava/lang/Object;)Lspace/kscience/kmath/linear/LinearSolver;
 }
 
@@ -647,9 +990,11 @@ public final class space/kscience/kmath/linear/MatrixBuilder {
 public final class space/kscience/kmath/linear/MatrixBuilderKt {
 	public static final fun column (Lspace/kscience/kmath/linear/LinearSpace;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/Structure2D;
 	public static final fun column (Lspace/kscience/kmath/linear/LinearSpace;[Ljava/lang/Object;)Lspace/kscience/kmath/nd/Structure2D;
+	public static final fun matrix (Lspace/kscience/kmath/linear/LinearSpace;II)Lspace/kscience/kmath/linear/MatrixBuilder;
 	public static final fun row (Lspace/kscience/kmath/linear/LinearSpace;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/Structure2D;
 	public static final fun row (Lspace/kscience/kmath/linear/LinearSpace;[Ljava/lang/Object;)Lspace/kscience/kmath/nd/Structure2D;
 	public static final fun symmetric (Lspace/kscience/kmath/linear/MatrixBuilder;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/Structure2D;
+	public static final fun vector (Lspace/kscience/kmath/linear/LinearSpace;[Ljava/lang/Object;)Lspace/kscience/kmath/structures/Buffer;
 }
 
 public abstract interface class space/kscience/kmath/linear/MatrixFeature : space/kscience/kmath/nd/StructureFeature {
@@ -673,7 +1018,7 @@ public final class space/kscience/kmath/linear/MatrixWrapper : space/kscience/km
 	public final fun getOrigin ()Lspace/kscience/kmath/nd/Structure2D;
 	public fun getRowNum ()I
 	public fun getRows ()Ljava/util/List;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 	public fun toString ()Ljava/lang/String;
 }
 
@@ -726,7 +1071,7 @@ public final class space/kscience/kmath/linear/VirtualMatrix : space/kscience/km
 	public fun getColNum ()I
 	public final fun getGenerator ()Lkotlin/jvm/functions/Function2;
 	public fun getRowNum ()I
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 }
 
 public final class space/kscience/kmath/linear/VirtualMatrixKt {
@@ -737,6 +1082,11 @@ public final class space/kscience/kmath/linear/ZeroFeature : space/kscience/kmat
 	public static final field INSTANCE Lspace/kscience/kmath/linear/ZeroFeature;
 }
 
+public final class space/kscience/kmath/misc/CollectionsKt {
+	public static final fun zipWithNextCircular (Ljava/util/List;)Ljava/util/List;
+	public static final fun zipWithNextCircular (Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
+}
+
 public final class space/kscience/kmath/misc/CumulativeKt {
 	public static final fun cumulative (Ljava/lang/Iterable;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Iterable;
 	public static final fun cumulative (Ljava/util/Iterator;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator;
@@ -745,6 +1095,7 @@ public final class space/kscience/kmath/misc/CumulativeKt {
 	public static final fun cumulativeSum (Ljava/lang/Iterable;Lspace/kscience/kmath/operations/Ring;)Ljava/lang/Iterable;
 	public static final fun cumulativeSum (Ljava/util/List;Lspace/kscience/kmath/operations/Ring;)Ljava/util/List;
 	public static final fun cumulativeSum (Lkotlin/sequences/Sequence;Lspace/kscience/kmath/operations/Ring;)Lkotlin/sequences/Sequence;
+	public static final fun cumulativeSum (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/operations/Ring;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun cumulativeSumOfDouble (Ljava/lang/Iterable;)Ljava/lang/Iterable;
 	public static final fun cumulativeSumOfDouble (Ljava/util/List;)Ljava/util/List;
 	public static final fun cumulativeSumOfDouble (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
@@ -811,11 +1162,12 @@ public final class space/kscience/kmath/misc/NumbersJVMKt {
 	public static final fun toIntExact (J)I
 }
 
-public abstract interface annotation class space/kscience/kmath/misc/PerformancePitfall : java/lang/annotation/Annotation {
-	public abstract fun message ()Ljava/lang/String;
-}
-
 public final class space/kscience/kmath/misc/SortingKt {
+	public static final fun indicesSorted (Lspace/kscience/kmath/structures/Buffer;)[I
+	public static final fun indicesSortedBy (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)[I
+	public static final fun indicesSortedByDescending (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)[I
+	public static final fun indicesSortedDescending (Lspace/kscience/kmath/structures/Buffer;)[I
+	public static final fun indicesSortedWith (Lspace/kscience/kmath/structures/Buffer;Ljava/util/Comparator;)[I
 	public static final fun requireSorted (Lspace/kscience/kmath/structures/Buffer;)V
 	public static final fun sorted (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun sortedBy (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
@@ -823,16 +1175,14 @@ public final class space/kscience/kmath/misc/SortingKt {
 	public static final fun sortedDescending (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 }
 
-public abstract interface annotation class space/kscience/kmath/misc/UnstableKMathAPI : java/lang/annotation/Annotation {
-}
-
 public abstract interface class space/kscience/kmath/nd/AlgebraND : space/kscience/kmath/operations/Algebra {
 	public static final field Companion Lspace/kscience/kmath/nd/AlgebraND$Companion;
 	public abstract fun getElementAlgebra ()Lspace/kscience/kmath/operations/Algebra;
+	public fun getFeature (Lspace/kscience/kmath/nd/StructureND;Lkotlin/reflect/KClass;)Lspace/kscience/kmath/nd/StructureFeature;
 	public fun invoke (Lkotlin/jvm/functions/Function1;Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/StructureND;
 	public fun map (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
 	public fun mapIndexed (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/StructureND;
-	public abstract fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
+	public abstract fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
 	public fun zip (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/StructureND;
 }
 
@@ -840,17 +1190,13 @@ public final class space/kscience/kmath/nd/AlgebraND$Companion {
 }
 
 public final class space/kscience/kmath/nd/AlgebraNDExtentionsKt {
-	public static final fun one (Lspace/kscience/kmath/nd/AlgebraND;[I)Lspace/kscience/kmath/nd/StructureND;
+	public static final fun one-waz_sdI (Lspace/kscience/kmath/nd/AlgebraND;[I)Lspace/kscience/kmath/nd/StructureND;
 	public static final fun oneVarArg (Lspace/kscience/kmath/nd/AlgebraND;I[I)Lspace/kscience/kmath/nd/StructureND;
 	public static final fun structureND (Lspace/kscience/kmath/nd/AlgebraND;I[ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
-	public static final fun zero (Lspace/kscience/kmath/nd/AlgebraND;[I)Lspace/kscience/kmath/nd/StructureND;
+	public static final fun zero-waz_sdI (Lspace/kscience/kmath/nd/AlgebraND;[I)Lspace/kscience/kmath/nd/StructureND;
 	public static final fun zeroVarArg (Lspace/kscience/kmath/nd/AlgebraND;I[I)Lspace/kscience/kmath/nd/StructureND;
 }
 
-public final class space/kscience/kmath/nd/AlgebraNDKt {
-	public static final fun Shape (I[I)[I
-}
-
 public abstract interface class space/kscience/kmath/nd/BufferAlgebraND : space/kscience/kmath/nd/AlgebraND {
 	public static final field Companion Lspace/kscience/kmath/nd/BufferAlgebraND$Companion;
 	public abstract fun getBufferAlgebra ()Lspace/kscience/kmath/operations/BufferAlgebra;
@@ -860,8 +1206,8 @@ public abstract interface class space/kscience/kmath/nd/BufferAlgebraND : space/
 	public synthetic fun map (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
 	public fun mapIndexed (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/BufferND;
 	public synthetic fun mapIndexed (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/StructureND;
-	public fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/BufferND;
-	public synthetic fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
+	public fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/BufferND;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
 	public fun toBufferND (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/BufferND;
 	public fun zip (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/BufferND;
 	public synthetic fun zip (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/nd/StructureND;
@@ -885,19 +1231,22 @@ public class space/kscience/kmath/nd/BufferND : space/kscience/kmath/nd/Structur
 	public fun get ([I)Ljava/lang/Object;
 	public fun getBuffer ()Lspace/kscience/kmath/structures/Buffer;
 	public fun getIndices ()Lspace/kscience/kmath/nd/ShapeIndexer;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 	public fun toString ()Ljava/lang/String;
 }
 
 public final class space/kscience/kmath/nd/BufferNDKt {
-	public static final fun mapToBuffer (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
+	public static final fun BufferND-bYNkpeI ([ILspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
+	public static synthetic fun BufferND-bYNkpeI$default ([ILspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/BufferND;
+	public static final fun MutableBufferND-bYNkpeI ([ILspace/kscience/kmath/structures/MutableBufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/MutableBufferND;
+	public static synthetic fun MutableBufferND-bYNkpeI$default ([ILspace/kscience/kmath/structures/MutableBufferFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/MutableBufferND;
 }
 
 public class space/kscience/kmath/nd/BufferedFieldOpsND : space/kscience/kmath/nd/BufferedRingOpsND, space/kscience/kmath/nd/FieldOpsND {
 	public fun <init> (Lspace/kscience/kmath/operations/BufferAlgebra;Lkotlin/jvm/functions/Function1;)V
 	public synthetic fun <init> (Lspace/kscience/kmath/operations/BufferAlgebra;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-	public fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
-	public synthetic fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function1;)V
+	public synthetic fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
 	public synthetic fun scale (Ljava/lang/Object;D)Ljava/lang/Object;
 	public fun scale (Lspace/kscience/kmath/nd/StructureND;D)Lspace/kscience/kmath/nd/StructureND;
 }
@@ -916,29 +1265,30 @@ public class space/kscience/kmath/nd/BufferedRingOpsND : space/kscience/kmath/nd
 	public synthetic fun <init> (Lspace/kscience/kmath/operations/BufferAlgebra;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
 }
 
-public final class space/kscience/kmath/nd/DefaultStrides : space/kscience/kmath/nd/Strides {
-	public static final field Companion Lspace/kscience/kmath/nd/DefaultStrides$Companion;
+public final class space/kscience/kmath/nd/ColumnStrides : space/kscience/kmath/nd/Strides {
+	public static final field Companion Lspace/kscience/kmath/nd/ColumnStrides$Companion;
 	public synthetic fun <init> ([ILkotlin/jvm/internal/DefaultConstructorMarker;)V
 	public fun equals (Ljava/lang/Object;)Z
 	public fun getLinearSize ()I
-	public fun getShape ()[I
-	public fun getStrides ()[I
+	public fun getShape-IIYLAfE ()[I
 	public fun hashCode ()I
 	public fun index (I)[I
 }
 
-public final class space/kscience/kmath/nd/DefaultStrides$Companion {
-	public final fun invoke ([I)Lspace/kscience/kmath/nd/Strides;
+public final class space/kscience/kmath/nd/ColumnStrides$Companion {
 }
 
-public final class space/kscience/kmath/nd/DoubleBufferND : space/kscience/kmath/nd/BufferND {
+public final class space/kscience/kmath/nd/DoubleBufferND : space/kscience/kmath/nd/MutableBufferND, space/kscience/kmath/nd/MutableStructureNDOfDouble {
 	public synthetic fun <init> (Lspace/kscience/kmath/nd/ShapeIndexer;[DLkotlin/jvm/internal/DefaultConstructorMarker;)V
 	public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/Buffer;
+	public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/MutableBuffer;
 	public fun getBuffer-Dv3HvWU ()[D
+	public fun getDouble ([I)D
+	public fun setDouble ([ID)V
 }
 
 public final class space/kscience/kmath/nd/DoubleFieldND : space/kscience/kmath/nd/DoubleFieldOpsND, space/kscience/kmath/nd/FieldND, space/kscience/kmath/operations/ExtendedField, space/kscience/kmath/operations/NumbersAddOps {
-	public fun <init> ([I)V
+	public synthetic fun <init> ([ILkotlin/jvm/internal/DefaultConstructorMarker;)V
 	public synthetic fun acosh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun acosh (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun asinh (Ljava/lang/Object;)Ljava/lang/Object;
@@ -947,13 +1297,14 @@ public final class space/kscience/kmath/nd/DoubleFieldND : space/kscience/kmath/
 	public fun atanh (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun cosh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun cosh (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 	public synthetic fun number (Ljava/lang/Number;)Ljava/lang/Object;
 	public fun number (Ljava/lang/Number;)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun power (Ljava/lang/Object;I)Ljava/lang/Object;
 	public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
 	public fun power (Lspace/kscience/kmath/nd/StructureND;I)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public fun power (Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Number;)Lspace/kscience/kmath/nd/DoubleBufferND;
+	public synthetic fun power (Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Number;)Lspace/kscience/kmath/nd/StructureND;
 	public synthetic fun power-Qn1smSk (Ljava/lang/Object;I)Ljava/lang/Object;
 	public fun power-Qn1smSk (Lspace/kscience/kmath/nd/StructureND;I)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun sinh (Ljava/lang/Object;)Ljava/lang/Object;
@@ -965,6 +1316,8 @@ public final class space/kscience/kmath/nd/DoubleFieldND : space/kscience/kmath/
 public final class space/kscience/kmath/nd/DoubleFieldNDKt {
 	public static final fun getNdAlgebra (Lspace/kscience/kmath/operations/DoubleField;)Lspace/kscience/kmath/nd/DoubleFieldOpsND;
 	public static final fun ndAlgebra (Lspace/kscience/kmath/operations/DoubleField;[I)Lspace/kscience/kmath/nd/DoubleFieldND;
+	public static final fun ndAlgebra-waz_sdI (Lspace/kscience/kmath/operations/DoubleField;[I)Lspace/kscience/kmath/nd/DoubleFieldND;
+	public static final fun withNdAlgebra (Lspace/kscience/kmath/operations/DoubleField;[ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 }
 
 public abstract class space/kscience/kmath/nd/DoubleFieldOpsND : space/kscience/kmath/nd/BufferedFieldOpsND, space/kscience/kmath/operations/ExtendedFieldOps, space/kscience/kmath/operations/ScaleOperations {
@@ -1021,6 +1374,8 @@ public abstract class space/kscience/kmath/nd/DoubleFieldOpsND : space/kscience/
 	public fun plus (Lspace/kscience/kmath/nd/StructureND;D)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun plus (Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Object;)Lspace/kscience/kmath/nd/StructureND;
 	public fun plus (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
+	public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public fun power (Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Number;)Lspace/kscience/kmath/nd/StructureND;
 	public synthetic fun scale (Ljava/lang/Object;D)Ljava/lang/Object;
 	public fun scale (Lspace/kscience/kmath/nd/StructureND;D)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun scale (Lspace/kscience/kmath/nd/StructureND;D)Lspace/kscience/kmath/nd/StructureND;
@@ -1028,9 +1383,9 @@ public abstract class space/kscience/kmath/nd/DoubleFieldOpsND : space/kscience/
 	public fun sin (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun sinh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun sinh (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
-	public synthetic fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/BufferND;
-	public fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/DoubleBufferND;
-	public synthetic fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/BufferND;
+	public fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/DoubleBufferND;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
 	public synthetic fun tan (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun tan (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/nd/DoubleBufferND;
 	public synthetic fun tanh (Ljava/lang/Object;)Ljava/lang/Object;
@@ -1087,7 +1442,41 @@ public abstract interface class space/kscience/kmath/nd/GroupOpsND : space/kscie
 public final class space/kscience/kmath/nd/GroupOpsND$Companion {
 }
 
-public final class space/kscience/kmath/nd/MutableBufferND : space/kscience/kmath/nd/BufferND, space/kscience/kmath/nd/MutableStructureND {
+public final class space/kscience/kmath/nd/IndexOutOfShapeException : java/lang/RuntimeException {
+	public synthetic fun <init> ([I[ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public final fun getIndex ()[I
+	public final fun getShape-IIYLAfE ()[I
+}
+
+public final class space/kscience/kmath/nd/IntBufferND : space/kscience/kmath/nd/MutableBufferND {
+	public synthetic fun <init> (Lspace/kscience/kmath/nd/ShapeIndexer;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/Buffer;
+	public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/MutableBuffer;
+	public fun getBuffer-ir4F4A8 ()[I
+}
+
+public final class space/kscience/kmath/nd/IntRingND : space/kscience/kmath/nd/IntRingOpsND, space/kscience/kmath/nd/RingND, space/kscience/kmath/operations/NumbersAddOps {
+	public synthetic fun <init> ([ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun getShape-IIYLAfE ()[I
+	public synthetic fun number (Ljava/lang/Number;)Ljava/lang/Object;
+	public fun number (Ljava/lang/Number;)Lspace/kscience/kmath/nd/BufferND;
+}
+
+public final class space/kscience/kmath/nd/IntRingNDKt {
+	public static final fun withNdAlgebra (Lspace/kscience/kmath/operations/IntRing;[ILkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+}
+
+public abstract class space/kscience/kmath/nd/IntRingOpsND : space/kscience/kmath/nd/BufferedRingOpsND {
+	public static final field Companion Lspace/kscience/kmath/nd/IntRingOpsND$Companion;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/BufferND;
+	public fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/IntBufferND;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
+}
+
+public final class space/kscience/kmath/nd/IntRingOpsND$Companion : space/kscience/kmath/nd/IntRingOpsND {
+}
+
+public class space/kscience/kmath/nd/MutableBufferND : space/kscience/kmath/nd/BufferND, space/kscience/kmath/nd/MutableStructureND {
 	public fun <init> (Lspace/kscience/kmath/nd/ShapeIndexer;Lspace/kscience/kmath/structures/MutableBuffer;)V
 	public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/Buffer;
 	public fun getBuffer ()Lspace/kscience/kmath/structures/MutableBuffer;
@@ -1108,6 +1497,46 @@ public abstract interface class space/kscience/kmath/nd/MutableStructureND : spa
 	public abstract fun set ([ILjava/lang/Object;)V
 }
 
+public abstract interface class space/kscience/kmath/nd/MutableStructureNDOfDouble : space/kscience/kmath/nd/MutableStructureND, space/kscience/kmath/nd/StructureNDOfDouble {
+	public abstract fun setDouble ([ID)V
+}
+
+public final class space/kscience/kmath/nd/OperationsNDKt {
+	public static final fun roll (Lspace/kscience/kmath/nd/StructureND;II)Lspace/kscience/kmath/nd/StructureND;
+	public static final fun roll (Lspace/kscience/kmath/nd/StructureND;Lkotlin/Pair;[Lkotlin/Pair;)Lspace/kscience/kmath/nd/StructureND;
+	public static synthetic fun roll$default (Lspace/kscience/kmath/nd/StructureND;IIILjava/lang/Object;)Lspace/kscience/kmath/nd/StructureND;
+}
+
+public final class space/kscience/kmath/nd/PermutedMutableStructureND : space/kscience/kmath/nd/MutableStructureND {
+	public synthetic fun <init> (Lspace/kscience/kmath/nd/MutableStructureND;[ILkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public synthetic fun <init> (Lspace/kscience/kmath/nd/MutableStructureND;[ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun get ([I)Ljava/lang/Object;
+	public final fun getOrigin ()Lspace/kscience/kmath/nd/MutableStructureND;
+	public final fun getPermutation ()Lkotlin/jvm/functions/Function1;
+	public fun getShape-IIYLAfE ()[I
+	public fun set ([ILjava/lang/Object;)V
+}
+
+public final class space/kscience/kmath/nd/PermutedStructureND : space/kscience/kmath/nd/StructureND {
+	public fun <init> (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function1;)V
+	public fun get ([I)Ljava/lang/Object;
+	public final fun getOrigin ()Lspace/kscience/kmath/nd/StructureND;
+	public final fun getPermutation ()Lkotlin/jvm/functions/Function1;
+	public fun getShape-IIYLAfE ()[I
+}
+
+public final class space/kscience/kmath/nd/PermutedStructureNDKt {
+	public static final fun permute (Lspace/kscience/kmath/nd/StructureND;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/PermutedStructureND;
+	public static final fun permute-_A0By-k (Lspace/kscience/kmath/nd/MutableStructureND;[ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/PermutedMutableStructureND;
+	public static synthetic fun permute-_A0By-k$default (Lspace/kscience/kmath/nd/MutableStructureND;[ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/PermutedMutableStructureND;
+}
+
+public final class space/kscience/kmath/nd/PrimitiveStructureNDKt {
+	public static final fun getDouble (Lspace/kscience/kmath/nd/MutableStructureND;[I)D
+	public static final fun getDouble (Lspace/kscience/kmath/nd/StructureND;[I)D
+	public static final fun getInt (Lspace/kscience/kmath/nd/StructureND;[I)I
+}
+
 public abstract interface class space/kscience/kmath/nd/RingND : space/kscience/kmath/nd/GroupND, space/kscience/kmath/nd/RingOpsND, space/kscience/kmath/nd/WithShape, space/kscience/kmath/operations/Ring {
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getOne ()Lspace/kscience/kmath/nd/StructureND;
@@ -1124,26 +1553,84 @@ public abstract interface class space/kscience/kmath/nd/RingOpsND : space/kscien
 public final class space/kscience/kmath/nd/RingOpsND$Companion {
 }
 
+public final class space/kscience/kmath/nd/RowStrides : space/kscience/kmath/nd/Strides {
+	public static final field Companion Lspace/kscience/kmath/nd/RowStrides$Companion;
+	public synthetic fun <init> ([ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun equals (Ljava/lang/Object;)Z
+	public fun getLinearSize ()I
+	public fun getShape-IIYLAfE ()[I
+	public fun hashCode ()I
+	public fun index (I)[I
+}
+
+public final class space/kscience/kmath/nd/RowStrides$Companion {
+}
+
 public abstract interface class space/kscience/kmath/nd/ShapeIndexer : java/lang/Iterable, kotlin/jvm/internal/markers/KMappedMarker {
 	public abstract fun asSequence ()Lkotlin/sequences/Sequence;
 	public abstract fun equals (Ljava/lang/Object;)Z
 	public abstract fun getLinearSize ()I
-	public abstract fun getShape ()[I
+	public abstract fun getShape-IIYLAfE ()[I
 	public abstract fun hashCode ()I
 	public abstract fun index (I)[I
 	public fun iterator ()Ljava/util/Iterator;
 	public abstract fun offset ([I)I
 }
 
+public final class space/kscience/kmath/nd/ShapeIndicesKt {
+	public static final fun Strides-dNlrn20 ([I)Lspace/kscience/kmath/nd/Strides;
+}
+
 public final class space/kscience/kmath/nd/ShapeMismatchException : java/lang/RuntimeException {
-	public fun <init> ([I[I)V
-	public final fun getActual ()[I
-	public final fun getExpected ()[I
+	public synthetic fun <init> ([I[ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public final fun getActual-IIYLAfE ()[I
+	public final fun getExpected-IIYLAfE ()[I
+}
+
+public final class space/kscience/kmath/nd/ShapeND {
+	public static final synthetic fun box-impl ([I)Lspace/kscience/kmath/nd/ShapeND;
+	public static fun constructor-impl ([I)[I
+	public fun equals (Ljava/lang/Object;)Z
+	public static fun equals-impl ([ILjava/lang/Object;)Z
+	public static final fun equals-impl0 ([I[I)Z
+	public static final fun get-impl ([II)I
+	public static final fun getSize-impl ([I)I
+	public fun hashCode ()I
+	public static fun hashCode-impl ([I)I
+	public fun toString ()Ljava/lang/String;
+	public static fun toString-impl ([I)Ljava/lang/String;
+	public final synthetic fun unbox-impl ()[I
+}
+
+public final class space/kscience/kmath/nd/ShapeNDKt {
+	public static final fun ShapeND (I[I)[I
+	public static final fun asArray-dNlrn20 ([I)[I
+	public static final fun asList-dNlrn20 ([I)Ljava/util/List;
+	public static final fun component1-dNlrn20 ([I)I
+	public static final fun component2-dNlrn20 ([I)I
+	public static final fun component3-dNlrn20 ([I)I
+	public static final fun contentEquals-9Nqdy04 ([I[I)Z
+	public static final fun contentHashCode-dNlrn20 ([I)I
+	public static final fun first-dNlrn20 ([I)I
+	public static final fun first-qL90JFI ([II)[I
+	public static final fun forEach-qL90JFI ([ILkotlin/jvm/functions/Function1;)V
+	public static final fun forEachIndexed-qL90JFI ([ILkotlin/jvm/functions/Function2;)V
+	public static final fun getIndices-dNlrn20 ([I)Lkotlin/ranges/IntRange;
+	public static final fun getLinearSize-dNlrn20 ([I)I
+	public static final fun isEmpty-dNlrn20 ([I)Z
+	public static final fun isNotEmpty-dNlrn20 ([I)Z
+	public static final fun last-dNlrn20 ([I)I
+	public static final fun last-qL90JFI ([II)[I
+	public static final fun plus-9Nqdy04 ([I[I)[I
+	public static final fun plus-qL90JFI ([I[I)[I
+	public static final fun slice-qL90JFI ([ILkotlin/ranges/IntRange;)[I
+	public static final fun toArray-dNlrn20 ([I)[I
+	public static final fun transposed-bYNkpeI ([III)[I
 }
 
 public final class space/kscience/kmath/nd/ShortRingND : space/kscience/kmath/nd/ShortRingOpsND, space/kscience/kmath/nd/RingND, space/kscience/kmath/operations/NumbersAddOps {
-	public fun <init> ([I)V
-	public fun getShape ()[I
+	public synthetic fun <init> ([ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun getShape-IIYLAfE ()[I
 	public synthetic fun number (Ljava/lang/Number;)Ljava/lang/Object;
 	public fun number (Ljava/lang/Number;)Lspace/kscience/kmath/nd/BufferND;
 }
@@ -1162,7 +1649,6 @@ public final class space/kscience/kmath/nd/ShortRingOpsND$Companion : space/ksci
 public abstract class space/kscience/kmath/nd/Strides : space/kscience/kmath/nd/ShapeIndexer {
 	public fun <init> ()V
 	public fun asSequence ()Lkotlin/sequences/Sequence;
-	public abstract fun getStrides ()[I
 	public fun offset ([I)I
 }
 
@@ -1191,7 +1677,7 @@ public abstract interface class space/kscience/kmath/nd/Structure2D : space/ksci
 	public fun getColumns ()Ljava/util/List;
 	public abstract fun getRowNum ()I
 	public fun getRows ()Ljava/util/List;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 }
 
 public final class space/kscience/kmath/nd/Structure2D$Companion {
@@ -1212,16 +1698,16 @@ public abstract interface class space/kscience/kmath/nd/StructureND : space/ksci
 	public fun getDimension ()I
 	public synthetic fun getFeature (Lkotlin/reflect/KClass;)Ljava/lang/Object;
 	public fun getFeature (Lkotlin/reflect/KClass;)Lspace/kscience/kmath/nd/StructureFeature;
-	public abstract fun getShape ()[I
+	public abstract fun getShape-IIYLAfE ()[I
 }
 
 public final class space/kscience/kmath/nd/StructureND$Companion {
 	public final fun auto (Lkotlin/reflect/KClass;Lspace/kscience/kmath/nd/Strides;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
 	public final fun auto (Lkotlin/reflect/KClass;[ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
-	public final fun buffered (Lspace/kscience/kmath/nd/Strides;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
-	public final fun buffered ([ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
-	public static synthetic fun buffered$default (Lspace/kscience/kmath/nd/StructureND$Companion;Lspace/kscience/kmath/nd/Strides;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/BufferND;
-	public static synthetic fun buffered$default (Lspace/kscience/kmath/nd/StructureND$Companion;[ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/BufferND;
+	public final fun buffered (Lspace/kscience/kmath/nd/Strides;Lspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
+	public static synthetic fun buffered$default (Lspace/kscience/kmath/nd/StructureND$Companion;Lspace/kscience/kmath/nd/Strides;Lspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/BufferND;
+	public final fun buffered-bYNkpeI ([ILspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/nd/BufferND;
+	public static synthetic fun buffered-bYNkpeI$default (Lspace/kscience/kmath/nd/StructureND$Companion;[ILspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lspace/kscience/kmath/nd/BufferND;
 	public final fun contentEquals (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;)Z
 	public final fun contentEquals (Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;D)Z
 	public static synthetic fun contentEquals$default (Lspace/kscience/kmath/nd/StructureND$Companion;Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;DILjava/lang/Object;)Z
@@ -1233,13 +1719,38 @@ public final class space/kscience/kmath/nd/StructureNDKt {
 	public static final fun contentEquals (Lspace/kscience/kmath/linear/LinearSpace;Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Comparable;)Z
 	public static final fun contentEquals (Lspace/kscience/kmath/nd/AlgebraND;Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;)Z
 	public static final fun contentEquals (Lspace/kscience/kmath/nd/GroupOpsND;Lspace/kscience/kmath/nd/StructureND;Lspace/kscience/kmath/nd/StructureND;Ljava/lang/Comparable;)Z
+	public static final fun get (Lspace/kscience/kmath/nd/StructureND;[I)D
+	public static final fun get (Lspace/kscience/kmath/nd/StructureND;[I)I
 	public static final fun get (Lspace/kscience/kmath/nd/StructureND;[I)Ljava/lang/Object;
-	public static final fun mapInPlace (Lspace/kscience/kmath/nd/MutableStructureND;Lkotlin/jvm/functions/Function2;)V
+	public static final fun set (Lspace/kscience/kmath/nd/MutableStructureND;[ILjava/lang/Object;)V
+}
+
+public abstract interface class space/kscience/kmath/nd/StructureNDOfDouble : space/kscience/kmath/nd/StructureND {
+	public abstract fun getDouble ([I)D
+}
+
+public abstract interface class space/kscience/kmath/nd/StructureNDOfInt : space/kscience/kmath/nd/StructureND {
+	public abstract fun getInt ([I)I
+}
+
+public final class space/kscience/kmath/nd/VirtualDoubleStructureND : space/kscience/kmath/nd/VirtualStructureND {
+	public synthetic fun <init> ([ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public final class space/kscience/kmath/nd/VirtualIntStructureND : space/kscience/kmath/nd/VirtualStructureND {
+	public synthetic fun <init> ([ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+}
+
+public class space/kscience/kmath/nd/VirtualStructureND : space/kscience/kmath/nd/StructureND {
+	public synthetic fun <init> ([ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun get ([I)Ljava/lang/Object;
+	public final fun getProducer ()Lkotlin/jvm/functions/Function1;
+	public fun getShape-IIYLAfE ()[I
 }
 
 public abstract interface class space/kscience/kmath/nd/WithShape {
 	public fun getIndices ()Lspace/kscience/kmath/nd/ShapeIndexer;
-	public abstract fun getShape ()[I
+	public abstract fun getShape-IIYLAfE ()[I
 }
 
 public abstract interface class space/kscience/kmath/operations/Algebra {
@@ -1247,6 +1758,8 @@ public abstract interface class space/kscience/kmath/operations/Algebra {
 	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
 	public fun bindSymbol (Ljava/lang/String;)Ljava/lang/Object;
 	public fun bindSymbolOrNull (Ljava/lang/String;)Ljava/lang/Object;
+	public fun export (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun unaryOperation (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
 }
@@ -1255,12 +1768,15 @@ public final class space/kscience/kmath/operations/AlgebraExtensionsKt {
 	public static final fun abs (Lspace/kscience/kmath/operations/Group;Ljava/lang/Comparable;)Ljava/lang/Comparable;
 	public static final fun average (Lspace/kscience/kmath/operations/Group;Ljava/lang/Iterable;)Ljava/lang/Object;
 	public static final fun average (Lspace/kscience/kmath/operations/Group;Lkotlin/sequences/Sequence;)Ljava/lang/Object;
+	public static final fun average (Lspace/kscience/kmath/operations/Group;Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Object;
 	public static final fun averageWith (Ljava/lang/Iterable;Lspace/kscience/kmath/operations/Group;)Ljava/lang/Object;
 	public static final fun averageWith (Lkotlin/sequences/Sequence;Lspace/kscience/kmath/operations/Group;)Ljava/lang/Object;
 	public static final fun sum (Lspace/kscience/kmath/operations/Group;Ljava/lang/Iterable;)Ljava/lang/Object;
 	public static final fun sum (Lspace/kscience/kmath/operations/Group;Lkotlin/sequences/Sequence;)Ljava/lang/Object;
+	public static final fun sum (Lspace/kscience/kmath/operations/Group;Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Object;
 	public static final fun sumWith (Ljava/lang/Iterable;Lspace/kscience/kmath/operations/Group;)Ljava/lang/Object;
 	public static final fun sumWith (Lkotlin/sequences/Sequence;Lspace/kscience/kmath/operations/Group;)Ljava/lang/Object;
+	public static final fun sumWithGroupOf (Ljava/lang/Iterable;Lspace/kscience/kmath/operations/Group;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 }
 
 public final class space/kscience/kmath/operations/AlgebraKt {
@@ -1327,12 +1843,10 @@ public final class space/kscience/kmath/operations/BigIntField : space/kscience/
 
 public final class space/kscience/kmath/operations/BigIntKt {
 	public static final fun abs (Lspace/kscience/kmath/operations/BigInt;)Lspace/kscience/kmath/operations/BigInt;
-	public static final fun bigInt (Lspace/kscience/kmath/structures/Buffer$Companion;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
-	public static final fun bigInt (Lspace/kscience/kmath/structures/MutableBuffer$Companion;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/MutableBuffer;
 	public static final fun buffer (Lspace/kscience/kmath/operations/BigInt$Companion;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun getAlgebra (Lspace/kscience/kmath/operations/BigInt;)Lspace/kscience/kmath/operations/BigIntField;
 	public static final fun getNd (Lspace/kscience/kmath/operations/BigIntField;)Lspace/kscience/kmath/nd/BufferedRingOpsND;
-	public static final fun mutableBuffer (Lspace/kscience/kmath/operations/BigInt;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
+	public static final fun mutableBuffer (Lspace/kscience/kmath/operations/BigInt$Companion;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun parseBigInteger (Ljava/lang/String;)Lspace/kscience/kmath/operations/BigInt;
 	public static final fun toBigInt (I)Lspace/kscience/kmath/operations/BigInt;
 	public static final fun toBigInt (J)Lspace/kscience/kmath/operations/BigInt;
@@ -1341,11 +1855,25 @@ public final class space/kscience/kmath/operations/BigIntKt {
 	public static final fun toBigInt-WZ4Q5Ns (I)Lspace/kscience/kmath/operations/BigInt;
 }
 
+public final class space/kscience/kmath/operations/BooleanAlgebra : space/kscience/kmath/operations/LogicAlgebra {
+	public static final field INSTANCE Lspace/kscience/kmath/operations/BooleanAlgebra;
+	public synthetic fun and (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun and (ZZ)Ljava/lang/Boolean;
+	public fun const (Z)Ljava/lang/Boolean;
+	public synthetic fun const (Z)Ljava/lang/Object;
+	public synthetic fun not (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun not (Z)Ljava/lang/Boolean;
+	public synthetic fun or (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun or (ZZ)Ljava/lang/Boolean;
+	public synthetic fun xor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun xor (ZZ)Ljava/lang/Boolean;
+}
+
 public abstract interface class space/kscience/kmath/operations/BufferAlgebra : space/kscience/kmath/operations/Algebra {
 	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
 	public fun buffer (I[Ljava/lang/Object;)Lspace/kscience/kmath/structures/Buffer;
-	public abstract fun getBufferFactory ()Lkotlin/jvm/functions/Function2;
 	public abstract fun getElementAlgebra ()Lspace/kscience/kmath/operations/Algebra;
+	public fun getElementBufferFactory ()Lspace/kscience/kmath/structures/BufferFactory;
 	public fun map (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/structures/Buffer;
 	public fun mapIndexed (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/structures/Buffer;
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
@@ -1362,11 +1890,11 @@ public final class space/kscience/kmath/operations/BufferAlgebraKt {
 	public static final fun buffer (Lspace/kscience/kmath/operations/BufferAlgebra;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun buffer (Lspace/kscience/kmath/operations/BufferAlgebra;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun buffer (Lspace/kscience/kmath/operations/BufferField;[Ljava/lang/Number;)Lspace/kscience/kmath/structures/Buffer;
-	public static final fun bufferAlgebra (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/operations/BufferFieldOps;
 	public static final fun cos (Lspace/kscience/kmath/operations/BufferAlgebra;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun cosh (Lspace/kscience/kmath/operations/BufferAlgebra;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun exp (Lspace/kscience/kmath/operations/BufferAlgebra;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
-	public static final fun getBufferAlgebra (Lspace/kscience/kmath/operations/DoubleField;)Lspace/kscience/kmath/operations/BufferFieldOps;
+	public static final fun getBufferAlgebra (Lspace/kscience/kmath/operations/Field;)Lspace/kscience/kmath/operations/BufferFieldOps;
+	public static final fun getBufferAlgebra (Lspace/kscience/kmath/operations/IntRing;)Lspace/kscience/kmath/operations/BufferRingOps;
 	public static final fun getBufferAlgebra (Lspace/kscience/kmath/operations/ShortRing;)Lspace/kscience/kmath/operations/BufferRingOps;
 	public static final fun ln (Lspace/kscience/kmath/operations/BufferAlgebra;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun pow (Lspace/kscience/kmath/operations/BufferAlgebra;Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Number;)Lspace/kscience/kmath/structures/Buffer;
@@ -1377,8 +1905,21 @@ public final class space/kscience/kmath/operations/BufferAlgebraKt {
 	public static final fun withSize (Lspace/kscience/kmath/operations/BufferFieldOps;I)Lspace/kscience/kmath/operations/BufferField;
 }
 
+public final class space/kscience/kmath/operations/BufferExtensionsKt {
+	public static final fun asIterable (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Iterable;
+	public static final fun asSequence (Lspace/kscience/kmath/structures/Buffer;)Lkotlin/sequences/Sequence;
+	public static final fun combineToBuffer (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/structures/Buffer;
+	public static final fun fold (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+	public static final fun foldIndexed (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Ljava/lang/Object;
+	public static final fun mapIndexedToBuffer (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/structures/Buffer;
+	public static final fun mapToBuffer (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/BufferFactory;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
+	public static final fun reduce (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
+	public static final fun toList (Lspace/kscience/kmath/structures/Buffer;)Ljava/util/List;
+	public static final fun toMutableList (Lspace/kscience/kmath/structures/Buffer;)Ljava/util/List;
+}
+
 public final class space/kscience/kmath/operations/BufferField : space/kscience/kmath/operations/BufferFieldOps, space/kscience/kmath/operations/Field, space/kscience/kmath/operations/WithSize {
-	public fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function2;I)V
+	public fun <init> (Lspace/kscience/kmath/operations/Field;I)V
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getOne ()Lspace/kscience/kmath/structures/Buffer;
 	public fun getSize ()I
@@ -1387,7 +1928,7 @@ public final class space/kscience/kmath/operations/BufferField : space/kscience/
 }
 
 public class space/kscience/kmath/operations/BufferFieldOps : space/kscience/kmath/operations/BufferRingOps, space/kscience/kmath/operations/BufferAlgebra, space/kscience/kmath/operations/FieldOps, space/kscience/kmath/operations/ScaleOperations {
-	public fun <init> (Lspace/kscience/kmath/operations/Field;Lkotlin/jvm/functions/Function2;)V
+	public fun <init> (Lspace/kscience/kmath/operations/Field;)V
 	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
 	public synthetic fun divide (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun divide (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
@@ -1397,20 +1938,11 @@ public class space/kscience/kmath/operations/BufferFieldOps : space/kscience/kma
 	public fun unaryMinus (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 }
 
-public final class space/kscience/kmath/operations/BufferOperationKt {
-	public static final fun asIterable (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Iterable;
-	public static final fun asSequence (Lspace/kscience/kmath/structures/Buffer;)Lkotlin/sequences/Sequence;
-	public static final fun fold (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-	public static final fun map (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
-	public static final fun toList (Lspace/kscience/kmath/structures/Buffer;)Ljava/util/List;
-}
-
 public class space/kscience/kmath/operations/BufferRingOps : space/kscience/kmath/operations/BufferAlgebra, space/kscience/kmath/operations/RingOps {
-	public fun <init> (Lspace/kscience/kmath/operations/Ring;Lkotlin/jvm/functions/Function2;)V
+	public fun <init> (Lspace/kscience/kmath/operations/Ring;)V
 	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun add (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
-	public fun getBufferFactory ()Lkotlin/jvm/functions/Function2;
 	public synthetic fun getElementAlgebra ()Lspace/kscience/kmath/operations/Algebra;
 	public fun getElementAlgebra ()Lspace/kscience/kmath/operations/Ring;
 	public synthetic fun multiply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -1420,10 +1952,15 @@ public class space/kscience/kmath/operations/BufferRingOps : space/kscience/kmat
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
 }
 
+public abstract interface class space/kscience/kmath/operations/BufferTransform {
+	public abstract fun transform (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
+}
+
 public final class space/kscience/kmath/operations/ByteRing : space/kscience/kmath/operations/Norm, space/kscience/kmath/operations/NumericAlgebra, space/kscience/kmath/operations/Ring {
 	public static final field INSTANCE Lspace/kscience/kmath/operations/ByteRing;
 	public fun add (BB)Ljava/lang/Byte;
 	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun getOne ()Ljava/lang/Byte;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getZero ()Ljava/lang/Byte;
@@ -1460,6 +1997,7 @@ public final class space/kscience/kmath/operations/DoubleBufferField : space/ksc
 	public synthetic fun getZero ()Ljava/lang/Object;
 	public fun getZero ()Lspace/kscience/kmath/structures/Buffer;
 	public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public synthetic fun power (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Number;)Lspace/kscience/kmath/structures/Buffer;
 	public fun power-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Number;)[D
 	public synthetic fun sinh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun sinh-Udx-57Q (Lspace/kscience/kmath/structures/Buffer;)[D
@@ -1494,13 +2032,16 @@ public abstract class space/kscience/kmath/operations/DoubleBufferOps : space/ks
 	public fun divide-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)[D
 	public synthetic fun exp (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun exp-Udx-57Q (Lspace/kscience/kmath/structures/Buffer;)[D
-	public fun getBufferFactory ()Lkotlin/jvm/functions/Function2;
 	public synthetic fun getElementAlgebra ()Lspace/kscience/kmath/operations/Algebra;
 	public fun getElementAlgebra ()Lspace/kscience/kmath/operations/DoubleField;
+	public synthetic fun getElementBufferFactory ()Lspace/kscience/kmath/structures/BufferFactory;
+	public fun getElementBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public synthetic fun ln (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun ln-Udx-57Q (Lspace/kscience/kmath/structures/Buffer;)[D
 	public synthetic fun map (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/structures/Buffer;
-	public fun map-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)[D
+	public final fun map-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function2;)[D
+	public synthetic fun mapIndexed (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/structures/Buffer;
+	public final fun mapIndexed-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function3;)[D
 	public synthetic fun minus (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun minus-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)[D
 	public synthetic fun multiply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -1509,6 +2050,8 @@ public abstract class space/kscience/kmath/operations/DoubleBufferOps : space/ks
 	public fun norm (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Double;
 	public synthetic fun plus (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun plus-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)[D
+	public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public fun power (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Number;)Lspace/kscience/kmath/structures/Buffer;
 	public synthetic fun scale (Ljava/lang/Object;D)Ljava/lang/Object;
 	public fun scale-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;D)[D
 	public synthetic fun sin (Ljava/lang/Object;)Ljava/lang/Object;
@@ -1522,10 +2065,21 @@ public abstract class space/kscience/kmath/operations/DoubleBufferOps : space/ks
 	public synthetic fun unaryMinus (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun unaryMinus-Udx-57Q (Lspace/kscience/kmath/structures/Buffer;)[D
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
+	public synthetic fun zip (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function3;)Lspace/kscience/kmath/structures/Buffer;
+	public final fun zip-XquIszc (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function3;)[D
 }
 
 public final class space/kscience/kmath/operations/DoubleBufferOps$Companion : space/kscience/kmath/operations/DoubleBufferOps {
-	public final fun mapInline-CZ9oacQ (Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)[D
+}
+
+public final class space/kscience/kmath/operations/DoubleBufferOpsKt {
+	public static final fun average (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;)D
+	public static final fun averageOf (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)D
+	public static final fun covariance (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/Buffer;)D
+	public static final fun dispersion (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;)D
+	public static final fun std (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;)D
+	public static final fun sum (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;)D
+	public static final fun sumOf (Lspace/kscience/kmath/operations/DoubleBufferOps;Lspace/kscience/kmath/structures/Buffer;Lkotlin/jvm/functions/Function1;)D
 }
 
 public final class space/kscience/kmath/operations/DoubleField : space/kscience/kmath/operations/ExtendedField, space/kscience/kmath/operations/Norm, space/kscience/kmath/operations/ScaleOperations {
@@ -1555,6 +2109,7 @@ public final class space/kscience/kmath/operations/DoubleField : space/kscience/
 	public synthetic fun divide (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun exp (D)Ljava/lang/Double;
 	public synthetic fun exp (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun getOne ()Ljava/lang/Double;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getZero ()Ljava/lang/Double;
@@ -1628,7 +2183,7 @@ public final class space/kscience/kmath/operations/ExponentialOperations$Compani
 	public static final field TANH_OPERATION Ljava/lang/String;
 }
 
-public abstract interface class space/kscience/kmath/operations/ExtendedField : space/kscience/kmath/operations/ExtendedFieldOps, space/kscience/kmath/operations/Field, space/kscience/kmath/operations/NumericAlgebra, space/kscience/kmath/operations/PowerOperations {
+public abstract interface class space/kscience/kmath/operations/ExtendedField : space/kscience/kmath/operations/ExtendedFieldOps, space/kscience/kmath/operations/Field, space/kscience/kmath/operations/NumericAlgebra {
 	public fun acosh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun asinh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun atanh (Ljava/lang/Object;)Ljava/lang/Object;
@@ -1639,7 +2194,7 @@ public abstract interface class space/kscience/kmath/operations/ExtendedField :
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
 }
 
-public abstract interface class space/kscience/kmath/operations/ExtendedFieldOps : space/kscience/kmath/operations/ExponentialOperations, space/kscience/kmath/operations/FieldOps, space/kscience/kmath/operations/ScaleOperations, space/kscience/kmath/operations/TrigonometricOperations {
+public abstract interface class space/kscience/kmath/operations/ExtendedFieldOps : space/kscience/kmath/operations/ExponentialOperations, space/kscience/kmath/operations/FieldOps, space/kscience/kmath/operations/PowerOperations, space/kscience/kmath/operations/ScaleOperations, space/kscience/kmath/operations/TrigonometricOperations {
 	public fun tan (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun tanh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
@@ -1693,6 +2248,7 @@ public final class space/kscience/kmath/operations/FloatField : space/kscience/k
 	public synthetic fun divide (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun exp (F)Ljava/lang/Float;
 	public synthetic fun exp (Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun getOne ()Ljava/lang/Float;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getZero ()Ljava/lang/Float;
@@ -1755,6 +2311,7 @@ public final class space/kscience/kmath/operations/IntRing : space/kscience/kmat
 	public static final field INSTANCE Lspace/kscience/kmath/operations/IntRing;
 	public fun add (II)Ljava/lang/Integer;
 	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun getOne ()Ljava/lang/Integer;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getZero ()Ljava/lang/Integer;
@@ -1833,7 +2390,18 @@ public final class space/kscience/kmath/operations/JBigIntegerField : space/ksci
 	public fun unaryMinus (Ljava/math/BigInteger;)Ljava/math/BigInteger;
 }
 
-public abstract interface annotation class space/kscience/kmath/operations/KMathContext : java/lang/annotation/Annotation {
+public abstract interface class space/kscience/kmath/operations/LogicAlgebra : space/kscience/kmath/operations/Algebra {
+	public static final field Companion Lspace/kscience/kmath/operations/LogicAlgebra$Companion;
+	public abstract fun and (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun binaryOperation (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
+	public fun bindSymbolOrNull (Ljava/lang/String;)Ljava/lang/Object;
+	public abstract fun const (Z)Ljava/lang/Object;
+	public abstract fun not (Ljava/lang/Object;)Ljava/lang/Object;
+	public abstract fun or (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun unaryOperation (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
+	public abstract fun xor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 }
 
 public final class space/kscience/kmath/operations/LogicAlgebra$Companion {
@@ -1845,6 +2413,7 @@ public final class space/kscience/kmath/operations/LongRing : space/kscience/kma
 	public static final field INSTANCE Lspace/kscience/kmath/operations/LongRing;
 	public fun add (JJ)Ljava/lang/Long;
 	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public fun getOne ()Ljava/lang/Long;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getZero ()Ljava/lang/Long;
@@ -1869,6 +2438,13 @@ public abstract interface class space/kscience/kmath/operations/Norm {
 	public abstract fun norm (Ljava/lang/Object;)Ljava/lang/Object;
 }
 
+public abstract interface class space/kscience/kmath/operations/NumbersAddOps : space/kscience/kmath/operations/NumericAlgebra, space/kscience/kmath/operations/RingOps {
+	public fun minus (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun minus (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+	public fun plus (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
+	public fun plus (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
+}
+
 public final class space/kscience/kmath/operations/NumbersKt {
 	public static final fun getAlgebra (Lkotlin/jvm/internal/ByteCompanionObject;)Lspace/kscience/kmath/operations/ByteRing;
 	public static final fun getAlgebra (Lkotlin/jvm/internal/DoubleCompanionObject;)Lspace/kscience/kmath/operations/DoubleField;
@@ -1938,6 +2514,7 @@ public final class space/kscience/kmath/operations/ShortRing : space/kscience/km
 	public static final field INSTANCE Lspace/kscience/kmath/operations/ShortRing;
 	public synthetic fun add (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 	public fun add (SS)Ljava/lang/Short;
+	public fun getBufferFactory ()Lspace/kscience/kmath/structures/MutableBufferFactory;
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public fun getOne ()Ljava/lang/Short;
 	public synthetic fun getZero ()Ljava/lang/Object;
@@ -2001,11 +2578,11 @@ public final class space/kscience/kmath/structures/ArrayBufferKt {
 	public static final fun asBuffer ([Ljava/lang/Object;)Lspace/kscience/kmath/structures/ArrayBuffer;
 }
 
-public abstract interface class space/kscience/kmath/structures/Buffer {
+public abstract interface class space/kscience/kmath/structures/Buffer : space/kscience/kmath/operations/WithSize {
 	public static final field Companion Lspace/kscience/kmath/structures/Buffer$Companion;
 	public abstract fun get (I)Ljava/lang/Object;
 	public abstract fun getSize ()I
-	public abstract fun iterator ()Ljava/util/Iterator;
+	public fun iterator ()Ljava/util/Iterator;
 	public abstract fun toString ()Ljava/lang/String;
 }
 
@@ -2016,14 +2593,100 @@ public final class space/kscience/kmath/structures/Buffer$Companion {
 	public final fun toString (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/String;
 }
 
+public final class space/kscience/kmath/structures/BufferExpanded : space/kscience/kmath/structures/BufferView {
+	public fun <init> (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Object;II)V
+	public synthetic fun <init> (Lspace/kscience/kmath/structures/Buffer;Ljava/lang/Object;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun get (I)Ljava/lang/Object;
+	public final fun getOffset ()I
+	public fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getSize ()I
+	public fun originIndex (I)I
+	public fun toString ()Ljava/lang/String;
+}
+
+public abstract interface class space/kscience/kmath/structures/BufferFactory {
+	public static final field Companion Lspace/kscience/kmath/structures/BufferFactory$Companion;
+	public abstract fun invoke (ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/Buffer;
+}
+
+public final class space/kscience/kmath/structures/BufferFactory$Companion {
+	public final fun boxing ()Lspace/kscience/kmath/structures/BufferFactory;
+}
+
 public final class space/kscience/kmath/structures/BufferKt {
 	public static final fun asReadOnly (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
 	public static final fun first (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Object;
+	public static final fun get-Qn1smSk (Lspace/kscience/kmath/structures/Buffer;I)Ljava/lang/Object;
 	public static final fun getIndices (Lspace/kscience/kmath/structures/Buffer;)Lkotlin/ranges/IntRange;
+	public static final fun getOrNull (Lspace/kscience/kmath/structures/Buffer;I)Ljava/lang/Object;
 	public static final fun last (Lspace/kscience/kmath/structures/Buffer;)Ljava/lang/Object;
 }
 
-public final class space/kscience/kmath/structures/DoubleBuffer : space/kscience/kmath/structures/MutableBuffer {
+public final class space/kscience/kmath/structures/BufferPrimitiveAccessKt {
+	public static final fun getDouble (Lspace/kscience/kmath/structures/Buffer;I)D
+	public static final fun getInt (Lspace/kscience/kmath/structures/Buffer;I)I
+}
+
+public final class space/kscience/kmath/structures/BufferSlice : space/kscience/kmath/structures/BufferView {
+	public fun <init> (Lspace/kscience/kmath/structures/Buffer;II)V
+	public synthetic fun <init> (Lspace/kscience/kmath/structures/Buffer;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
+	public fun get (I)Ljava/lang/Object;
+	public final fun getOffset ()I
+	public fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getSize ()I
+	public fun iterator ()Ljava/util/Iterator;
+	public fun originIndex (I)I
+	public fun toString ()Ljava/lang/String;
+}
+
+public abstract interface class space/kscience/kmath/structures/BufferView : space/kscience/kmath/structures/Buffer {
+	public fun get (I)Ljava/lang/Object;
+	public abstract fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun originIndex (I)I
+}
+
+public final class space/kscience/kmath/structures/BufferViewKt {
+	public static final fun expand (Lspace/kscience/kmath/structures/Buffer;Lkotlin/ranges/IntRange;Ljava/lang/Object;)Lspace/kscience/kmath/structures/BufferView;
+	public static final fun permute (Lspace/kscience/kmath/structures/Buffer;[I)Lspace/kscience/kmath/structures/PermutedBuffer;
+	public static final fun permute (Lspace/kscience/kmath/structures/MutableBuffer;[I)Lspace/kscience/kmath/structures/PermutedMutableBuffer;
+	public static final fun slice (Lspace/kscience/kmath/structures/Buffer;Lkotlin/ranges/IntRange;)Lspace/kscience/kmath/structures/BufferView;
+}
+
+public final class space/kscience/kmath/structures/ByteBuffer : space/kscience/kmath/structures/MutableBuffer {
+	public static final synthetic fun box-impl ([B)Lspace/kscience/kmath/structures/ByteBuffer;
+	public static fun constructor-impl ([B)[B
+	public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
+	public static fun copy-impl ([B)Lspace/kscience/kmath/structures/MutableBuffer;
+	public fun equals (Ljava/lang/Object;)Z
+	public static fun equals-impl ([BLjava/lang/Object;)Z
+	public static final fun equals-impl0 ([B[B)Z
+	public fun get (I)Ljava/lang/Byte;
+	public synthetic fun get (I)Ljava/lang/Object;
+	public static fun get-impl ([BI)Ljava/lang/Byte;
+	public final fun getArray ()[B
+	public fun getSize ()I
+	public static fun getSize-impl ([B)I
+	public fun hashCode ()I
+	public static fun hashCode-impl ([B)I
+	public synthetic fun iterator ()Ljava/util/Iterator;
+	public fun iterator ()Lkotlin/collections/ByteIterator;
+	public static fun iterator-impl ([B)Lkotlin/collections/ByteIterator;
+	public fun set (IB)V
+	public synthetic fun set (ILjava/lang/Object;)V
+	public static fun set-impl ([BIB)V
+	public fun toString ()Ljava/lang/String;
+	public static fun toString-impl ([B)Ljava/lang/String;
+	public final synthetic fun unbox-impl ()[B
+}
+
+public final class space/kscience/kmath/structures/ByteBufferKt {
+	public static final fun ByteBuffer (ILkotlin/jvm/functions/Function1;)[B
+	public static final fun ByteBuffer ([B)[B
+	public static final fun asBuffer ([B)[B
+	public static final fun toByteArray (Lspace/kscience/kmath/structures/Buffer;)[B
+}
+
+public final class space/kscience/kmath/structures/DoubleBuffer : space/kscience/kmath/structures/PrimitiveBuffer {
 	public static final field Companion Lspace/kscience/kmath/structures/DoubleBuffer$Companion;
 	public static final synthetic fun box-impl ([D)Lspace/kscience/kmath/structures/DoubleBuffer;
 	public static fun constructor-impl ([D)[D
@@ -2060,8 +2723,14 @@ public final class space/kscience/kmath/structures/DoubleBufferKt {
 	public static final fun DoubleBuffer (ILkotlin/jvm/functions/Function1;)[D
 	public static final fun DoubleBuffer ([D)[D
 	public static final fun asBuffer ([D)[D
-	public static final fun contentEquals-2c9zdjM ([D[D)Z
 	public static final fun toDoubleArray (Lspace/kscience/kmath/structures/Buffer;)[D
+	public static final fun toDoubleBuffer (Lspace/kscience/kmath/structures/Buffer;)[D
+}
+
+public abstract interface class space/kscience/kmath/structures/DoubleBufferTransform : space/kscience/kmath/operations/BufferTransform {
+	public synthetic fun transform (Lspace/kscience/kmath/structures/Buffer;)Lspace/kscience/kmath/structures/Buffer;
+	public abstract fun transform-7Zdoou4 ([D)[D
+	public fun transform-Udx-57Q (Lspace/kscience/kmath/structures/Buffer;)[D
 }
 
 public abstract interface class space/kscience/kmath/structures/FlaggedBuffer : space/kscience/kmath/structures/Buffer {
@@ -2087,7 +2756,7 @@ public final class space/kscience/kmath/structures/FlaggedDoubleBuffer : space/k
 	public fun toString ()Ljava/lang/String;
 }
 
-public final class space/kscience/kmath/structures/FloatBuffer : space/kscience/kmath/structures/MutableBuffer {
+public final class space/kscience/kmath/structures/FloatBuffer : space/kscience/kmath/structures/PrimitiveBuffer {
 	public static final synthetic fun box-impl ([F)Lspace/kscience/kmath/structures/FloatBuffer;
 	public static fun constructor-impl ([F)[F
 	public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
@@ -2121,11 +2790,12 @@ public final class space/kscience/kmath/structures/FloatBufferKt {
 	public static final fun toFloatArray (Lspace/kscience/kmath/structures/Buffer;)[F
 }
 
-public final class space/kscience/kmath/structures/IntBuffer : space/kscience/kmath/structures/MutableBuffer {
+public final class space/kscience/kmath/structures/IntBuffer : space/kscience/kmath/structures/PrimitiveBuffer {
 	public static final synthetic fun box-impl ([I)Lspace/kscience/kmath/structures/IntBuffer;
 	public static fun constructor-impl ([I)[I
-	public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
-	public static fun copy-impl ([I)Lspace/kscience/kmath/structures/MutableBuffer;
+	public synthetic fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
+	public fun copy-ir4F4A8 ()[I
+	public static fun copy-ir4F4A8 ([I)[I
 	public fun equals (Ljava/lang/Object;)Z
 	public static fun equals-impl ([ILjava/lang/Object;)Z
 	public static final fun equals-impl0 ([I[I)Z
@@ -2170,7 +2840,7 @@ public final class space/kscience/kmath/structures/ListBufferKt {
 	public static final fun asMutableBuffer (Ljava/util/List;)Ljava/util/List;
 }
 
-public final class space/kscience/kmath/structures/LongBuffer : space/kscience/kmath/structures/MutableBuffer {
+public final class space/kscience/kmath/structures/LongBuffer : space/kscience/kmath/structures/PrimitiveBuffer {
 	public static final synthetic fun box-impl ([J)Lspace/kscience/kmath/structures/LongBuffer;
 	public static fun constructor-impl ([J)[J
 	public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
@@ -2236,6 +2906,15 @@ public final class space/kscience/kmath/structures/MutableBuffer$Companion {
 	public final fun short-1yRgbGw (ILkotlin/jvm/functions/Function1;)[S
 }
 
+public abstract interface class space/kscience/kmath/structures/MutableBufferFactory : space/kscience/kmath/structures/BufferFactory {
+	public static final field Companion Lspace/kscience/kmath/structures/MutableBufferFactory$Companion;
+	public abstract fun invoke (ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/MutableBuffer;
+}
+
+public final class space/kscience/kmath/structures/MutableBufferFactory$Companion {
+	public final fun boxing ()Lspace/kscience/kmath/structures/MutableBufferFactory;
+}
+
 public final class space/kscience/kmath/structures/MutableListBuffer : space/kscience/kmath/structures/MutableBuffer {
 	public static final synthetic fun box-impl (Ljava/util/List;)Lspace/kscience/kmath/structures/MutableListBuffer;
 	public static fun constructor-impl (ILkotlin/jvm/functions/Function1;)Ljava/util/List;
@@ -2273,6 +2952,32 @@ public final class space/kscience/kmath/structures/MutableMemoryBuffer$Companion
 	public final fun create (Lspace/kscience/kmath/memory/MemorySpec;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/MutableMemoryBuffer;
 }
 
+public final class space/kscience/kmath/structures/PermutedBuffer : space/kscience/kmath/structures/BufferView {
+	public fun <init> (Lspace/kscience/kmath/structures/Buffer;[I)V
+	public fun get (I)Ljava/lang/Object;
+	public fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getSize ()I
+	public fun iterator ()Ljava/util/Iterator;
+	public fun originIndex (I)I
+	public fun toString ()Ljava/lang/String;
+}
+
+public final class space/kscience/kmath/structures/PermutedMutableBuffer : space/kscience/kmath/structures/BufferView, space/kscience/kmath/structures/MutableBuffer {
+	public fun <init> (Lspace/kscience/kmath/structures/MutableBuffer;[I)V
+	public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
+	public fun get (I)Ljava/lang/Object;
+	public synthetic fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
+	public fun getOrigin ()Lspace/kscience/kmath/structures/MutableBuffer;
+	public fun getSize ()I
+	public fun iterator ()Ljava/util/Iterator;
+	public fun originIndex (I)I
+	public fun set (ILjava/lang/Object;)V
+	public fun toString ()Ljava/lang/String;
+}
+
+public abstract interface class space/kscience/kmath/structures/PrimitiveBuffer : space/kscience/kmath/structures/MutableBuffer {
+}
+
 public final class space/kscience/kmath/structures/ReadOnlyBuffer : space/kscience/kmath/structures/Buffer {
 	public static final synthetic fun box-impl (Lspace/kscience/kmath/structures/MutableBuffer;)Lspace/kscience/kmath/structures/ReadOnlyBuffer;
 	public static fun constructor-impl (Lspace/kscience/kmath/structures/MutableBuffer;)Lspace/kscience/kmath/structures/MutableBuffer;
diff --git a/kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/bufferPrimitiveAccess.kt b/kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/bufferPrimitiveAccess.kt
index 791d7d16f..353892105 100644
--- a/kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/bufferPrimitiveAccess.kt
+++ b/kmath-core/src/commonMain/kotlin/space/kscience/kmath/structures/bufferPrimitiveAccess.kt
@@ -5,7 +5,6 @@ import space.kscience.kmath.UnstableKMathAPI
 /**
  * Non-boxing access to primitive [Double]
  */
-
 @UnstableKMathAPI
 public fun Buffer<Double>.getDouble(index: Int): Double = if (this is BufferView) {
     val originIndex = originIndex(index)
diff --git a/kmath-memory/api/kmath-memory.api b/kmath-memory/api/kmath-memory.api
index 9c9641461..cebb04af2 100644
--- a/kmath-memory/api/kmath-memory.api
+++ b/kmath-memory/api/kmath-memory.api
@@ -1,3 +1,14 @@
+public abstract interface annotation class space/kscience/kmath/PerformancePitfall : java/lang/annotation/Annotation {
+	public abstract fun message ()Ljava/lang/String;
+}
+
+public abstract interface annotation class space/kscience/kmath/UnsafeKMathAPI : java/lang/annotation/Annotation {
+	public abstract fun message ()Ljava/lang/String;
+}
+
+public abstract interface annotation class space/kscience/kmath/UnstableKMathAPI : java/lang/annotation/Annotation {
+}
+
 public final class space/kscience/kmath/memory/ByteBufferMemory : space/kscience/kmath/memory/Memory {
 	public fun <init> (Ljava/nio/ByteBuffer;II)V
 	public synthetic fun <init> (Ljava/nio/ByteBuffer;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -36,7 +47,8 @@ public final class space/kscience/kmath/memory/MemoryKt {
 	public static final fun write (Lspace/kscience/kmath/memory/Memory;Lkotlin/jvm/functions/Function1;)V
 }
 
-public abstract interface class space/kscience/kmath/memory/MemoryReader {
+public abstract interface class space/kscience/kmath/memory/MemoryReader : java/lang/AutoCloseable {
+	public abstract fun close ()V
 	public abstract fun getMemory ()Lspace/kscience/kmath/memory/Memory;
 	public abstract fun readByte (I)B
 	public abstract fun readDouble (I)D
@@ -44,7 +56,6 @@ public abstract interface class space/kscience/kmath/memory/MemoryReader {
 	public abstract fun readInt (I)I
 	public abstract fun readLong (I)J
 	public abstract fun readShort (I)S
-	public abstract fun release ()V
 }
 
 public abstract interface class space/kscience/kmath/memory/MemorySpec {
@@ -59,9 +70,9 @@ public final class space/kscience/kmath/memory/MemorySpecKt {
 	public static final fun writeArray (Lspace/kscience/kmath/memory/MemoryWriter;Lspace/kscience/kmath/memory/MemorySpec;I[Ljava/lang/Object;)V
 }
 
-public abstract interface class space/kscience/kmath/memory/MemoryWriter {
+public abstract interface class space/kscience/kmath/memory/MemoryWriter : java/lang/AutoCloseable {
+	public abstract fun close ()V
 	public abstract fun getMemory ()Lspace/kscience/kmath/memory/Memory;
-	public abstract fun release ()V
 	public abstract fun writeByte (IB)V
 	public abstract fun writeDouble (ID)V
 	public abstract fun writeFloat (IF)V
diff --git a/kmath-viktor/api/kmath-viktor.api b/kmath-viktor/api/kmath-viktor.api
index 3bb7c3b21..39ae1f84c 100644
--- a/kmath-viktor/api/kmath-viktor.api
+++ b/kmath-viktor/api/kmath-viktor.api
@@ -29,7 +29,7 @@ public class space/kscience/kmath/viktor/ViktorFieldND : space/kscience/kmath/vi
 	public synthetic fun getOne ()Ljava/lang/Object;
 	public synthetic fun getOne ()Lspace/kscience/kmath/nd/StructureND;
 	public fun getOne ()Lspace/kscience/kmath/viktor/ViktorStructureND;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 	public synthetic fun getZero ()Ljava/lang/Object;
 	public synthetic fun getZero ()Lspace/kscience/kmath/nd/StructureND;
 	public fun getZero ()Lspace/kscience/kmath/viktor/ViktorStructureND;
@@ -85,8 +85,8 @@ public class space/kscience/kmath/viktor/ViktorFieldOpsND : space/kscience/kmath
 	public fun sin (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/viktor/ViktorStructureND;
 	public synthetic fun sinh (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun sinh (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/viktor/ViktorStructureND;
-	public synthetic fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
-	public fun structureND ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/viktor/ViktorStructureND;
+	public synthetic fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/nd/StructureND;
+	public fun structureND-qL90JFI ([ILkotlin/jvm/functions/Function2;)Lspace/kscience/kmath/viktor/ViktorStructureND;
 	public synthetic fun tan (Ljava/lang/Object;)Ljava/lang/Object;
 	public fun tan (Lspace/kscience/kmath/nd/StructureND;)Lspace/kscience/kmath/viktor/ViktorStructureND;
 	public synthetic fun times (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
@@ -112,7 +112,7 @@ public final class space/kscience/kmath/viktor/ViktorStructureND : space/kscienc
 	public fun get ([I)Ljava/lang/Double;
 	public synthetic fun get ([I)Ljava/lang/Object;
 	public final fun getF64Buffer ()Lorg/jetbrains/bio/viktor/F64Array;
-	public fun getShape ()[I
+	public fun getShape-IIYLAfE ()[I
 	public fun set ([ID)V
 	public synthetic fun set ([ILjava/lang/Object;)V
 }