Reverse types for buffers and typealiases for geometry.

This commit is contained in:
Alexander Nozik 2024-02-22 21:03:58 +03:00
parent dba001eff3
commit fcb7e2fa7d
67 changed files with 117 additions and 353 deletions

View File

@ -18,7 +18,7 @@
### Added ### Added
- Reification. Explicit `SafeType` for algebras and buffers. - Reification. Explicit `SafeType` for algebras.
- Integer division algebras. - Integer division algebras.
- Float32 geometries. - Float32 geometries.
- New Attributes-kt module that could be used as stand-alone. It declares. type-safe attributes containers. - New Attributes-kt module that could be used as stand-alone. It declares. type-safe attributes containers.
@ -30,6 +30,7 @@
### Changed ### Changed
- Buffer copy removed from API (added as an extension).
- Default naming for algebra and buffers now uses IntXX/FloatXX notation instead of Java types. - Default naming for algebra and buffers now uses IntXX/FloatXX notation instead of Java types.
- Remove unnecessary inlines in basic algebras. - Remove unnecessary inlines in basic algebras.
- QuaternionField -> QuaternionAlgebra and does not implement `Field` anymore since it is non-commutative - QuaternionField -> QuaternionAlgebra and does not implement `Field` anymore since it is non-commutative

View File

