Reverse types for buffers and typealiases for geometry.
This commit is contained in:
parent
dba001eff3
commit
fcb7e2fa7d
@ -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
|
||||||
|
@ -14,7 +14,7 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.4.0-RC"
|
version = "0.4.0-RC2"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -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)
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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) }
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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 {
|
||||||
|
@ -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)]
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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]
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
@ -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])
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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)
|
|
||||||
|
@ -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)
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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" }
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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
|
|
||||||
)
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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
|
||||||
|
@ -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> {
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)) }
|
||||||
|
@ -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]
|
||||||
|
@ -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]
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ kscience{
|
|||||||
jvm()
|
jvm()
|
||||||
js()
|
js()
|
||||||
native()
|
native()
|
||||||
|
wasm()
|
||||||
|
|
||||||
useContextReceivers()
|
useContextReceivers()
|
||||||
useSerialization()
|
useSerialization()
|
||||||
|
@ -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]
|
||||||
|
@ -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> {
|
||||||
|
@ -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
|
||||||
|
@ -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> {
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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> =
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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> {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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" }
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user