@ -14,7 +14,7 @@ allprojects {
} }
group = "space.kscience" group = "space.kscience"
version = "0.4.0-RC" version = "0.4.0-RC2"
} }
subprojects { subprojects {

View File

@ -23,7 +23,7 @@ import space.kscience.kmath.structures.IntBuffer
import space.kscience.kmath.structures.asBuffer import space.kscience.kmath.structures.asBuffer
public class CMMatrix(public val origin: RealMatrix) : Matrix<Double> { public class CMMatrix(public val origin: RealMatrix) : Matrix<Double> {
override val type: SafeType<Double> get() = DoubleField.type
override val rowNum: Int get() = origin.rowDimension override val rowNum: Int get() = origin.rowDimension
override val colNum: Int get() = origin.columnDimension override val colNum: Int get() = origin.columnDimension
@ -32,7 +32,6 @@ public class CMMatrix(public val origin: RealMatrix) : Matrix<Double> {
@JvmInline @JvmInline
public value class CMVector(public val origin: RealVector) : Point<Double> { public value class CMVector(public val origin: RealVector) : Point<Double> {
override val type: SafeType<Double> get() = DoubleField.type
override val size: Int get() = origin.dimension override val size: Int get() = origin.dimension
override operator fun get(index: Int): Double = origin.getEntry(index) override operator fun get(index: Int): Double = origin.getEntry(index)

View File

@ -36,8 +36,6 @@ public class Quaternion(
require(!z.isNaN()) { "z-component of quaternion is not-a-number" } require(!z.isNaN()) { "z-component of quaternion is not-a-number" }
} }
override val type: SafeType<Double> get() = safeTypeOf()
/** /**
* Returns a string representation of this quaternion. * Returns a string representation of this quaternion.
*/ */

View File

@ -428,7 +428,6 @@ public final class space/kscience/kmath/expressions/NamedMatrix : space/kscience
public fun getRowNum ()I public fun getRowNum ()I
public fun getRows ()Ljava/util/List; public fun getRows ()Ljava/util/List;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public final fun getValues ()Lspace/kscience/kmath/nd/Structure2D; public final fun getValues ()Lspace/kscience/kmath/nd/Structure2D;
} }
@ -820,7 +819,6 @@ public final class space/kscience/kmath/linear/MatrixWrapper : space/kscience/km
public fun getRowNum ()I public fun getRowNum ()I
public fun getRows ()Ljava/util/List; public fun getRows ()Ljava/util/List;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
@ -871,7 +869,6 @@ public final class space/kscience/kmath/linear/TransposedMatrix : space/kscience
public fun getColNum ()I public fun getColNum ()I
public final fun getOrigin ()Lspace/kscience/kmath/nd/Structure2D; public final fun getOrigin ()Lspace/kscience/kmath/nd/Structure2D;
public fun getRowNum ()I public fun getRowNum ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public final class space/kscience/kmath/linear/UpperTriangular : space/kscience/attributes/FlagAttribute, space/kscience/kmath/linear/MatrixAttribute { public final class space/kscience/kmath/linear/UpperTriangular : space/kscience/attributes/FlagAttribute, space/kscience/kmath/linear/MatrixAttribute {
@ -879,15 +876,14 @@ public final class space/kscience/kmath/linear/UpperTriangular : space/kscience/
} }
public final class space/kscience/kmath/linear/VirtualMatrix : space/kscience/kmath/nd/Structure2D { public final class space/kscience/kmath/linear/VirtualMatrix : space/kscience/kmath/nd/Structure2D {
public synthetic fun <init> (Lkotlin/reflect/KType;IILspace/kscience/attributes/Attributes;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public fun <init> (IILspace/kscience/attributes/Attributes;Lkotlin/jvm/functions/Function2;)V
public synthetic fun <init> (Lkotlin/reflect/KType;IILspace/kscience/attributes/Attributes;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (IILspace/kscience/attributes/Attributes;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun get (II)Ljava/lang/Object; public fun get (II)Ljava/lang/Object;
public fun getAttributes ()Lspace/kscience/attributes/Attributes; public fun getAttributes ()Lspace/kscience/attributes/Attributes;
public fun getColNum ()I public fun getColNum ()I
public final fun getGenerator ()Lkotlin/jvm/functions/Function2; public final fun getGenerator ()Lkotlin/jvm/functions/Function2;
public fun getRowNum ()I public fun getRowNum ()I
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public final class space/kscience/kmath/linear/VirtualMatrixKt { public final class space/kscience/kmath/linear/VirtualMatrixKt {
@ -1009,7 +1005,6 @@ public class space/kscience/kmath/nd/BufferND : space/kscience/kmath/nd/Structur
public fun getBuffer ()Lspace/kscience/kmath/structures/Buffer; public fun getBuffer ()Lspace/kscience/kmath/structures/Buffer;
public fun getIndices ()Lspace/kscience/kmath/nd/ShapeIndexer; public fun getIndices ()Lspace/kscience/kmath/nd/ShapeIndexer;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
@ -1160,7 +1155,6 @@ public final class space/kscience/kmath/nd/Float64BufferND : space/kscience/kmat
public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/MutableBuffer; public synthetic fun getBuffer ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun getBuffer-E20IKn8 ()[D public fun getBuffer-E20IKn8 ()[D
public fun getDouble ([I)D public fun getDouble ([I)D
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun setDouble ([ID)V public fun setDouble ([ID)V
} }
@ -1290,11 +1284,9 @@ public abstract interface class space/kscience/kmath/nd/MutableStructureND : spa
public final class space/kscience/kmath/nd/MutableStructureNDAccessorBuffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/nd/MutableStructureNDAccessorBuffer : space/kscience/kmath/structures/MutableBuffer {
public fun <init> (Lspace/kscience/kmath/nd/MutableStructureND;ILkotlin/jvm/functions/Function1;)V public fun <init> (Lspace/kscience/kmath/nd/MutableStructureND;ILkotlin/jvm/functions/Function1;)V
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public fun getSize ()I public fun getSize ()I
public final fun getStructure ()Lspace/kscience/kmath/nd/MutableStructureND; public final fun getStructure ()Lspace/kscience/kmath/nd/MutableStructureND;
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun set (ILjava/lang/Object;)V public fun set (ILjava/lang/Object;)V
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
@ -1316,7 +1308,6 @@ public final class space/kscience/kmath/nd/PermutedMutableStructureND : space/ks
public final fun getOrigin ()Lspace/kscience/kmath/nd/MutableStructureND; public final fun getOrigin ()Lspace/kscience/kmath/nd/MutableStructureND;
public final fun getPermutation ()Lkotlin/jvm/functions/Function1; public final fun getPermutation ()Lkotlin/jvm/functions/Function1;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun set ([ILjava/lang/Object;)V public fun set ([ILjava/lang/Object;)V
} }
@ -1326,7 +1317,6 @@ public final class space/kscience/kmath/nd/PermutedStructureND : space/kscience/
public final fun getOrigin ()Lspace/kscience/kmath/nd/StructureND; public final fun getOrigin ()Lspace/kscience/kmath/nd/StructureND;
public final fun getPermutation ()Lkotlin/jvm/functions/Function1; public final fun getPermutation ()Lkotlin/jvm/functions/Function1;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public final class space/kscience/kmath/nd/PermutedStructureNDKt { public final class space/kscience/kmath/nd/PermutedStructureNDKt {
@ -1477,7 +1467,7 @@ public final class space/kscience/kmath/nd/Structure2DKt {
public abstract interface class space/kscience/kmath/nd/StructureAttribute : space/kscience/attributes/Attribute { public abstract interface class space/kscience/kmath/nd/StructureAttribute : space/kscience/attributes/Attribute {
} }
public abstract interface class space/kscience/kmath/nd/StructureND : space/kscience/attributes/AttributeContainer, space/kscience/attributes/WithType, space/kscience/kmath/nd/WithShape { public abstract interface class space/kscience/kmath/nd/StructureND : space/kscience/attributes/AttributeContainer, space/kscience/kmath/nd/WithShape {
public static final field Companion Lspace/kscience/kmath/nd/StructureND$Companion; public static final field Companion Lspace/kscience/kmath/nd/StructureND$Companion;
public fun elements ()Lkotlin/sequences/Sequence; public fun elements ()Lkotlin/sequences/Sequence;
public abstract fun get ([I)Ljava/lang/Object; public abstract fun get ([I)Ljava/lang/Object;
@ -1509,20 +1499,17 @@ public final class space/kscience/kmath/nd/StructureNDKt {
public abstract interface class space/kscience/kmath/nd/StructureNDOfDouble : space/kscience/kmath/nd/StructureND { public abstract interface class space/kscience/kmath/nd/StructureNDOfDouble : space/kscience/kmath/nd/StructureND {
public abstract fun getDouble ([I)D public abstract fun getDouble ([I)D
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public abstract interface class space/kscience/kmath/nd/StructureNDOfInt : space/kscience/kmath/nd/StructureND { public abstract interface class space/kscience/kmath/nd/StructureNDOfInt : space/kscience/kmath/nd/StructureND {
public abstract fun getInt ([I)I public abstract fun getInt ([I)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public class space/kscience/kmath/nd/VirtualStructureND : space/kscience/kmath/nd/StructureND { public class space/kscience/kmath/nd/VirtualStructureND : space/kscience/kmath/nd/StructureND {
public synthetic fun <init> (Lkotlin/reflect/KType;[ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> ([ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun get ([I)Ljava/lang/Object; public fun get ([I)Ljava/lang/Object;
public final fun getProducer ()Lkotlin/jvm/functions/Function1; public final fun getProducer ()Lkotlin/jvm/functions/Function1;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public abstract interface class space/kscience/kmath/nd/WithShape { public abstract interface class space/kscience/kmath/nd/WithShape {
@ -2376,21 +2363,31 @@ public abstract interface class space/kscience/kmath/operations/WithSize {
} }
public final class space/kscience/kmath/structures/ArrayBuffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/structures/ArrayBuffer : space/kscience/kmath/structures/MutableBuffer {
public synthetic fun <init> (Lkotlin/reflect/KType;[Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public static final synthetic fun box-impl ([Ljava/lang/Object;)Lspace/kscience/kmath/structures/ArrayBuffer;
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer; public static fun constructor-impl ([Ljava/lang/Object;)[Ljava/lang/Object;
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([Ljava/lang/Object;Ljava/lang/Object;)Z
public static final fun equals-impl0 ([Ljava/lang/Object;[Ljava/lang/Object;)Z
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public static fun get-impl ([Ljava/lang/Object;I)Ljava/lang/Object;
public fun getSize ()I public fun getSize ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType; public static fun getSize-impl ([Ljava/lang/Object;)I
public fun hashCode ()I
public static fun hashCode-impl ([Ljava/lang/Object;)I
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public static fun iterator-impl ([Ljava/lang/Object;)Ljava/util/Iterator;
public fun set (ILjava/lang/Object;)V public fun set (ILjava/lang/Object;)V
public static fun set-impl ([Ljava/lang/Object;ILjava/lang/Object;)V
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
public static fun toString-impl ([Ljava/lang/Object;)Ljava/lang/String;
public final synthetic fun unbox-impl ()[Ljava/lang/Object;
} }
public final class space/kscience/kmath/structures/ArrayBufferKt { public final class space/kscience/kmath/structures/ArrayBufferKt {
public static final fun asBuffer-Fnn_obI ([Ljava/lang/Object;Lkotlin/reflect/KType;)Lspace/kscience/kmath/structures/ArrayBuffer; public static final fun asBuffer ([Ljava/lang/Object;)[Ljava/lang/Object;
} }
public abstract interface class space/kscience/kmath/structures/Buffer : space/kscience/attributes/WithType, space/kscience/kmath/operations/WithSize { 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 static final field Companion Lspace/kscience/kmath/structures/Buffer$Companion;
public abstract fun get (I)Ljava/lang/Object; public abstract fun get (I)Ljava/lang/Object;
public abstract fun getSize ()I public abstract fun getSize ()I
@ -2449,7 +2446,6 @@ public final class space/kscience/kmath/structures/BufferSlice : space/kscience/
public abstract interface class space/kscience/kmath/structures/BufferView : space/kscience/kmath/structures/Buffer { public abstract interface class space/kscience/kmath/structures/BufferView : space/kscience/kmath/structures/Buffer {
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public abstract fun getOrigin ()Lspace/kscience/kmath/structures/Buffer; public abstract fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
} }
public final class space/kscience/kmath/structures/BufferViewKt { public final class space/kscience/kmath/structures/BufferViewKt {
@ -2477,7 +2473,6 @@ public final class space/kscience/kmath/structures/FlaggedDoubleBuffer : space/k
public fun getFlag (I)B public fun getFlag (I)B
public final fun getFlags ()[B public final fun getFlags ()[B
public fun getSize ()I public fun getSize ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public final fun getValues ()[D public final fun getValues ()[D
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
@ -2486,8 +2481,6 @@ public final class space/kscience/kmath/structures/FlaggedDoubleBuffer : space/k
public final class space/kscience/kmath/structures/Float32Buffer : space/kscience/kmath/structures/PrimitiveBuffer { public final class space/kscience/kmath/structures/Float32Buffer : space/kscience/kmath/structures/PrimitiveBuffer {
public static final synthetic fun box-impl ([F)Lspace/kscience/kmath/structures/Float32Buffer; public static final synthetic fun box-impl ([F)Lspace/kscience/kmath/structures/Float32Buffer;
public static fun constructor-impl ([F)[F public static fun constructor-impl ([F)[F
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public static fun copy-impl ([F)Lspace/kscience/kmath/structures/MutableBuffer;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([FLjava/lang/Object;)Z public static fun equals-impl ([FLjava/lang/Object;)Z
public static final fun equals-impl0 ([F[F)Z public static final fun equals-impl0 ([F[F)Z
@ -2497,8 +2490,6 @@ public final class space/kscience/kmath/structures/Float32Buffer : space/kscienc
public final fun getArray ()[F public final fun getArray ()[F
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([F)I public static fun getSize-impl ([F)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([F)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([F)I public static fun hashCode-impl ([F)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2523,9 +2514,6 @@ public final class space/kscience/kmath/structures/Float64Buffer : space/kscienc
public static final field Companion Lspace/kscience/kmath/structures/Float64Buffer$Companion; public static final field Companion Lspace/kscience/kmath/structures/Float64Buffer$Companion;
public static final synthetic fun box-impl ([D)Lspace/kscience/kmath/structures/Float64Buffer; public static final synthetic fun box-impl ([D)Lspace/kscience/kmath/structures/Float64Buffer;
public static fun constructor-impl ([D)[D public static fun constructor-impl ([D)[D
public synthetic fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun copy-E20IKn8 ()[D
public static fun copy-E20IKn8 ([D)[D
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([DLjava/lang/Object;)Z public static fun equals-impl ([DLjava/lang/Object;)Z
public static final fun equals-impl0 ([D[D)Z public static final fun equals-impl0 ([D[D)Z
@ -2535,8 +2523,6 @@ public final class space/kscience/kmath/structures/Float64Buffer : space/kscienc
public final fun getArray ()[D public final fun getArray ()[D
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([D)I public static fun getSize-impl ([D)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([D)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([D)I public static fun hashCode-impl ([D)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2571,8 +2557,6 @@ public abstract interface class space/kscience/kmath/structures/Float64BufferTra
public final class space/kscience/kmath/structures/Int16Buffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/structures/Int16Buffer : space/kscience/kmath/structures/MutableBuffer {
public static final synthetic fun box-impl ([S)Lspace/kscience/kmath/structures/Int16Buffer; public static final synthetic fun box-impl ([S)Lspace/kscience/kmath/structures/Int16Buffer;
public static fun constructor-impl ([S)[S public static fun constructor-impl ([S)[S
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public static fun copy-impl ([S)Lspace/kscience/kmath/structures/MutableBuffer;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([SLjava/lang/Object;)Z public static fun equals-impl ([SLjava/lang/Object;)Z
public static final fun equals-impl0 ([S[S)Z public static final fun equals-impl0 ([S[S)Z
@ -2582,8 +2566,6 @@ public final class space/kscience/kmath/structures/Int16Buffer : space/kscience/
public final fun getArray ()[S public final fun getArray ()[S
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([S)I public static fun getSize-impl ([S)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([S)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([S)I public static fun hashCode-impl ([S)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2607,9 +2589,6 @@ public final class space/kscience/kmath/structures/Int16BufferKt {
public final class space/kscience/kmath/structures/Int32Buffer : space/kscience/kmath/structures/PrimitiveBuffer { public final class space/kscience/kmath/structures/Int32Buffer : space/kscience/kmath/structures/PrimitiveBuffer {
public static final synthetic fun box-impl ([I)Lspace/kscience/kmath/structures/Int32Buffer; public static final synthetic fun box-impl ([I)Lspace/kscience/kmath/structures/Int32Buffer;
public static fun constructor-impl ([I)[I public static fun constructor-impl ([I)[I
public synthetic fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun copy-M_oXE9g ()[I
public static fun copy-M_oXE9g ([I)[I
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([ILjava/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 equals-impl0 ([I[I)Z
@ -2619,8 +2598,6 @@ public final class space/kscience/kmath/structures/Int32Buffer : space/kscience/
public final fun getArray ()[I public final fun getArray ()[I
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([I)I public static fun getSize-impl ([I)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([I)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([I)I public static fun hashCode-impl ([I)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2644,8 +2621,6 @@ public final class space/kscience/kmath/structures/Int32BufferKt {
public final class space/kscience/kmath/structures/Int64Buffer : space/kscience/kmath/structures/PrimitiveBuffer { public final class space/kscience/kmath/structures/Int64Buffer : space/kscience/kmath/structures/PrimitiveBuffer {
public static final synthetic fun box-impl ([J)Lspace/kscience/kmath/structures/Int64Buffer; public static final synthetic fun box-impl ([J)Lspace/kscience/kmath/structures/Int64Buffer;
public static fun constructor-impl ([J)[J public static fun constructor-impl ([J)[J
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public static fun copy-impl ([J)Lspace/kscience/kmath/structures/MutableBuffer;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([JLjava/lang/Object;)Z public static fun equals-impl ([JLjava/lang/Object;)Z
public static final fun equals-impl0 ([J[J)Z public static final fun equals-impl0 ([J[J)Z
@ -2655,8 +2630,6 @@ public final class space/kscience/kmath/structures/Int64Buffer : space/kscience/
public final fun getArray ()[J public final fun getArray ()[J
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([J)I public static fun getSize-impl ([J)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([J)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([J)I public static fun hashCode-impl ([J)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2680,8 +2653,6 @@ public final class space/kscience/kmath/structures/Int64BufferKt {
public final class space/kscience/kmath/structures/Int8Buffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/structures/Int8Buffer : space/kscience/kmath/structures/MutableBuffer {
public static final synthetic fun box-impl ([B)Lspace/kscience/kmath/structures/Int8Buffer; public static final synthetic fun box-impl ([B)Lspace/kscience/kmath/structures/Int8Buffer;
public static fun constructor-impl ([B)[B 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 fun equals (Ljava/lang/Object;)Z
public static fun equals-impl ([BLjava/lang/Object;)Z public static fun equals-impl ([BLjava/lang/Object;)Z
public static final fun equals-impl0 ([B[B)Z public static final fun equals-impl0 ([B[B)Z
@ -2691,8 +2662,6 @@ public final class space/kscience/kmath/structures/Int8Buffer : space/kscience/k
public final fun getArray ()[B public final fun getArray ()[B
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl ([B)I public static fun getSize-impl ([B)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY ([B)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl ([B)I public static fun hashCode-impl ([B)I
public synthetic fun iterator ()Ljava/util/Iterator; public synthetic fun iterator ()Ljava/util/Iterator;
@ -2714,23 +2683,21 @@ public final class space/kscience/kmath/structures/Int8BufferKt {
} }
public final class space/kscience/kmath/structures/ListBuffer : space/kscience/kmath/structures/Buffer { public final class space/kscience/kmath/structures/ListBuffer : space/kscience/kmath/structures/Buffer {
public synthetic fun <init> (Lkotlin/reflect/KType;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun <init> (Ljava/util/List;)V
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public final fun getList ()Ljava/util/List; public final fun getList ()Ljava/util/List;
public fun getSize ()I public fun getSize ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
public final class space/kscience/kmath/structures/ListBufferKt { public final class space/kscience/kmath/structures/ListBufferKt {
public static final fun asBuffer-Fnn_obI (Ljava/util/List;Lkotlin/reflect/KType;)Lspace/kscience/kmath/structures/ListBuffer; public static final fun asBuffer (Ljava/util/List;)Lspace/kscience/kmath/structures/ListBuffer;
public static final fun asMutableBuffer-Fnn_obI (Ljava/util/List;Lkotlin/reflect/KType;)Lspace/kscience/kmath/structures/MutableListBuffer; public static final fun asMutableBuffer (Ljava/util/List;)Lspace/kscience/kmath/structures/MutableListBuffer;
} }
public abstract interface class space/kscience/kmath/structures/MutableBuffer : space/kscience/kmath/structures/Buffer { public abstract interface class space/kscience/kmath/structures/MutableBuffer : space/kscience/kmath/structures/Buffer {
public static final field Companion Lspace/kscience/kmath/structures/MutableBuffer$Companion; public static final field Companion Lspace/kscience/kmath/structures/MutableBuffer$Companion;
public abstract fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public abstract fun set (ILjava/lang/Object;)V public abstract fun set (ILjava/lang/Object;)V
} }
@ -2752,15 +2719,15 @@ public final class space/kscience/kmath/structures/MutableBufferFactory$Companio
public final class space/kscience/kmath/structures/MutableBufferKt { public final class space/kscience/kmath/structures/MutableBufferKt {
public static final fun MutableBuffer--rwW0uw (Lkotlin/reflect/KType;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/MutableBuffer; public static final fun MutableBuffer--rwW0uw (Lkotlin/reflect/KType;ILkotlin/jvm/functions/Function1;)Lspace/kscience/kmath/structures/MutableBuffer;
public static final fun copy (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/BufferFactory;)Lspace/kscience/kmath/structures/Buffer;
public static final fun mutableCopy (Lspace/kscience/kmath/structures/Buffer;Lspace/kscience/kmath/structures/MutableBufferFactory;)Lspace/kscience/kmath/structures/MutableBuffer;
} }
public final class space/kscience/kmath/structures/MutableListBuffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/structures/MutableListBuffer : space/kscience/kmath/structures/MutableBuffer {
public synthetic fun <init> (Lkotlin/reflect/KType;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun <init> (Ljava/util/List;)V
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public final fun getList ()Ljava/util/List; public final fun getList ()Ljava/util/List;
public fun getSize ()I public fun getSize ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public fun set (ILjava/lang/Object;)V public fun set (ILjava/lang/Object;)V
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
@ -2789,7 +2756,6 @@ public final class space/kscience/kmath/structures/PermutedBuffer : space/kscien
public final class space/kscience/kmath/structures/PermutedMutableBuffer : space/kscience/kmath/structures/BufferView, space/kscience/kmath/structures/MutableBuffer { 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 <init> (Lspace/kscience/kmath/structures/MutableBuffer;[I)V
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public synthetic fun getOrigin ()Lspace/kscience/kmath/structures/Buffer; public synthetic fun getOrigin ()Lspace/kscience/kmath/structures/Buffer;
public fun getOrigin ()Lspace/kscience/kmath/structures/MutableBuffer; public fun getOrigin ()Lspace/kscience/kmath/structures/MutableBuffer;
@ -2814,10 +2780,9 @@ public final class space/kscience/kmath/structures/ValueFlag : java/lang/Enum {
} }
public final class space/kscience/kmath/structures/VirtualBuffer : space/kscience/kmath/structures/Buffer { public final class space/kscience/kmath/structures/VirtualBuffer : space/kscience/kmath/structures/Buffer {
public synthetic fun <init> (Lkotlin/reflect/KType;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun <init> (ILkotlin/jvm/functions/Function1;)V
public fun get (I)Ljava/lang/Object; public fun get (I)Ljava/lang/Object;
public fun getSize ()I public fun getSize ()I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }

View File

@ -189,7 +189,7 @@ public abstract class DSAlgebra<T, A : Ring<T>>(
vararg derivatives: T, vararg derivatives: T,
): DS<T, A> { ): DS<T, A> {
require(derivatives.size == compiler.size) { "dimension mismatch: ${derivatives.size} and ${compiler.size}" } require(derivatives.size == compiler.size) { "dimension mismatch: ${derivatives.size} and ${compiler.size}" }
val data = derivatives.asList().asBuffer(algebra.type) val data = derivatives.asList().asBuffer()
return DS(data) return DS(data)
} }

View File

@ -53,7 +53,7 @@ public class DerivationResult<T : Any>(
*/ */
public fun <T : Any> DerivationResult<T>.grad(vararg variables: Symbol): Point<T> { public fun <T : Any> DerivationResult<T>.grad(vararg variables: Symbol): Point<T> {
check(variables.isNotEmpty()) { "Variable order is not provided for gradient construction" } check(variables.isNotEmpty()) { "Variable order is not provided for gradient construction" }
return variables.map(::derivative).asBuffer(type) return variables.map(::derivative).asBuffer()
} }
/** /**

View File

@ -227,4 +227,4 @@ public fun <T> Matrix<T>.asVector(): Point<T> =
* @receiver a buffer. * @receiver a buffer.
* @return the new matrix. * @return the new matrix.
*/ */
public fun <T> Point<T>.asMatrix(): VirtualMatrix<T> = VirtualMatrix(type, size, 1) { i, _ -> get(i) } public fun <T> Point<T>.asMatrix(): VirtualMatrix<T> = VirtualMatrix(size, 1) { i, _ -> get(i) }

View File

@ -27,7 +27,7 @@ public interface LupDecomposition<T> {
* Create a pivot matrix from pivot vector using provided [LinearSpace] * Create a pivot matrix from pivot vector using provided [LinearSpace]
*/ */
public fun <T> LupDecomposition<T>.pivotMatrix(linearSpace: LinearSpace<T, Ring<T>>): Matrix<T> = public fun <T> LupDecomposition<T>.pivotMatrix(linearSpace: LinearSpace<T, Ring<T>>): Matrix<T> =
VirtualMatrix(linearSpace.type, l.rowNum, l.colNum) { row, column -> VirtualMatrix(l.rowNum, l.colNum) { row, column ->
if (column == pivot[row]) linearSpace.elementAlgebra.one else linearSpace.elementAlgebra.zero if (column == pivot[row]) linearSpace.elementAlgebra.one else linearSpace.elementAlgebra.zero
} }
@ -47,7 +47,7 @@ public class GenericLupDecomposition<T>(
override val l: Matrix<T> override val l: Matrix<T>
get() = VirtualMatrix(lu.type, lu.rowNum, lu.colNum, attributes = Attributes(LowerTriangular)) { i, j -> get() = VirtualMatrix(lu.rowNum, lu.colNum, attributes = Attributes(LowerTriangular)) { i, j ->
when { when {
j < i -> lu[i, j] j < i -> lu[i, j]
j == i -> elementAlgebra.one j == i -> elementAlgebra.one
@ -56,7 +56,7 @@ public class GenericLupDecomposition<T>(
} }
override val u: Matrix<T> override val u: Matrix<T>
get() = VirtualMatrix(lu.type, lu.rowNum, lu.colNum, attributes = Attributes(UpperTriangular)) { i, j -> get() = VirtualMatrix(lu.rowNum, lu.colNum, attributes = Attributes(UpperTriangular)) { i, j ->
if (j >= i) lu[i, j] else elementAlgebra.zero if (j >= i) lu[i, j] else elementAlgebra.zero
} }

View File

@ -68,7 +68,7 @@ public fun <T> Matrix<T>.modifyAttributes(modifier: (Attributes) -> Attributes):
public fun <T> LinearSpace<T, Ring<T>>.one( public fun <T> LinearSpace<T, Ring<T>>.one(
rows: Int, rows: Int,
columns: Int, columns: Int,
): MatrixWrapper<T> = VirtualMatrix(type, rows, columns) { i, j -> ): MatrixWrapper<T> = VirtualMatrix(rows, columns) { i, j ->
if (i == j) elementAlgebra.one else elementAlgebra.zero if (i == j) elementAlgebra.one else elementAlgebra.zero
}.withAttribute(IsUnit) }.withAttribute(IsUnit)
@ -79,6 +79,6 @@ public fun <T> LinearSpace<T, Ring<T>>.one(
public fun <T> LinearSpace<T, Ring<T>>.zero( public fun <T> LinearSpace<T, Ring<T>>.zero(
rows: Int, rows: Int,
columns: Int, columns: Int,
): MatrixWrapper<T> = VirtualMatrix(type, rows, columns) { _, _ -> ): MatrixWrapper<T> = VirtualMatrix(rows, columns) { _, _ ->
elementAlgebra.zero elementAlgebra.zero
}.withAttribute(IsZero) }.withAttribute(IsZero)

View File

@ -6,11 +6,9 @@
package space.kscience.kmath.linear package space.kscience.kmath.linear
import space.kscience.attributes.Attributes import space.kscience.attributes.Attributes
import space.kscience.attributes.SafeType
public class TransposedMatrix<T>(public val origin: Matrix<T>) : Matrix<T> { public class TransposedMatrix<T>(public val origin: Matrix<T>) : Matrix<T> {
override val type: SafeType<T> get() = origin.type
override val rowNum: Int get() = origin.colNum override val rowNum: Int get() = origin.colNum

View File

@ -6,7 +6,6 @@
package space.kscience.kmath.linear package space.kscience.kmath.linear
import space.kscience.attributes.Attributes import space.kscience.attributes.Attributes
import space.kscience.attributes.SafeType
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
@ -16,7 +15,6 @@ import space.kscience.kmath.nd.ShapeND
* @property generator the function that provides elements. * @property generator the function that provides elements.
*/ */
public class VirtualMatrix<out T>( public class VirtualMatrix<out T>(
override val type: SafeType<T>,
override val rowNum: Int, override val rowNum: Int,
override val colNum: Int, override val colNum: Int,
override val attributes: Attributes = Attributes.EMPTY, override val attributes: Attributes = Attributes.EMPTY,
@ -31,4 +29,4 @@ public class VirtualMatrix<out T>(
public fun <T : Any> MatrixBuilder<T, *>.virtual( public fun <T : Any> MatrixBuilder<T, *>.virtual(
attributes: Attributes = Attributes.EMPTY, attributes: Attributes = Attributes.EMPTY,
generator: (i: Int, j: Int) -> T, generator: (i: Int, j: Int) -> T,
): VirtualMatrix<T> = VirtualMatrix(type, rows, columns, attributes, generator) ): VirtualMatrix<T> = VirtualMatrix(rows, columns, attributes, generator)

View File

@ -26,7 +26,7 @@ public fun <V : Comparable<V>> Buffer<V>.indicesSorted(): IntArray = permSortInd
*/ */
public fun <V : Comparable<V>> Buffer<V>.sorted(): Buffer<V> { public fun <V : Comparable<V>> Buffer<V>.sorted(): Buffer<V> {
val permutations = indicesSorted() val permutations = indicesSorted()
return VirtualBuffer(type, size) { this[permutations[it]] } return VirtualBuffer(size) { this[permutations[it]] }
} }
@UnstableKMathAPI @UnstableKMathAPI
@ -38,7 +38,7 @@ public fun <V : Comparable<V>> Buffer<V>.indicesSortedDescending(): IntArray =
*/ */
public fun <V : Comparable<V>> Buffer<V>.sortedDescending(): Buffer<V> { public fun <V : Comparable<V>> Buffer<V>.sortedDescending(): Buffer<V> {
val permutations = indicesSortedDescending() val permutations = indicesSortedDescending()
return VirtualBuffer(type, size) { this[permutations[it]] } return VirtualBuffer(size) { this[permutations[it]] }
} }
@UnstableKMathAPI @UnstableKMathAPI
@ -47,7 +47,7 @@ public fun <V, C : Comparable<C>> Buffer<V>.indicesSortedBy(selector: (V) -> C):
public fun <V, C : Comparable<C>> Buffer<V>.sortedBy(selector: (V) -> C): Buffer<V> { public fun <V, C : Comparable<C>> Buffer<V>.sortedBy(selector: (V) -> C): Buffer<V> {
val permutations = indicesSortedBy(selector) val permutations = indicesSortedBy(selector)
return VirtualBuffer(type, size) { this[permutations[it]] } return VirtualBuffer(size) { this[permutations[it]] }
} }
@UnstableKMathAPI @UnstableKMathAPI
@ -56,7 +56,7 @@ public fun <V, C : Comparable<C>> Buffer<V>.indicesSortedByDescending(selector:
public fun <V, C : Comparable<C>> Buffer<V>.sortedByDescending(selector: (V) -> C): Buffer<V> { public fun <V, C : Comparable<C>> Buffer<V>.sortedByDescending(selector: (V) -> C): Buffer<V> {
val permutations = indicesSortedByDescending(selector) val permutations = indicesSortedByDescending(selector)
return VirtualBuffer(type, size) { this[permutations[it]] } return VirtualBuffer(size) { this[permutations[it]] }
} }
@UnstableKMathAPI @UnstableKMathAPI
@ -68,7 +68,7 @@ public fun <V> Buffer<V>.indicesSortedWith(comparator: Comparator<V>): IntArray
*/ */
public fun <V> Buffer<V>.sortedWith(comparator: Comparator<V>): Buffer<V> { public fun <V> Buffer<V>.sortedWith(comparator: Comparator<V>): Buffer<V> {
val permutations = indicesSortedWith(comparator) val permutations = indicesSortedWith(comparator)
return VirtualBuffer(type,size) { this[permutations[it]] } return VirtualBuffer(size) { this[permutations[it]] }
} }
private fun <V> Buffer<V>.permSortIndicesWith(comparator: Comparator<Int>): IntArray { private fun <V> Buffer<V>.permSortIndicesWith(comparator: Comparator<Int>): IntArray {

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.BufferFactory import space.kscience.kmath.structures.BufferFactory
@ -24,8 +23,6 @@ public open class BufferND<out T>(
public open val buffer: Buffer<T>, public open val buffer: Buffer<T>,
) : StructureND<T> { ) : StructureND<T> {
override val type: SafeType<T> get() = buffer.type
@PerformancePitfall @PerformancePitfall
override operator fun get(index: IntArray): T = buffer[indices.offset(index)] override operator fun get(index: IntArray): T = buffer[indices.offset(index)]

View File

@ -5,11 +5,9 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.operations.* import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.Float64
import space.kscience.kmath.structures.Float64Buffer import space.kscience.kmath.structures.Float64Buffer
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
@ -24,8 +22,6 @@ public class Float64BufferND(
override val buffer: Float64Buffer, override val buffer: Float64Buffer,
) : MutableBufferND<Double>(indexes, buffer), MutableStructureNDOfDouble { ) : MutableBufferND<Double>(indexes, buffer), MutableStructureNDOfDouble {
override val type: SafeType<Float64> get() = Float64Field.type
override fun getDouble(index: IntArray): Double = buffer[indices.offset(index)] override fun getDouble(index: IntArray): Double = buffer[indices.offset(index)]
override fun setDouble(index: IntArray, value: Double) { override fun setDouble(index: IntArray, value: Double) {

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
@ -14,8 +13,6 @@ public class PermutedStructureND<T>(
public val permutation: (IntArray) -> IntArray, public val permutation: (IntArray) -> IntArray,
) : StructureND<T> { ) : StructureND<T> {
override val type: SafeType<T> get() = origin.type
override val shape: ShapeND override val shape: ShapeND
get() = origin.shape get() = origin.shape
@ -35,8 +32,6 @@ public class PermutedMutableStructureND<T>(
public val permutation: (IntArray) -> IntArray, public val permutation: (IntArray) -> IntArray,
) : MutableStructureND<T> { ) : MutableStructureND<T> {
override val type: SafeType<T> get() = origin.type
@OptIn(PerformancePitfall::class) @OptIn(PerformancePitfall::class)
override fun set(index: IntArray, value: T) { override fun set(index: IntArray, value: T) {
origin[permutation(index)] = value origin[permutation(index)] = value

View File

@ -5,12 +5,10 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.operations.asSequence import space.kscience.kmath.operations.asSequence
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer import space.kscience.kmath.structures.MutableBuffer
import space.kscience.kmath.structures.asMutableBuffer
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -48,8 +46,6 @@ public interface MutableStructure1D<T> : Structure1D<T>, MutableStructureND<T>,
@JvmInline @JvmInline
private value class Structure1DWrapper<out T>(val structure: StructureND<T>) : Structure1D<T> { private value class Structure1DWrapper<out T>(val structure: StructureND<T>) : Structure1D<T> {
override val type: SafeType<T> get() = structure.type
override val shape: ShapeND get() = structure.shape override val shape: ShapeND get() = structure.shape
override val size: Int get() = structure.shape[0] override val size: Int get() = structure.shape[0]
@ -65,8 +61,6 @@ private value class Structure1DWrapper<out T>(val structure: StructureND<T>) : S
*/ */
private class MutableStructure1DWrapper<T>(val structure: MutableStructureND<T>) : MutableStructure1D<T> { private class MutableStructure1DWrapper<T>(val structure: MutableStructureND<T>) : MutableStructure1D<T> {
override val type: SafeType<T> get() = structure.type
override val shape: ShapeND get() = structure.shape override val shape: ShapeND get() = structure.shape
override val size: Int get() = structure.shape[0] override val size: Int get() = structure.shape[0]
@ -81,13 +75,6 @@ private class MutableStructure1DWrapper<T>(val structure: MutableStructureND<T>)
structure[intArrayOf(index)] = value structure[intArrayOf(index)] = value
} }
@OptIn(PerformancePitfall::class)
override fun copy(): MutableBuffer<T> = structure
.elements()
.map(Pair<IntArray, T>::second)
.toMutableList()
.asMutableBuffer(type)
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
} }
@ -98,8 +85,6 @@ private class MutableStructure1DWrapper<T>(val structure: MutableStructureND<T>)
@JvmInline @JvmInline
private value class Buffer1DWrapper<out T>(val buffer: Buffer<T>) : Structure1D<T> { private value class Buffer1DWrapper<out T>(val buffer: Buffer<T>) : Structure1D<T> {
override val type: SafeType<T> get() = buffer.type
override val shape: ShapeND get() = ShapeND(buffer.size) override val shape: ShapeND get() = ShapeND(buffer.size)
override val size: Int get() = buffer.size override val size: Int get() = buffer.size
@ -113,8 +98,6 @@ private value class Buffer1DWrapper<out T>(val buffer: Buffer<T>) : Structure1D<
internal class MutableBuffer1DWrapper<T>(val buffer: MutableBuffer<T>) : MutableStructure1D<T> { internal class MutableBuffer1DWrapper<T>(val buffer: MutableBuffer<T>) : MutableStructure1D<T> {
override val type: SafeType<T> get() = buffer.type
override val shape: ShapeND get() = ShapeND(buffer.size) override val shape: ShapeND get() = ShapeND(buffer.size)
override val size: Int get() = buffer.size override val size: Int get() = buffer.size
@ -128,8 +111,6 @@ internal class MutableBuffer1DWrapper<T>(val buffer: MutableBuffer<T>) : Mutable
buffer[index] = value buffer[index] = value
} }
override fun copy(): MutableBuffer<T> = buffer.copy()
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
} }

View File

@ -6,7 +6,6 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.Attributes import space.kscience.attributes.Attributes
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer import space.kscience.kmath.structures.MutableBuffer
@ -36,14 +35,14 @@ public interface Structure2D<out T> : StructureND<T> {
*/ */
@PerformancePitfall @PerformancePitfall
public val rows: List<Buffer<T>> public val rows: List<Buffer<T>>
get() = List(rowNum) { i -> VirtualBuffer(type, colNum) { j -> get(i, j) } } get() = List(rowNum) { i -> VirtualBuffer(colNum) { j -> get(i, j) } }
/** /**
* The buffer of columns for this structure. It gets elements from the structure dynamically. * The buffer of columns for this structure. It gets elements from the structure dynamically.
*/ */
@PerformancePitfall @PerformancePitfall
public val columns: List<Buffer<T>> public val columns: List<Buffer<T>>
get() = List(colNum) { j -> VirtualBuffer(type, rowNum) { i -> get(i, j) } } get() = List(colNum) { j -> VirtualBuffer(rowNum) { i -> get(i, j) } }
/** /**
* Retrieves an element from the structure by two indices. * Retrieves an element from the structure by two indices.
@ -79,8 +78,6 @@ public class MutableStructureNDAccessorBuffer<T>(
private val indexer: (Int) -> IntArray, private val indexer: (Int) -> IntArray,
) : MutableBuffer<T> { ) : MutableBuffer<T> {
override val type: SafeType<T> get() = structure.type
override fun set(index: Int, value: T) { override fun set(index: Int, value: T) {
structure[indexer(index)] = value structure[indexer(index)] = value
} }
@ -88,8 +85,6 @@ public class MutableStructureNDAccessorBuffer<T>(
override fun get(index: Int): T = structure[indexer(index)] override fun get(index: Int): T = structure[indexer(index)]
override fun toString(): String = "AccessorBuffer(structure=$structure, size=$size)" override fun toString(): String = "AccessorBuffer(structure=$structure, size=$size)"
override fun copy(): MutableBuffer<T> = MutableBuffer(type, size, ::get)
} }
/** /**
@ -130,8 +125,6 @@ public interface MutableStructure2D<T> : Structure2D<T>, MutableStructureND<T> {
@JvmInline @JvmInline
private value class Structure2DWrapper<out T>(val structure: StructureND<T>) : Structure2D<T> { private value class Structure2DWrapper<out T>(val structure: StructureND<T>) : Structure2D<T> {
override val type: SafeType<T> get() = structure.type
override val shape: ShapeND get() = structure.shape override val shape: ShapeND get() = structure.shape
override val rowNum: Int get() = shape[0] override val rowNum: Int get() = shape[0]
@ -152,8 +145,6 @@ private value class Structure2DWrapper<out T>(val structure: StructureND<T>) : S
*/ */
private class MutableStructure2DWrapper<T>(val structure: MutableStructureND<T>) : MutableStructure2D<T> { private class MutableStructure2DWrapper<T>(val structure: MutableStructureND<T>) : MutableStructure2D<T> {
override val type: SafeType<T> get() = structure.type
override val shape: ShapeND get() = structure.shape override val shape: ShapeND get() = structure.shape
override val rowNum: Int get() = shape[0] override val rowNum: Int get() = shape[0]

View File

@ -5,7 +5,10 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.* import space.kscience.attributes.Attribute
import space.kscience.attributes.AttributeContainer
import space.kscience.attributes.Attributes
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.linear.LinearSpace import space.kscience.kmath.linear.LinearSpace
import space.kscience.kmath.operations.Ring import space.kscience.kmath.operations.Ring
@ -24,7 +27,7 @@ public interface StructureAttribute<T> : Attribute<T>
* *
* @param T the type of items. * @param T the type of items.
*/ */
public interface StructureND<out T> : AttributeContainer, WithShape, WithType<T> { public interface StructureND<out T> : AttributeContainer, WithShape {
/** /**
* The shape of structure i.e., non-empty sequence of non-negative integers that specify sizes of dimensions for * The shape of structure i.e., non-empty sequence of non-negative integers that specify sizes of dimensions for
* this structure. * this structure.

View File

@ -5,13 +5,10 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
public open class VirtualStructureND<T>( public open class VirtualStructureND<T>(
override val type: SafeType<T>,
override val shape: ShapeND, override val shape: ShapeND,
public val producer: (IntArray) -> T, public val producer: (IntArray) -> T,
) : StructureND<T> { ) : StructureND<T> {
@ -27,10 +24,10 @@ public open class VirtualStructureND<T>(
public class VirtualDoubleStructureND( public class VirtualDoubleStructureND(
shape: ShapeND, shape: ShapeND,
producer: (IntArray) -> Double, producer: (IntArray) -> Double,
) : VirtualStructureND<Double>(safeTypeOf(), shape, producer) ) : VirtualStructureND<Double>(shape, producer)
@UnstableKMathAPI @UnstableKMathAPI
public class VirtualIntStructureND( public class VirtualIntStructureND(
shape: ShapeND, shape: ShapeND,
producer: (IntArray) -> Int, producer: (IntArray) -> Int,
) : VirtualStructureND<Int>(safeTypeOf(), shape, producer) ) : VirtualStructureND<Int>(shape, producer)

View File

@ -10,7 +10,7 @@ import space.kscience.kmath.PerformancePitfall
@OptIn(PerformancePitfall::class) @OptIn(PerformancePitfall::class)
public fun <T> StructureND<T>.roll(axis: Int, step: Int = 1): StructureND<T> { public fun <T> StructureND<T>.roll(axis: Int, step: Int = 1): StructureND<T> {
require(axis in shape.indices) { "Axis $axis is outside of shape dimensions: [0, ${shape.size})" } require(axis in shape.indices) { "Axis $axis is outside of shape dimensions: [0, ${shape.size})" }
return VirtualStructureND(type, shape) { index -> return VirtualStructureND(shape) { index ->
val newIndex: IntArray = IntArray(index.size) { indexAxis -> val newIndex: IntArray = IntArray(index.size) { indexAxis ->
if (indexAxis == axis) { if (indexAxis == axis) {
(index[indexAxis] + step).mod(shape[indexAxis]) (index[indexAxis] + step).mod(shape[indexAxis])
@ -26,7 +26,7 @@ public fun <T> StructureND<T>.roll(axis: Int, step: Int = 1): StructureND<T> {
public fun <T> StructureND<T>.roll(pair: Pair<Int, Int>, vararg others: Pair<Int, Int>): StructureND<T> { public fun <T> StructureND<T>.roll(pair: Pair<Int, Int>, vararg others: Pair<Int, Int>): StructureND<T> {
val axisMap: Map<Int, Int> = mapOf(pair, *others) val axisMap: Map<Int, Int> = mapOf(pair, *others)
require(axisMap.keys.all { it in shape.indices }) { "Some of axes ${axisMap.keys} is outside of shape dimensions: [0, ${shape.size})" } require(axisMap.keys.all { it in shape.indices }) { "Some of axes ${axisMap.keys} is outside of shape dimensions: [0, ${shape.size})" }
return VirtualStructureND(type, shape) { index -> return VirtualStructureND(shape) { index ->
val newIndex: IntArray = IntArray(index.size) { indexAxis -> val newIndex: IntArray = IntArray(index.size) { indexAxis ->
val offset = axisMap[indexAxis] ?: 0 val offset = axisMap[indexAxis] ?: 0
(index[indexAxis] + offset).mod(shape[indexAxis]) (index[indexAxis] + offset).mod(shape[indexAxis])

View File

@ -5,14 +5,9 @@
package space.kscience.kmath.nd package space.kscience.kmath.nd
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.operations.Float64Field
import space.kscience.kmath.operations.Int32Field
import space.kscience.kmath.structures.Float64
public interface StructureNDOfDouble : StructureND<Double> { public interface StructureNDOfDouble : StructureND<Double> {
override val type: SafeType<Float64> get() = Float64Field.type
/** /**
* Guaranteed non-blocking access to content * Guaranteed non-blocking access to content
@ -42,8 +37,6 @@ public fun MutableStructureND<Double>.getDouble(index: IntArray): Double =
public interface StructureNDOfInt : StructureND<Int> { public interface StructureNDOfInt : StructureND<Int> {
override val type: SafeType<Int> get() = Int32Field.type
/** /**
* Guaranteed non-blocking access to content * Guaranteed non-blocking access to content
*/ */

View File

@ -5,8 +5,7 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType import kotlin.jvm.JvmInline
import space.kscience.attributes.safeTypeOf
/** /**
* [MutableBuffer] implementation over [Array]. * [MutableBuffer] implementation over [Array].
@ -14,7 +13,8 @@ import space.kscience.attributes.safeTypeOf
* @param T the type of elements contained in the buffer. * @param T the type of elements contained in the buffer.
* @property array The underlying array. * @property array The underlying array.
*/ */
public class ArrayBuffer<T>(override val type: SafeType<T>, internal val array: Array<T>) : MutableBuffer<T> { @JvmInline
public value class ArrayBuffer<T>(internal val array: Array<T>) : MutableBuffer<T> {
// Can't inline because array is invariant // Can't inline because array is invariant
override val size: Int get() = array.size override val size: Int get() = array.size
@ -25,7 +25,6 @@ public class ArrayBuffer<T>(override val type: SafeType<T>, internal val array:
} }
override operator fun iterator(): Iterator<T> = array.iterator() override operator fun iterator(): Iterator<T> = array.iterator()
override fun copy(): MutableBuffer<T> = ArrayBuffer(type, array.copyOf())
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
} }
@ -33,9 +32,4 @@ public class ArrayBuffer<T>(override val type: SafeType<T>, internal val array:
/** /**
* Returns an [ArrayBuffer] that wraps the original array. * Returns an [ArrayBuffer] that wraps the original array.
*/ */
public fun <T> Array<T>.asBuffer(type: SafeType<T>): ArrayBuffer<T> = ArrayBuffer(type, this) public fun <T> Array<T>.asBuffer(): ArrayBuffer<T> = ArrayBuffer( this)
/**
* Returns an [ArrayBuffer] that wraps the original array.
*/
public inline fun <reified T> Array<T>.asBuffer(): ArrayBuffer<T> = ArrayBuffer(safeTypeOf<T>(), this)

View File

@ -66,7 +66,7 @@ public inline fun <reified T> MutableBufferFactory(): MutableBufferFactory<T> =
* *
* @param T the type of elements contained in the buffer. * @param T the type of elements contained in the buffer.
*/ */
public interface Buffer<out T> : WithSize, WithType<T> { public interface Buffer<out T> : WithSize {
/** /**
* The size of this buffer. * The size of this buffer.
*/ */
@ -120,7 +120,7 @@ public fun <T> Buffer(
typeOf<Int>() -> MutableBuffer.int(size) { initializer(it) as Int } as Buffer<T> typeOf<Int>() -> MutableBuffer.int(size) { initializer(it) as Int } as Buffer<T>
typeOf<Long>() -> MutableBuffer.long(size) { initializer(it) as Long } as Buffer<T> typeOf<Long>() -> MutableBuffer.long(size) { initializer(it) as Long } as Buffer<T>
typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as Buffer<T> typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as Buffer<T>
else -> List(size, initializer).asBuffer(type) else -> List(size, initializer).asBuffer()
} }
/** /**
@ -139,7 +139,7 @@ public inline fun <reified T> Buffer(size: Int, initializer: (Int) -> T): Buffer
typeOf<Int>() -> MutableBuffer.int(size) { initializer(it) as Int } as Buffer<T> typeOf<Int>() -> MutableBuffer.int(size) { initializer(it) as Int } as Buffer<T>
typeOf<Long>() -> MutableBuffer.long(size) { initializer(it) as Long } as Buffer<T> typeOf<Long>() -> MutableBuffer.long(size) { initializer(it) as Long } as Buffer<T>
typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as Buffer<T> typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as Buffer<T>
else -> List(size, initializer).asBuffer(type) else -> List(size, initializer).asBuffer()
} }
} }
@ -172,7 +172,6 @@ public fun <T> Buffer<T>.last(): T {
* @param T the type of elements provided by the buffer. * @param T the type of elements provided by the buffer.
*/ */
public class VirtualBuffer<out T>( public class VirtualBuffer<out T>(
override val type: SafeType<T>,
override val size: Int, override val size: Int,
private val generator: (Int) -> T, private val generator: (Int) -> T,
) : Buffer<T> { ) : Buffer<T> {
@ -185,11 +184,3 @@ public class VirtualBuffer<out T>(
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
} }
/**
* Inline builder for [VirtualBuffer]
*/
public inline fun <reified T> VirtualBuffer(
size: Int,
noinline generator: (Int) -> T,
): VirtualBuffer<T> = VirtualBuffer(safeTypeOf(), size, generator)

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.kmath.nd.Structure2D import space.kscience.kmath.nd.Structure2D
/** /**
@ -33,7 +32,6 @@ internal class BufferAccessor2D<T>(
// ) { (i, j) -> get(i, j) }.as2D() // ) { (i, j) -> get(i, j) }.as2D()
inner class Row(val buffer: MutableBuffer<T>, val rowIndex: Int) : MutableBuffer<T> { inner class Row(val buffer: MutableBuffer<T>, val rowIndex: Int) : MutableBuffer<T> {
override val type: SafeType<T> get() = buffer.type
override val size: Int get() = colNum override val size: Int get() = colNum
@ -43,7 +41,6 @@ internal class BufferAccessor2D<T>(
buffer[rowIndex, index] = value buffer[rowIndex, index] = value
} }
override fun copy(): MutableBuffer<T> = factory(colNum) { get(it) }
override operator fun iterator(): Iterator<T> = (0 until colNum).map(::get).iterator() override operator fun iterator(): Iterator<T> = (0 until colNum).map(::get).iterator()
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
/** /**
@ -14,8 +13,6 @@ import space.kscience.kmath.UnstableKMathAPI
public interface BufferView<T> : Buffer<T> { public interface BufferView<T> : Buffer<T> {
public val origin: Buffer<T> public val origin: Buffer<T>
override val type: SafeType<T> get() = origin.type
/** /**
* Get the index in [origin] buffer from index in this buffer. * Get the index in [origin] buffer from index in this buffer.
* Return -1 if element not present in the original buffer * Return -1 if element not present in the original buffer
@ -190,9 +187,7 @@ public class PermutedMutableBuffer<T>(
origin[permutations[index]] = value origin[permutations[index]] = value
} }
override fun copy(): MutableBuffer<T> = PermutedMutableBuffer(origin.copy(), permutations)
//TODO Probably could be optimized //TODO Probably could be optimized
override fun iterator(): Iterator<T> = permutations.asSequence().map { origin[it] }.iterator() override fun iterator(): Iterator<T> = permutations.asSequence().map { origin[it] }.iterator()
@UnstableKMathAPI @UnstableKMathAPI

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.experimental.and import kotlin.experimental.and
/** /**
@ -60,8 +58,6 @@ public class FlaggedDoubleBuffer(
public val flags: ByteArray public val flags: ByteArray
) : FlaggedBuffer<Double?>, Buffer<Double?> { ) : FlaggedBuffer<Double?>, Buffer<Double?> {
override val type: SafeType<Double?> = safeTypeOf()
init { init {
require(values.size == flags.size) { "Values and flags must have the same dimensions" } require(values.size == flags.size) { "Values and flags must have the same dimensions" }
} }

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -18,8 +16,6 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Float32Buffer(public val array: FloatArray) : PrimitiveBuffer<Float> { public value class Float32Buffer(public val array: FloatArray) : PrimitiveBuffer<Float> {
override val type: SafeType<Float32> get() = safeTypeOf<Float32>()
override val size: Int get() = array.size override val size: Int get() = array.size
override operator fun get(index: Int): Float = array[index] override operator fun get(index: Int): Float = array[index]
@ -30,8 +26,6 @@ public value class Float32Buffer(public val array: FloatArray) : PrimitiveBuffer
override operator fun iterator(): FloatIterator = array.iterator() override operator fun iterator(): FloatIterator = array.iterator()
override fun copy(): MutableBuffer<Float> =
Float32Buffer(array.copyOf())
} }
public typealias FloatBuffer = Float32Buffer public typealias FloatBuffer = Float32Buffer

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import space.kscience.kmath.operations.BufferTransform import space.kscience.kmath.operations.BufferTransform
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
@ -18,8 +16,6 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Float64Buffer(public val array: DoubleArray) : PrimitiveBuffer<Double> { public value class Float64Buffer(public val array: DoubleArray) : PrimitiveBuffer<Double> {
override val type: SafeType<Double> get() = safeTypeOf()
override val size: Int get() = array.size override val size: Int get() = array.size
override operator fun get(index: Int): Double = array[index] override operator fun get(index: Int): Double = array[index]
@ -30,8 +26,6 @@ public value class Float64Buffer(public val array: DoubleArray) : PrimitiveBuffe
override operator fun iterator(): DoubleIterator = array.iterator() override operator fun iterator(): DoubleIterator = array.iterator()
override fun copy(): Float64Buffer = Float64Buffer(array.copyOf())
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
public companion object { public companion object {

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -17,7 +15,7 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Int16Buffer(public val array: ShortArray) : MutableBuffer<Short> { public value class Int16Buffer(public val array: ShortArray) : MutableBuffer<Short> {
override val type: SafeType<Short> get() = safeTypeOf()
override val size: Int get() = array.size override val size: Int get() = array.size
override operator fun get(index: Int): Short = array[index] override operator fun get(index: Int): Short = array[index]
@ -27,7 +25,6 @@ public value class Int16Buffer(public val array: ShortArray) : MutableBuffer<Sho
} }
override operator fun iterator(): ShortIterator = array.iterator() override operator fun iterator(): ShortIterator = array.iterator()
override fun copy(): MutableBuffer<Short> = Int16Buffer(array.copyOf())
} }
public typealias ShortBuffer = Int16Buffer public typealias ShortBuffer = Int16Buffer

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -17,7 +15,6 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Int32Buffer(public val array: IntArray) : PrimitiveBuffer<Int> { public value class Int32Buffer(public val array: IntArray) : PrimitiveBuffer<Int> {
override val type: SafeType<Int> get() = safeTypeOf()
override val size: Int get() = array.size override val size: Int get() = array.size
@ -29,7 +26,6 @@ public value class Int32Buffer(public val array: IntArray) : PrimitiveBuffer<Int
override operator fun iterator(): IntIterator = array.iterator() override operator fun iterator(): IntIterator = array.iterator()
override fun copy(): Int32Buffer = Int32Buffer(array.copyOf())
} }
public typealias IntBuffer = Int32Buffer public typealias IntBuffer = Int32Buffer

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -17,8 +15,6 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Int64Buffer(public val array: LongArray) : PrimitiveBuffer<Long> { public value class Int64Buffer(public val array: LongArray) : PrimitiveBuffer<Long> {
override val type: SafeType<Long> get() = safeTypeOf()
override val size: Int get() = array.size override val size: Int get() = array.size
override operator fun get(index: Int): Long = array[index] override operator fun get(index: Int): Long = array[index]
@ -29,8 +25,6 @@ public value class Int64Buffer(public val array: LongArray) : PrimitiveBuffer<Lo
override operator fun iterator(): LongIterator = array.iterator() override operator fun iterator(): LongIterator = array.iterator()
override fun copy(): MutableBuffer<Long> =
Int64Buffer(array.copyOf())
} }
public typealias LongBuffer = Int64Buffer public typealias LongBuffer = Int64Buffer

View File

@ -5,8 +5,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import kotlin.jvm.JvmInline import kotlin.jvm.JvmInline
/** /**
@ -17,8 +15,6 @@ import kotlin.jvm.JvmInline
@JvmInline @JvmInline
public value class Int8Buffer(public val array: ByteArray) : MutableBuffer<Byte> { public value class Int8Buffer(public val array: ByteArray) : MutableBuffer<Byte> {
override val type: SafeType<Byte> get() = safeTypeOf()
override val size: Int get() = array.size override val size: Int get() = array.size
override operator fun get(index: Int): Byte = array[index] override operator fun get(index: Int): Byte = array[index]
@ -28,7 +24,6 @@ public value class Int8Buffer(public val array: ByteArray) : MutableBuffer<Byte>
} }
override operator fun iterator(): ByteIterator = array.iterator() override operator fun iterator(): ByteIterator = array.iterator()
override fun copy(): MutableBuffer<Byte> = Int8Buffer(array.copyOf())
} }
/** /**

View File

@ -5,16 +5,13 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
/** /**
* [Buffer] implementation over [List]. * [Buffer] implementation over [List].
* *
* @param T the type of elements contained in the buffer. * @param T the type of elements contained in the buffer.
* @property list The underlying list. * @property list The underlying list.
*/ */
public class ListBuffer<T>(override val type: SafeType<T>, public val list: List<T>) : Buffer<T> { public class ListBuffer<T>(public val list: List<T>) : Buffer<T> {
override val size: Int get() = list.size override val size: Int get() = list.size
@ -28,12 +25,7 @@ public class ListBuffer<T>(override val type: SafeType<T>, public val list: List
/** /**
* Returns an [ListBuffer] that wraps the original list. * Returns an [ListBuffer] that wraps the original list.
*/ */
public fun <T> List<T>.asBuffer(type: SafeType<T>): ListBuffer<T> = ListBuffer(type, this) public fun <T> List<T>.asBuffer(): ListBuffer<T> = ListBuffer(this)
/**
* Returns an [ListBuffer] that wraps the original list.
*/
public inline fun <reified T> List<T>.asBuffer(): ListBuffer<T> = asBuffer(safeTypeOf())
/** /**
* [MutableBuffer] implementation over [MutableList]. * [MutableBuffer] implementation over [MutableList].
@ -41,7 +33,7 @@ public inline fun <reified T> List<T>.asBuffer(): ListBuffer<T> = asBuffer(safeT
* @param T the type of elements contained in the buffer. * @param T the type of elements contained in the buffer.
* @property list The underlying list. * @property list The underlying list.
*/ */
public class MutableListBuffer<T>(override val type: SafeType<T>, public val list: MutableList<T>) : MutableBuffer<T> { public class MutableListBuffer<T>(public val list: MutableList<T>) : MutableBuffer<T> {
override val size: Int get() = list.size override val size: Int get() = list.size
@ -52,7 +44,6 @@ public class MutableListBuffer<T>(override val type: SafeType<T>, public val lis
} }
override operator fun iterator(): Iterator<T> = list.iterator() override operator fun iterator(): Iterator<T> = list.iterator()
override fun copy(): MutableBuffer<T> = MutableListBuffer(type, ArrayList(list))
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)
} }
@ -61,15 +52,4 @@ public class MutableListBuffer<T>(override val type: SafeType<T>, public val lis
/** /**
* Returns an [MutableListBuffer] that wraps the original list. * Returns an [MutableListBuffer] that wraps the original list.
*/ */
public fun <T> MutableList<T>.asMutableBuffer(type: SafeType<T>): MutableListBuffer<T> = MutableListBuffer( public fun <T> MutableList<T>.asMutableBuffer(): MutableListBuffer<T> = MutableListBuffer(this)
type,
this
)
/**
* Returns an [MutableListBuffer] that wraps the original list.
*/
public inline fun <reified T> MutableList<T>.asMutableBuffer(): MutableListBuffer<T> = MutableListBuffer(
safeTypeOf(),
this
)

View File

@ -14,16 +14,13 @@ import kotlin.reflect.typeOf
* *
* @param T the type of elements contained in the buffer. * @param T the type of elements contained in the buffer.
*/ */
public interface MutableBuffer<T> : Buffer<T> { public interface MutableBuffer<T> : Buffer<T>{
/** /**
* Sets the array element at the specified [index] to the specified [value]. * Sets the array element at the specified [index] to the specified [value].
*/ */
public operator fun set(index: Int, value: T) public operator fun set(index: Int, value: T)
/**
* Returns a shallow copy of the buffer.
*/
public fun copy(): MutableBuffer<T>
public companion object { public companion object {
/** /**
@ -65,6 +62,25 @@ public interface MutableBuffer<T> : Buffer<T> {
} }
/**
* Returns a shallow copy of the buffer.
*/
public fun <T> Buffer<T>.copy(bufferFactory: BufferFactory<T>): Buffer<T> =if(this is ArrayBuffer){
ArrayBuffer(array.copyOf())
}else{
bufferFactory(size,::get)
}
/**
* Returns a mutable shallow copy of the buffer.
*/
public fun <T> Buffer<T>.mutableCopy(bufferFactory: MutableBufferFactory<T>): MutableBuffer<T> =if(this is ArrayBuffer){
ArrayBuffer(array.copyOf())
}else{
bufferFactory(size,::get)
}
/** /**
* Creates a [MutableBuffer] of given [type]. If the type is primitive, specialized buffers are used * Creates a [MutableBuffer] of given [type]. If the type is primitive, specialized buffers are used
* ([Int32Buffer], [Float64Buffer], etc.), [ListBuffer] is returned otherwise. * ([Int32Buffer], [Float64Buffer], etc.), [ListBuffer] is returned otherwise.
@ -84,7 +100,7 @@ public inline fun <T> MutableBuffer(
typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as MutableBuffer<T> typeOf<Float>() -> MutableBuffer.float(size) { initializer(it) as Float } as MutableBuffer<T>
typeOf<Double>() -> MutableBuffer.double(size) { initializer(it) as Double } as MutableBuffer<T> typeOf<Double>() -> MutableBuffer.double(size) { initializer(it) as Double } as MutableBuffer<T>
//TODO add unsigned types //TODO add unsigned types
else -> MutableListBuffer(type, MutableList(size, initializer)) else -> MutableListBuffer(MutableList(size, initializer))
} }
/** /**

View File

@ -38,7 +38,7 @@ class MatrixTest {
@Test @Test
fun testMatrixExtension() = Double.algebra.linearSpace.run { fun testMatrixExtension() = Double.algebra.linearSpace.run {
val transitionMatrix: Matrix<Double> = VirtualMatrix(type,6, 6) { row, col -> val transitionMatrix: Matrix<Double> = VirtualMatrix(6, 6) { row, col ->
when { when {
col == 0 -> .50 col == 0 -> .50
row + 1 == col -> .50 row + 1 == col -> .50

View File

@ -33,7 +33,7 @@ public fun <T> MutableBuffer.Companion.parallel(
typeOf<Double>() -> IntStream.range(0, size).parallel().mapToDouble { initializer(it) as Float64 }.toArray() typeOf<Double>() -> IntStream.range(0, size).parallel().mapToDouble { initializer(it) as Float64 }.toArray()
.asBuffer() as MutableBuffer<T> .asBuffer() as MutableBuffer<T>
//TODO add unsigned types //TODO add unsigned types
else -> IntStream.range(0, size).parallel().mapToObj { initializer(it) }.collect(Collectors.toList<T>()).asMutableBuffer(type) else -> IntStream.range(0, size).parallel().mapToObj { initializer(it) }.collect(Collectors.toList<T>()).asMutableBuffer()
} }
public class ParallelBufferFactory<T>(override val type: SafeType<T>) : MutableBufferFactory<T> { public class ParallelBufferFactory<T>(override val type: SafeType<T>) : MutableBufferFactory<T> {

View File

@ -37,7 +37,7 @@ class ParallelMatrixTest {
@Test @Test
fun testMatrixExtension() = Float64Field.linearSpace.parallel{ fun testMatrixExtension() = Float64Field.linearSpace.parallel{
val transitionMatrix: Matrix<Double> = VirtualMatrix(type,6, 6) { row, col -> val transitionMatrix: Matrix<Double> = VirtualMatrix(6, 6) { row, col ->
when { when {
col == 0 -> .50 col == 0 -> .50
row + 1 == col -> .50 row + 1 == col -> .50

View File

@ -7,22 +7,19 @@ package space.kscience.kmath.streaming
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import space.kscience.attributes.SafeType
import space.kscience.kmath.operations.Group import space.kscience.kmath.operations.Group
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.*
import space.kscience.kmath.structures.MutableBuffer
import space.kscience.kmath.structures.VirtualBuffer
/** /**
* Thread-safe ring buffer * Thread-safe ring buffer
*/ */
public class RingBuffer<T>( public class RingBuffer<T>(
private val buffer: MutableBuffer<T>, private val buffer: MutableBuffer<T>,
private val bufferFactory: BufferFactory<T>,
private var startIndex: Int = 0, private var startIndex: Int = 0,
size: Int = 0, size: Int = 0,
) : Buffer<T> { ) : Buffer<T> {
override val type: SafeType<T> get() = buffer.type
private val mutex: Mutex = Mutex() private val mutex: Mutex = Mutex()
@ -43,7 +40,7 @@ public class RingBuffer<T>(
override operator fun iterator(): Iterator<T> = object : AbstractIterator<T>() { override operator fun iterator(): Iterator<T> = object : AbstractIterator<T>() {
private var count = size private var count = size
private var index = startIndex private var index = startIndex
val copy = buffer.copy() val copy = buffer.copy(bufferFactory)
override fun computeNext() { override fun computeNext() {
if (count == 0) done() else { if (count == 0) done() else {
@ -58,8 +55,8 @@ public class RingBuffer<T>(
* A safe snapshot operation * A safe snapshot operation
*/ */
public suspend fun snapshot(): Buffer<T> = mutex.withLock { public suspend fun snapshot(): Buffer<T> = mutex.withLock {
val copy = buffer.copy() val copy = buffer.copy(bufferFactory)
VirtualBuffer(type, size) { i -> copy[startIndex.forward(i)] } VirtualBuffer(size) { i -> copy[startIndex.forward(i)] }
} }
public suspend fun push(element: T) { public suspend fun push(element: T) {
@ -76,7 +73,7 @@ public class RingBuffer<T>(
public inline fun <reified T : Any> RingBuffer(size: Int, empty: T): RingBuffer<T> { public inline fun <reified T : Any> RingBuffer(size: Int, empty: T): RingBuffer<T> {
val buffer = MutableBuffer(size) { empty } val buffer = MutableBuffer(size) { empty }
return RingBuffer(buffer) return RingBuffer(buffer, BufferFactory())
} }
/** /**
@ -84,5 +81,5 @@ public inline fun <reified T : Any> RingBuffer(size: Int, empty: T): RingBuffer<
*/ */
public fun <T> RingBuffer(size: Int, algebra: Group<T>): RingBuffer<T> { public fun <T> RingBuffer(size: Int, algebra: Group<T>): RingBuffer<T> {
val buffer: MutableBuffer<T> = MutableBuffer(algebra.type, size) { algebra.zero } val buffer: MutableBuffer<T> = MutableBuffer(algebra.type, size) { algebra.zero }
return RingBuffer(buffer) return RingBuffer(buffer, algebra.bufferFactory)
} }

View File

@ -6,8 +6,6 @@
package space.kscience.kmath.structures package space.kscience.kmath.structures
import kotlinx.coroutines.* import kotlinx.coroutines.*
import space.kscience.attributes.SafeType
import space.kscience.attributes.safeTypeOf
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.coroutines.Math import space.kscience.kmath.coroutines.Math
import space.kscience.kmath.nd.ColumnStrides import space.kscience.kmath.nd.ColumnStrides
@ -16,7 +14,6 @@ import space.kscience.kmath.nd.StructureND
public class LazyStructureND<out T>( public class LazyStructureND<out T>(
public val scope: CoroutineScope, public val scope: CoroutineScope,
override val type: SafeType<T>,
override val shape: ShapeND, override val shape: ShapeND,
public val function: suspend (IntArray) -> T, public val function: suspend (IntArray) -> T,
) : StructureND<T> { ) : StructureND<T> {
@ -54,10 +51,10 @@ public suspend fun <T> StructureND<T>.await(index: IntArray): T =
public inline fun <T, reified R> StructureND<T>.mapAsyncIndexed( public inline fun <T, reified R> StructureND<T>.mapAsyncIndexed(
scope: CoroutineScope, scope: CoroutineScope,
crossinline function: suspend (T, index: IntArray) -> R, crossinline function: suspend (T, index: IntArray) -> R,
): LazyStructureND<R> = LazyStructureND(scope, safeTypeOf(), shape) { index -> function(get(index), index) } ): LazyStructureND<R> = LazyStructureND(scope, shape) { index -> function(get(index), index) }
@OptIn(PerformancePitfall::class) @OptIn(PerformancePitfall::class)
public inline fun <T, reified R> StructureND<T>.mapAsync( public inline fun <T, reified R> StructureND<T>.mapAsync(
scope: CoroutineScope, scope: CoroutineScope,
crossinline function: suspend (T) -> R, crossinline function: suspend (T) -> R,
): LazyStructureND<R> = LazyStructureND(scope, safeTypeOf(), shape) { index -> function(get(index)) } ): LazyStructureND<R> = LazyStructureND(scope, shape) { index -> function(get(index)) }

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.dimensions package space.kscience.kmath.dimensions
import space.kscience.attributes.SafeType
import space.kscience.kmath.linear.* import space.kscience.kmath.linear.*
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
import space.kscience.kmath.nd.Structure2D import space.kscience.kmath.nd.Structure2D
@ -50,8 +49,6 @@ public value class DMatrixWrapper<out T, R : Dimension, C : Dimension>(
private val structure: Structure2D<T>, private val structure: Structure2D<T>,
) : DMatrix<T, R, C> { ) : DMatrix<T, R, C> {
override val type: SafeType<T> get() = structure.type
override val shape: ShapeND get() = structure.shape override val shape: ShapeND get() = structure.shape
override val rowNum: Int get() = shape[0] override val rowNum: Int get() = shape[0]
override val colNum: Int get() = shape[1] override val colNum: Int get() = shape[1]
@ -81,8 +78,6 @@ public interface DPoint<out T, D : Dimension> : Point<T> {
@JvmInline @JvmInline
public value class DPointWrapper<out T, D : Dimension>(public val point: Point<T>) : DPoint<T, D> { public value class DPointWrapper<out T, D : Dimension>(public val point: Point<T>) : DPoint<T, D> {
override val type: SafeType<T> get() = point.type
override val size: Int get() = point.size override val size: Int get() = point.size
override operator fun get(index: Int): T = point[index] override operator fun get(index: Int): T = point[index]

View File

@ -38,7 +38,6 @@ public class EjmlDoubleVector<out M : DMatrix>(override val origin: M) : EjmlVec
require(origin.numRows == 1) { "The origin matrix must have only one row to form a vector" } require(origin.numRows == 1) { "The origin matrix must have only one row to form a vector" }
} }
override val type: SafeType<Double> get() = safeTypeOf()
override operator fun get(index: Int): Double = origin[0, index] override operator fun get(index: Int): Double = origin[0, index]
} }
@ -51,8 +50,6 @@ public class EjmlFloatVector<out M : FMatrix>(override val origin: M) : EjmlVect
require(origin.numRows == 1) { "The origin matrix must have only one row to form a vector" } require(origin.numRows == 1) { "The origin matrix must have only one row to form a vector" }
} }
override val type: SafeType<Float> get() = safeTypeOf()
override operator fun get(index: Int): Float = origin[0, index] override operator fun get(index: Int): Float = origin[0, index]
} }
@ -60,8 +57,6 @@ public class EjmlFloatVector<out M : FMatrix>(override val origin: M) : EjmlVect
* [EjmlMatrix] specialization for [Double]. * [EjmlMatrix] specialization for [Double].
*/ */
public class EjmlDoubleMatrix<out M : DMatrix>(override val origin: M) : EjmlMatrix<Double, M>(origin) { public class EjmlDoubleMatrix<out M : DMatrix>(override val origin: M) : EjmlMatrix<Double, M>(origin) {
override val type: SafeType<Double> get() = safeTypeOf()
override operator fun get(i: Int, j: Int): Double = origin[i, j] override operator fun get(i: Int, j: Int): Double = origin[i, j]
} }
@ -69,7 +64,6 @@ public class EjmlDoubleMatrix<out M : DMatrix>(override val origin: M) : EjmlMat
* [EjmlMatrix] specialization for [Float]. * [EjmlMatrix] specialization for [Float].
*/ */
public class EjmlFloatMatrix<out M : FMatrix>(override val origin: M) : EjmlMatrix<Float, M>(origin) { public class EjmlFloatMatrix<out M : FMatrix>(override val origin: M) : EjmlMatrix<Float, M>(origin) {
override val type: SafeType<Float> get() = safeTypeOf()
override operator fun get(i: Int, j: Int): Float = origin[i, j] override operator fun get(i: Int, j: Int): Float = origin[i, j]
} }

View File

@ -48,7 +48,7 @@ public fun Sequence<DoubleArray>.toMatrix(): RealMatrix = toList().let {
} }
public fun RealMatrix.repeatStackVertical(n: Int): RealMatrix = public fun RealMatrix.repeatStackVertical(n: Int): RealMatrix =
VirtualMatrix(type, rowNum * n, colNum) { row, col -> VirtualMatrix( rowNum * n, colNum) { row, col ->
get(if (row == 0) 0 else row % rowNum, col) get(if (row == 0) 0 else row % rowNum, col)
} }

View File

@ -54,14 +54,14 @@ public fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
public fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials( public fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
data: Map<T, T>, data: Map<T, T>,
): PiecewisePolynomial<T> { ): PiecewisePolynomial<T> {
val pointSet = XYColumnarData.of(data.keys.toList().asBuffer(type), data.values.toList().asBuffer(type)) val pointSet = XYColumnarData.of(data.keys.toList().asBuffer(), data.values.toList().asBuffer())
return interpolatePolynomials(pointSet) return interpolatePolynomials(pointSet)
} }
public fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials( public fun <T : Comparable<T>> PolynomialInterpolator<T>.interpolatePolynomials(
data: List<Pair<T, T>>, data: List<Pair<T, T>>,
): PiecewisePolynomial<T> { ): PiecewisePolynomial<T> {
val pointSet = XYColumnarData.of(data.map { it.first }.asBuffer(type), data.map { it.second }.asBuffer(type)) val pointSet = XYColumnarData.of(data.map { it.first }.asBuffer(), data.map { it.second }.asBuffer())
return interpolatePolynomials(pointSet) return interpolatePolynomials(pointSet)
} }

View File

@ -6,6 +6,7 @@ kscience{
jvm() jvm()
js() js()
native() native()
wasm()
useContextReceivers() useContextReceivers()
useSerialization() useSerialization()

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.geometry package space.kscience.kmath.geometry
import space.kscience.attributes.SafeType
import space.kscience.kmath.linear.Point import space.kscience.kmath.linear.Point
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
@ -34,9 +33,6 @@ public fun <T> Buffer<T>.asVector3D(): Vector3D<T> = object : Vector3D<T> {
require(this@asVector3D.size == 3) { "Buffer of size 3 is required for Vector3D" } require(this@asVector3D.size == 3) { "Buffer of size 3 is required for Vector3D" }
} }
override val type: SafeType<T> = this@asVector3D.type
override val x: T get() = this@asVector3D[0] override val x: T get() = this@asVector3D[0]
override val y: T get() = this@asVector3D[1] override val y: T get() = this@asVector3D[1]
override val z: T get() = this@asVector3D[2] override val z: T get() = this@asVector3D[2]

View File

@ -11,7 +11,6 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import space.kscience.attributes.SafeType
import space.kscience.kmath.geometry.GeometrySpace import space.kscience.kmath.geometry.GeometrySpace
import space.kscience.kmath.geometry.Vector2D import space.kscience.kmath.geometry.Vector2D
import space.kscience.kmath.operations.Float32Field import space.kscience.kmath.operations.Float32Field
@ -20,10 +19,8 @@ import space.kscience.kmath.structures.MutableBufferFactory
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.sqrt import kotlin.math.sqrt
@Serializable(Float32Space2D.VectorSerializer::class)
public interface Float32Vector2D : Vector2D<Float32>{ public typealias Float32Vector2D = Vector2D<Float32>
override val type: SafeType<Float32> get() = Float32Field.type
}
public object Float32Space2D : GeometrySpace<Vector2D<Float32>, Float32> { public object Float32Space2D : GeometrySpace<Vector2D<Float32>, Float32> {

View File

@ -11,7 +11,6 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import space.kscience.attributes.SafeType
import space.kscience.kmath.geometry.GeometrySpace import space.kscience.kmath.geometry.GeometrySpace
import space.kscience.kmath.geometry.Vector2D import space.kscience.kmath.geometry.Vector2D
import space.kscience.kmath.operations.Float64Field import space.kscience.kmath.operations.Float64Field
@ -22,10 +21,7 @@ import kotlin.math.pow
import kotlin.math.sqrt import kotlin.math.sqrt
@Serializable(Float64Space2D.VectorSerializer::class) public typealias Float64Vector2D = Vector2D<Float64>
public interface Float64Vector2D : Vector2D<Float64> {
override val type: SafeType<Float64> get() = Float64Field.type
}
@Deprecated("Use Float64Vector2D", ReplaceWith("Float64Vector2D")) @Deprecated("Use Float64Vector2D", ReplaceWith("Float64Vector2D"))
public typealias DoubleVector2D = Float64Vector2D public typealias DoubleVector2D = Float64Vector2D

View File

@ -11,7 +11,6 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import space.kscience.attributes.SafeType
import space.kscience.kmath.geometry.GeometrySpace import space.kscience.kmath.geometry.GeometrySpace
import space.kscience.kmath.geometry.Vector3D import space.kscience.kmath.geometry.Vector3D
import space.kscience.kmath.operations.Float32Field import space.kscience.kmath.operations.Float32Field
@ -20,10 +19,8 @@ import space.kscience.kmath.structures.MutableBufferFactory
import kotlin.math.pow import kotlin.math.pow
import kotlin.math.sqrt import kotlin.math.sqrt
@Serializable(Float32Space3D.VectorSerializer::class)
public interface Float32Vector3D : Vector3D<Float>{ public typealias Float32Vector3D = Vector3D<Float>
override val type: SafeType<Float32> get() = Float32Field.type
}
public object Float32Space3D : GeometrySpace<Vector3D<Float32>, Float32> { public object Float32Space3D : GeometrySpace<Vector3D<Float32>, Float32> {

View File

@ -11,7 +11,6 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
import space.kscience.attributes.SafeType
import space.kscience.kmath.geometry.GeometrySpace import space.kscience.kmath.geometry.GeometrySpace
import space.kscience.kmath.geometry.Vector3D import space.kscience.kmath.geometry.Vector3D
import space.kscience.kmath.linear.Float64LinearSpace import space.kscience.kmath.linear.Float64LinearSpace
@ -34,10 +33,7 @@ internal fun leviCivita(i: Int, j: Int, k: Int): Int = when {
else -> 0 else -> 0
} }
@Serializable(Float64Space3D.VectorSerializer::class) public typealias Float64Vector3D = Vector3D<Float64>
public interface Float64Vector3D : Vector3D<Float64> {
override val type: SafeType<Float64> get() = Float64Field.type
}
@Deprecated("Use Float64Vector3D", ReplaceWith("Float64Vector3D")) @Deprecated("Use Float64Vector3D", ReplaceWith("Float64Vector3D"))
public typealias DoubleVector3D = Float64Vector3D public typealias DoubleVector3D = Float64Vector3D

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.geometry.euclidean3d package space.kscience.kmath.geometry.euclidean3d
import space.kscience.attributes.SafeType
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.complex.* import space.kscience.kmath.complex.*
import space.kscience.kmath.geometry.* import space.kscience.kmath.geometry.*
@ -245,8 +244,6 @@ public fun Quaternion.Companion.fromEuler(
* A vector consisting of angles * A vector consisting of angles
*/ */
public data class AngleVector(override val x: Angle, override val y: Angle, override val z: Angle) : Vector3D<Angle> { public data class AngleVector(override val x: Angle, override val y: Angle, override val z: Angle) : Vector3D<Angle> {
override val type: SafeType<Angle> get() = Angle.type
public companion object public companion object
} }

View File

@ -38,7 +38,6 @@ public class space/kscience/kmath/memory/MemoryBuffer : space/kscience/kmath/str
protected final fun getMemory ()Lspace/kscience/kmath/memory/Memory; protected final fun getMemory ()Lspace/kscience/kmath/memory/Memory;
public fun getSize ()I public fun getSize ()I
protected final fun getSpec ()Lspace/kscience/kmath/memory/MemorySpec; protected final fun getSpec ()Lspace/kscience/kmath/memory/MemorySpec;
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
@ -90,7 +89,6 @@ public abstract interface class space/kscience/kmath/memory/MemoryWriter : java/
public final class space/kscience/kmath/memory/MutableMemoryBuffer : space/kscience/kmath/memory/MemoryBuffer, space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/memory/MutableMemoryBuffer : space/kscience/kmath/memory/MemoryBuffer, space/kscience/kmath/structures/MutableBuffer {
public static final field Companion Lspace/kscience/kmath/memory/MutableMemoryBuffer$Companion; public static final field Companion Lspace/kscience/kmath/memory/MutableMemoryBuffer$Companion;
public fun <init> (Lspace/kscience/kmath/memory/Memory;Lspace/kscience/kmath/memory/MemorySpec;)V public fun <init> (Lspace/kscience/kmath/memory/Memory;Lspace/kscience/kmath/memory/MemorySpec;)V
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public fun set (ILjava/lang/Object;)V public fun set (ILjava/lang/Object;)V
} }

View File

@ -5,7 +5,6 @@
package space.kscience.kmath.memory package space.kscience.kmath.memory
import space.kscience.attributes.SafeType
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer import space.kscience.kmath.structures.MutableBuffer
@ -18,8 +17,6 @@ import space.kscience.kmath.structures.MutableBuffer
*/ */
public open class MemoryBuffer<T : Any>(protected val memory: Memory, protected val spec: MemorySpec<T>) : Buffer<T> { public open class MemoryBuffer<T : Any>(protected val memory: Memory, protected val spec: MemorySpec<T>) : Buffer<T> {
override val type: SafeType<T> get() = spec.type
override val size: Int get() = memory.size / spec.objectSize override val size: Int get() = memory.size / spec.objectSize
override operator fun get(index: Int): T = memory.read { read(spec, spec.objectSize * index) } override operator fun get(index: Int): T = memory.read { read(spec, spec.objectSize * index) }
@ -56,7 +53,6 @@ public class MutableMemoryBuffer<T : Any>(
private val writer: MemoryWriter = memory.writer() private val writer: MemoryWriter = memory.writer()
override operator fun set(index: Int, value: T): Unit = writer.write(spec, spec.objectSize * index, value) override operator fun set(index: Int, value: T): Unit = writer.write(spec, spec.objectSize * index, value)
override fun copy(): MutableBuffer<T> = MutableMemoryBuffer(memory.copy(), spec)
public companion object { public companion object {
public fun <T : Any> create(spec: MemorySpec<T>, size: Int): MutableMemoryBuffer<T> = public fun <T : Any> create(spec: MemorySpec<T>, size: Int): MutableMemoryBuffer<T> =

View File

@ -30,8 +30,6 @@ public val DataType.type: SafeType<*>
@JvmInline @JvmInline
public value class MultikTensor<T>(public val array: MutableMultiArray<T, DN>) : Tensor<T> { public value class MultikTensor<T>(public val array: MutableMultiArray<T, DN>) : Tensor<T> {
@Suppress("UNCHECKED_CAST")
override val type: SafeType<T> get() = array.dtype.type as SafeType<T>
override val shape: ShapeND get() = ShapeND(array.shape) override val shape: ShapeND get() = ShapeND(array.shape)

View File

@ -202,7 +202,6 @@ public final class space/kscience/kmath/nd4j/Nd4jArrayFloatStructure : space/ksc
public fun get ([I)Ljava/lang/Float; public fun get ([I)Ljava/lang/Float;
public synthetic fun get ([I)Ljava/lang/Object; public synthetic fun get ([I)Ljava/lang/Object;
public fun getNdArray ()Lorg/nd4j/linalg/api/ndarray/INDArray; public fun getNdArray ()Lorg/nd4j/linalg/api/ndarray/INDArray;
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public fun set ([IF)V public fun set ([IF)V
public synthetic fun set ([ILjava/lang/Object;)V public synthetic fun set ([ILjava/lang/Object;)V

View File

@ -6,10 +6,8 @@
package space.kscience.kmath.nd4j package space.kscience.kmath.nd4j
import org.nd4j.linalg.api.ndarray.INDArray import org.nd4j.linalg.api.ndarray.INDArray
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.nd.* import space.kscience.kmath.nd.*
import space.kscience.kmath.operations.Float32Field
/** /**
* Represents a [StructureND] wrapping an [INDArray] object. * Represents a [StructureND] wrapping an [INDArray] object.
@ -70,8 +68,6 @@ public fun INDArray.asDoubleStructure(): Nd4jArrayStructure<Double> = Nd4jArrayD
public data class Nd4jArrayFloatStructure(override val ndArray: INDArray) : Nd4jArrayStructure<Float>() { public data class Nd4jArrayFloatStructure(override val ndArray: INDArray) : Nd4jArrayStructure<Float>() {
override val type: SafeType<Float> get() = Float32Field.type
override fun elementsIterator(): Iterator<Pair<IntArray, Float>> = ndArray.floatIterator() override fun elementsIterator(): Iterator<Pair<IntArray, Float>> = ndArray.floatIterator()
@PerformancePitfall @PerformancePitfall

View File

@ -64,7 +64,6 @@ public object ValueAndErrorField : Field<ValueAndError> {
require(values.size == ds.size) require(values.size == ds.size)
} }
override val type: SafeType<ValueAndError> get() = safeTypeOf()
override val size: Int override val size: Int
get() = values.size get() = values.size
@ -77,7 +76,6 @@ public object ValueAndErrorField : Field<ValueAndError> {
values[index] = value.dispersion values[index] = value.dispersion
} }
override fun copy(): MutableBuffer<ValueAndError> = ValueAndErrorBuffer(values.copy(), ds.copy())
} }
override val bufferFactory: MutableBufferFactory<ValueAndError> = object : MutableBufferFactory<ValueAndError> { override val bufferFactory: MutableBufferFactory<ValueAndError> = object : MutableBufferFactory<ValueAndError> {

View File

@ -10,7 +10,6 @@ import org.tensorflow.Output
import org.tensorflow.ndarray.NdArray import org.tensorflow.ndarray.NdArray
import org.tensorflow.op.core.Constant import org.tensorflow.op.core.Constant
import org.tensorflow.types.TFloat64 import org.tensorflow.types.TFloat64
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol import space.kscience.kmath.expressions.Symbol
@ -26,7 +25,6 @@ public class DoubleTensorFlowOutput(
graph: Graph, graph: Graph,
output: Output<TFloat64>, output: Output<TFloat64>,
) : TensorFlowOutput<Double, TFloat64>(graph, output) { ) : TensorFlowOutput<Double, TFloat64>(graph, output) {
override val type: SafeType<Double> get() = Float64Field.type
override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Double> = this as TFloat64 override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Double> = this as TFloat64
} }

View File

@ -10,19 +10,12 @@ import org.tensorflow.Output
import org.tensorflow.ndarray.NdArray import org.tensorflow.ndarray.NdArray
import org.tensorflow.types.TInt32 import org.tensorflow.types.TInt32
import org.tensorflow.types.TInt64 import org.tensorflow.types.TInt64
import space.kscience.attributes.SafeType
import space.kscience.kmath.operations.Int32Ring
import space.kscience.kmath.operations.Int64Ring
import space.kscience.kmath.structures.Int32
import space.kscience.kmath.structures.Int64
public class IntTensorFlowOutput( public class IntTensorFlowOutput(
graph: Graph, graph: Graph,
output: Output<TInt32>, output: Output<TInt32>,
) : TensorFlowOutput<Int, TInt32>(graph, output) { ) : TensorFlowOutput<Int, TInt32>(graph, output) {
override val type: SafeType<Int32> get() = Int32Ring.type
override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Int> = this as TInt32 override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Int> = this as TInt32
} }
@ -31,6 +24,5 @@ public class LongTensorFlowOutput(
output: Output<TInt64>, output: Output<TInt64>,
) : TensorFlowOutput<Long, TInt64>(graph, output) { ) : TensorFlowOutput<Long, TInt64>(graph, output) {
override val type: SafeType<Int64> get() = Int64Ring.type
override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Long> = this as TInt64 override fun org.tensorflow.Tensor.actualizeTensor(): NdArray<Long> = this as TInt64
} }

View File

@ -17,7 +17,6 @@ import org.tensorflow.op.core.*
import org.tensorflow.types.TInt32 import org.tensorflow.types.TInt32
import org.tensorflow.types.family.TNumber import org.tensorflow.types.family.TNumber
import org.tensorflow.types.family.TType import org.tensorflow.types.family.TType
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnsafeKMathAPI import space.kscience.kmath.UnsafeKMathAPI
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
@ -40,7 +39,8 @@ public sealed interface TensorFlowTensor<T> : Tensor<T>
/** /**
* Static (eager) in-memory TensorFlow tensor * Static (eager) in-memory TensorFlow tensor
*/ */
public class TensorFlowArray<T>(override val type: SafeType<T>, public val tensor: NdArray<T>) : Tensor<T> { @JvmInline
public value class TensorFlowArray<T>(public val tensor: NdArray<T>) : Tensor<T> {
override val shape: ShapeND get() = ShapeND(tensor.shape().asArray().toIntArray()) override val shape: ShapeND get() = ShapeND(tensor.shape().asArray().toIntArray())
@ -74,7 +74,7 @@ public abstract class TensorFlowOutput<T, TT : TType>(
internal val actualTensor by lazy { internal val actualTensor by lazy {
Session(graph).use { session -> Session(graph).use { session ->
TensorFlowArray(type, session.runner().fetch(output).run().first().actualizeTensor()) TensorFlowArray(session.runner().fetch(output).run().first().actualizeTensor())
} }
} }

View File

@ -5,12 +5,10 @@
package space.kscience.kmath.tensors.core package space.kscience.kmath.tensors.core
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnstableKMathAPI import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.nd.MutableStructureNDOfDouble import space.kscience.kmath.nd.MutableStructureNDOfDouble
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
import space.kscience.kmath.operations.DoubleField
import space.kscience.kmath.structures.* import space.kscience.kmath.structures.*
import space.kscience.kmath.tensors.core.internal.toPrettyString import space.kscience.kmath.tensors.core.internal.toPrettyString
@ -36,7 +34,7 @@ public class OffsetDoubleBuffer(
/** /**
* Copy only a part of buffer that belongs to this [OffsetDoubleBuffer] * Copy only a part of buffer that belongs to this [OffsetDoubleBuffer]
*/ */
override fun copy(): Float64Buffer = origin.array.copyOfRange(offset, offset + size).asBuffer() public fun copy(): Float64Buffer = origin.array.copyOfRange(offset, offset + size).asBuffer()
override fun iterator(): Iterator<Double> = iterator { override fun iterator(): Iterator<Double> = iterator {
for (i in indices) { for (i in indices) {
@ -90,8 +88,6 @@ public open class DoubleTensor(
final override val source: OffsetDoubleBuffer, final override val source: OffsetDoubleBuffer,
) : BufferedTensor<Double>(shape), MutableStructureNDOfDouble { ) : BufferedTensor<Double>(shape), MutableStructureNDOfDouble {
override val type: SafeType<Double> get() = DoubleField.type
init { init {
require(linearSize == source.size) { "Source buffer size must be equal tensor size" } require(linearSize == source.size) { "Source buffer size must be equal tensor size" }
} }

View File

@ -8,7 +8,6 @@ package space.kscience.kmath.tensors.core
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.nd.MutableStructure1D import space.kscience.kmath.nd.MutableStructure1D
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
import space.kscience.kmath.structures.MutableBuffer
public class DoubleTensor1D( public class DoubleTensor1D(
source: OffsetDoubleBuffer, source: OffsetDoubleBuffer,
@ -30,8 +29,6 @@ public class DoubleTensor1D(
source[index] = value source[index] = value
} }
override fun copy(): MutableBuffer<Double> = source.copy()
@PerformancePitfall @PerformancePitfall
override fun elements(): Sequence<Pair<IntArray, Double>> = super<MutableStructure1D>.elements() override fun elements(): Sequence<Pair<IntArray, Double>> = super<MutableStructure1D>.elements()
} }

View File

@ -5,10 +5,8 @@
package space.kscience.kmath.tensors.core package space.kscience.kmath.tensors.core
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
import space.kscience.kmath.operations.IntRing
import space.kscience.kmath.structures.* import space.kscience.kmath.structures.*
/** /**
@ -26,8 +24,6 @@ public class OffsetIntBuffer(
require(offset + size <= source.size) { "Maximum index must be inside source dimension" } require(offset + size <= source.size) { "Maximum index must be inside source dimension" }
} }
override val type: SafeType<Int> get() = IntRing.type
override fun set(index: Int, value: Int) { override fun set(index: Int, value: Int) {
require(index in 0 until size) { "Index must be in [0, size)" } require(index in 0 until size) { "Index must be in [0, size)" }
source[index + offset] = value source[index + offset] = value
@ -38,7 +34,7 @@ public class OffsetIntBuffer(
/** /**
* Copy only a part of buffer that belongs to this tensor * Copy only a part of buffer that belongs to this tensor
*/ */
override fun copy(): Int32Buffer = source.array.copyOfRange(offset, offset + size).asBuffer() public fun copy(): Int32Buffer = source.array.copyOfRange(offset, offset + size).asBuffer()
override fun iterator(): Iterator<Int> = iterator { override fun iterator(): Iterator<Int> = iterator {
for (i in indices) { for (i in indices) {
@ -87,7 +83,6 @@ public class IntTensor(
require(linearSize == source.size) { "Source buffer size must be equal tensor size" } require(linearSize == source.size) { "Source buffer size must be equal tensor size" }
} }
override val type: SafeType<Int> get() = IntRing.type
public constructor(shape: ShapeND, buffer: Int32Buffer) : this(shape, OffsetIntBuffer(buffer, 0, buffer.size)) public constructor(shape: ShapeND, buffer: Int32Buffer) : this(shape, OffsetIntBuffer(buffer, 0, buffer.size))

View File

@ -17,7 +17,7 @@ import space.kscience.kmath.tensors.api.Tensor
public fun StructureND<Double>.copyToTensor(): DoubleTensor = if (this is DoubleTensor) { public fun StructureND<Double>.copyToTensor(): DoubleTensor = if (this is DoubleTensor) {
DoubleTensor(shape, source.copy()) DoubleTensor(shape, source.copy())
} else if (this is Float64BufferND && indices is RowStrides) { } else if (this is Float64BufferND && indices is RowStrides) {
DoubleTensor(shape, buffer.copy()) DoubleTensor(shape, buffer.array.copyOf().asBuffer())
} else { } else {
DoubleTensor( DoubleTensor(
shape, shape,

View File

@ -1,8 +1,6 @@
public final class space/kscience/kmath/viktor/ViktorBuffer : space/kscience/kmath/structures/MutableBuffer { public final class space/kscience/kmath/viktor/ViktorBuffer : space/kscience/kmath/structures/MutableBuffer {
public static final synthetic fun box-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lspace/kscience/kmath/viktor/ViktorBuffer; public static final synthetic fun box-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lspace/kscience/kmath/viktor/ViktorBuffer;
public static fun constructor-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lorg/jetbrains/bio/viktor/F64FlatArray; public static fun constructor-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lorg/jetbrains/bio/viktor/F64FlatArray;
public fun copy ()Lspace/kscience/kmath/structures/MutableBuffer;
public static fun copy-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lspace/kscience/kmath/structures/MutableBuffer;
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;Ljava/lang/Object;)Z public static fun equals-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;Ljava/lang/Object;)Z
public static final fun equals-impl0 (Lorg/jetbrains/bio/viktor/F64FlatArray;Lorg/jetbrains/bio/viktor/F64FlatArray;)Z public static final fun equals-impl0 (Lorg/jetbrains/bio/viktor/F64FlatArray;Lorg/jetbrains/bio/viktor/F64FlatArray;)Z
@ -12,8 +10,6 @@ public final class space/kscience/kmath/viktor/ViktorBuffer : space/kscience/kma
public final fun getFlatArray ()Lorg/jetbrains/bio/viktor/F64FlatArray; public final fun getFlatArray ()Lorg/jetbrains/bio/viktor/F64FlatArray;
public fun getSize ()I public fun getSize ()I
public static fun getSize-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)I public static fun getSize-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public static fun getType-V0oMfBY (Lorg/jetbrains/bio/viktor/F64FlatArray;)Lkotlin/reflect/KType;
public fun hashCode ()I public fun hashCode ()I
public static fun hashCode-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)I public static fun hashCode-impl (Lorg/jetbrains/bio/viktor/F64FlatArray;)I
public fun iterator ()Ljava/util/Iterator; public fun iterator ()Ljava/util/Iterator;
@ -115,7 +111,6 @@ public final class space/kscience/kmath/viktor/ViktorStructureND : space/kscienc
public synthetic fun get ([I)Ljava/lang/Object; public synthetic fun get ([I)Ljava/lang/Object;
public final fun getF64Buffer ()Lorg/jetbrains/bio/viktor/F64Array; public final fun getF64Buffer ()Lorg/jetbrains/bio/viktor/F64Array;
public fun getShape-IIYLAfE ()[I public fun getShape-IIYLAfE ()[I
public fun getType-V0oMfBY ()Lkotlin/reflect/KType;
public fun set ([ID)V public fun set ([ID)V
public synthetic fun set ([ILjava/lang/Object;)V public synthetic fun set ([ILjava/lang/Object;)V
} }

View File

@ -6,15 +6,12 @@
package space.kscience.kmath.viktor package space.kscience.kmath.viktor
import org.jetbrains.bio.viktor.F64FlatArray import org.jetbrains.bio.viktor.F64FlatArray
import space.kscience.attributes.SafeType
import space.kscience.kmath.operations.Float64Field
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer import space.kscience.kmath.structures.MutableBuffer
@Suppress("NOTHING_TO_INLINE", "OVERRIDE_BY_INLINE") @Suppress("NOTHING_TO_INLINE", "OVERRIDE_BY_INLINE")
@JvmInline @JvmInline
public value class ViktorBuffer(public val flatArray: F64FlatArray) : MutableBuffer<Double> { public value class ViktorBuffer(public val flatArray: F64FlatArray) : MutableBuffer<Double> {
override val type: SafeType<Double> get() = Float64Field.type
override val size: Int override val size: Int
get() = flatArray.length get() = flatArray.length
@ -25,7 +22,6 @@ public value class ViktorBuffer(public val flatArray: F64FlatArray) : MutableBuf
flatArray[index] = value flatArray[index] = value
} }
override fun copy(): MutableBuffer<Double> = ViktorBuffer(flatArray.copy().flatten())
override operator fun iterator(): Iterator<Double> = flatArray.data.iterator() override operator fun iterator(): Iterator<Double> = flatArray.data.iterator()
override fun toString(): String = Buffer.toString(this) override fun toString(): String = Buffer.toString(this)

View File

@ -6,17 +6,13 @@
package space.kscience.kmath.viktor package space.kscience.kmath.viktor
import org.jetbrains.bio.viktor.F64Array import org.jetbrains.bio.viktor.F64Array
import space.kscience.attributes.SafeType
import space.kscience.kmath.PerformancePitfall import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.nd.ColumnStrides import space.kscience.kmath.nd.ColumnStrides
import space.kscience.kmath.nd.MutableStructureND import space.kscience.kmath.nd.MutableStructureND
import space.kscience.kmath.nd.ShapeND import space.kscience.kmath.nd.ShapeND
import space.kscience.kmath.operations.Float64Field
@Suppress("OVERRIDE_BY_INLINE", "NOTHING_TO_INLINE") @Suppress("OVERRIDE_BY_INLINE", "NOTHING_TO_INLINE")
public class ViktorStructureND(public val f64Buffer: F64Array) : MutableStructureND<Double> { public class ViktorStructureND(public val f64Buffer: F64Array) : MutableStructureND<Double> {
override val type: SafeType<Double> get() = Float64Field.type
override val shape: ShapeND get() = ShapeND(f64Buffer.shape) override val shape: ShapeND get() = ShapeND(f64Buffer.shape)
@OptIn(PerformancePitfall::class) @OptIn(PerformancePitfall::class)