forked from kscience/kmath
Merge branch 'dev' into feature/quaternion
# Conflicts: # CHANGELOG.md # kmath-complex/src/commonMain/kotlin/kscience/kmath/complex/Complex.kt
This commit is contained in:
commit
73969da969
@ -40,6 +40,7 @@
|
||||
- Refactored `NDStructure` algebra to be more simple, preferring under-the-hood conversion to explicit NDStructure types
|
||||
- Refactor histograms. They are marked as prototype
|
||||
- `Complex` and related features moved to a separate module `kmath-complex`
|
||||
- Refactor AlgebraElement
|
||||
|
||||
### Deprecated
|
||||
|
||||
@ -48,6 +49,7 @@
|
||||
- Support of `legacy` JS backend (we will support only IR)
|
||||
- `toGrid` method.
|
||||
- Public visibility of `BufferAccessor2D`
|
||||
- `Real` class
|
||||
|
||||
### Fixed
|
||||
- `symbol` method in `MstExtendedField` (https://github.com/mipt-npm/kmath/pull/140)
|
||||
|
@ -4,7 +4,7 @@ plugins {
|
||||
id("ru.mipt.npm.project")
|
||||
}
|
||||
|
||||
internal val kmathVersion: String by extra("0.2.0-dev-6")
|
||||
internal val kmathVersion: String by extra("0.2.0-dev-7")
|
||||
internal val bintrayRepo: String by extra("kscience")
|
||||
internal val githubProject: String by extra("kmath")
|
||||
|
||||
|
@ -94,21 +94,21 @@ public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, Rin
|
||||
}
|
||||
|
||||
public override fun asin(arg: Complex): Complex = -i * ln(sqrt(1 - (arg * arg)) + i * arg)
|
||||
override fun acos(arg: Complex): Complex = PI_DIV_2 + i * ln(sqrt(1 - (arg * arg)) + i * arg)
|
||||
public override fun acos(arg: Complex): Complex = PI_DIV_2 + i * ln(sqrt(1 - (arg * arg)) + i * arg)
|
||||
|
||||
override fun atan(arg: Complex): Complex {
|
||||
public override fun atan(arg: Complex): Complex {
|
||||
val iArg = i * arg
|
||||
return i * (ln(1 - iArg) - ln(1 + iArg)) / 2
|
||||
}
|
||||
|
||||
override fun power(arg: Complex, pow: Number): Complex = if (arg.im == 0.0)
|
||||
public override fun power(arg: Complex, pow: Number): Complex = if (arg.im == 0.0)
|
||||
arg.re.pow(pow.toDouble()).toComplex()
|
||||
else
|
||||
exp(pow * ln(arg))
|
||||
|
||||
override fun exp(arg: Complex): Complex = exp(arg.re) * (cos(arg.im) + i * sin(arg.im))
|
||||
public override fun exp(arg: Complex): Complex = exp(arg.re) * (cos(arg.im) + i * sin(arg.im))
|
||||
|
||||
override fun ln(arg: Complex): Complex = ln(arg.r) + i * atan2(arg.im, arg.re)
|
||||
public override fun ln(arg: Complex): Complex = ln(arg.r) + i * atan2(arg.im, arg.re)
|
||||
|
||||
/**
|
||||
* Adds complex number to real one.
|
||||
@ -155,9 +155,9 @@ public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, Rin
|
||||
*/
|
||||
public operator fun Double.times(c: Complex): Complex = Complex(c.re * this, c.im * this)
|
||||
|
||||
override fun norm(arg: Complex): Complex = sqrt(arg.conjugate * arg)
|
||||
public override fun norm(arg: Complex): Complex = sqrt(arg.conjugate * arg)
|
||||
|
||||
override fun symbol(value: String): Complex = if (value == "i") i else super<ExtendedField>.symbol(value)
|
||||
public override fun symbol(value: String): Complex = if (value == "i") i else super<ExtendedField>.symbol(value)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -166,7 +166,7 @@ public object ComplexField : ExtendedField<Complex>, Norm<Complex, Complex>, Rin
|
||||
* @property re The real part.
|
||||
* @property im The imaginary part.
|
||||
*/
|
||||
public data class Complex(val re: Double, val im: Double) : FieldElement<Complex, Complex, ComplexField> {
|
||||
public data class Complex(val re: Double, val im: Double) : FieldElement<Complex, ComplexField> {
|
||||
public constructor(re: Number, im: Number) : this(re.toDouble(), im.toDouble())
|
||||
public constructor(re: Number) : this(re.toDouble(), 0.0)
|
||||
|
||||
@ -177,12 +177,12 @@ public data class Complex(val re: Double, val im: Double) : FieldElement<Complex
|
||||
public override fun toString(): String = "($re + i*$im)"
|
||||
|
||||
public companion object : MemorySpec<Complex> {
|
||||
override val objectSize: Int
|
||||
public override val objectSize: Int
|
||||
get() = 16
|
||||
|
||||
override fun MemoryReader.read(offset: Int): Complex = Complex(readDouble(offset), readDouble(offset + 8))
|
||||
public override fun MemoryReader.read(offset: Int): Complex = Complex(readDouble(offset), readDouble(offset + 8))
|
||||
|
||||
override fun MemoryWriter.write(offset: Int, value: Complex) {
|
||||
public override fun MemoryWriter.write(offset: Int, value: Complex) {
|
||||
writeDouble(offset, value.re)
|
||||
writeDouble(offset + 8, value.im)
|
||||
}
|
||||
|
@ -286,37 +286,19 @@ public final class kscience/kmath/expressions/SimpleAutoDiffExtendedField : ksci
|
||||
public fun atan (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun atanh (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun atanh (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun binaryOperation (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun binaryOperation (Ljava/lang/String;Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun binaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
|
||||
public synthetic fun cos (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun cos (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun cosh (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun cosh (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun div (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun div (Ljava/lang/Number;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun div (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public synthetic fun div (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun div (Lkscience/kmath/expressions/AutoDiffValue;Ljava/lang/Number;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun div (Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun exp (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun exp (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun leftSideNumberOperation (Ljava/lang/String;Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun leftSideNumberOperation (Ljava/lang/String;Ljava/lang/Number;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun leftSideNumberOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
|
||||
public synthetic fun ln (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun ln (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun minus (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun minus (Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun plus (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun plus (Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun pow (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public fun pow (Lkscience/kmath/expressions/AutoDiffValue;Ljava/lang/Number;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public final fun pow (Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun power (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public fun power (Lkscience/kmath/expressions/AutoDiffValue;Ljava/lang/Number;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun rightSideNumberOperation (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public fun rightSideNumberOperation (Ljava/lang/String;Lkscience/kmath/expressions/AutoDiffValue;Ljava/lang/Number;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun rightSideNumberOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function2;
|
||||
public synthetic fun sin (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun sin (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
@ -329,19 +311,7 @@ public final class kscience/kmath/expressions/SimpleAutoDiffExtendedField : ksci
|
||||
public fun tan (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun tanh (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun tanh (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun times (Ljava/lang/Number;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun times (Ljava/lang/Number;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun times (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public synthetic fun times (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun times (Lkscience/kmath/expressions/AutoDiffValue;Ljava/lang/Number;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun times (Lkscience/kmath/expressions/AutoDiffValue;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun unaryMinus (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun unaryMinus (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public synthetic fun unaryOperation (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun unaryOperation (Ljava/lang/String;Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
public fun unaryOperationFunction (Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
|
||||
public synthetic fun unaryPlus (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun unaryPlus (Lkscience/kmath/expressions/AutoDiffValue;)Lkscience/kmath/expressions/AutoDiffValue;
|
||||
}
|
||||
|
||||
public class kscience/kmath/expressions/SimpleAutoDiffField : kscience/kmath/expressions/ExpressionAlgebra, kscience/kmath/operations/Field, kscience/kmath/operations/RingWithNumbers {
|
||||
@ -1519,6 +1489,20 @@ public final class kscience/kmath/operations/Algebra$DefaultImpls {
|
||||
public static fun unaryOperationFunction (Lkscience/kmath/operations/Algebra;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/AlgebraElement {
|
||||
public abstract fun getContext ()Lkscience/kmath/operations/Algebra;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/AlgebraElementsKt {
|
||||
public static final fun div (Lkscience/kmath/operations/AlgebraElement;Ljava/lang/Number;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun div (Lkscience/kmath/operations/AlgebraElement;Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun minus (Lkscience/kmath/operations/AlgebraElement;Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun plus (Lkscience/kmath/operations/AlgebraElement;Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun times (Ljava/lang/Number;Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun times (Lkscience/kmath/operations/AlgebraElement;Ljava/lang/Number;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun times (Lkscience/kmath/operations/AlgebraElement;Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/AlgebraExtensionsKt {
|
||||
public static final fun abs (Lkscience/kmath/operations/Space;Ljava/lang/Comparable;)Ljava/lang/Comparable;
|
||||
public static final fun average (Lkscience/kmath/operations/Space;Ljava/lang/Iterable;)Ljava/lang/Object;
|
||||
@ -1703,39 +1687,13 @@ public final class kscience/kmath/operations/Complex : java/lang/Comparable, ksc
|
||||
public final fun component2 ()D
|
||||
public final fun copy (DD)Lkscience/kmath/operations/Complex;
|
||||
public static synthetic fun copy$default (Lkscience/kmath/operations/Complex;DDILjava/lang/Object;)Lkscience/kmath/operations/Complex;
|
||||
public fun div (Ljava/lang/Number;)Lkscience/kmath/operations/Complex;
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public synthetic fun div (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public fun div (Lkscience/kmath/operations/Complex;)Lkscience/kmath/operations/Complex;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public synthetic fun getContext ()Ljava/lang/Object;
|
||||
public synthetic fun getContext ()Lkscience/kmath/operations/Algebra;
|
||||
public fun getContext ()Lkscience/kmath/operations/ComplexField;
|
||||
public synthetic fun getContext ()Lkscience/kmath/operations/Field;
|
||||
public final fun getIm ()D
|
||||
public final fun getRe ()D
|
||||
public fun hashCode ()I
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public fun minus (Lkscience/kmath/operations/Complex;)Lkscience/kmath/operations/Complex;
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public fun plus (Lkscience/kmath/operations/Complex;)Lkscience/kmath/operations/Complex;
|
||||
public fun times (Ljava/lang/Number;)Lkscience/kmath/operations/Complex;
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public synthetic fun times (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun times (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public fun times (Lkscience/kmath/operations/Complex;)Lkscience/kmath/operations/Complex;
|
||||
public fun toString ()Ljava/lang/String;
|
||||
public synthetic fun unwrap ()Ljava/lang/Object;
|
||||
public fun unwrap ()Lkscience/kmath/operations/Complex;
|
||||
public synthetic fun wrap (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun wrap (Lkscience/kmath/operations/Complex;)Lkscience/kmath/operations/Complex;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/Complex$Companion : kscience/kmath/memory/MemorySpec {
|
||||
@ -1970,17 +1928,6 @@ public final class kscience/kmath/operations/Field$DefaultImpls {
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/FieldElement : kscience/kmath/operations/RingElement {
|
||||
public abstract fun div (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public abstract fun getContext ()Lkscience/kmath/operations/Field;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/FieldElement$DefaultImpls {
|
||||
public static fun div (Lkscience/kmath/operations/FieldElement;Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public static fun div (Lkscience/kmath/operations/FieldElement;Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public static fun minus (Lkscience/kmath/operations/FieldElement;Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public static fun plus (Lkscience/kmath/operations/FieldElement;Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public static fun times (Lkscience/kmath/operations/FieldElement;Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public static fun times (Lkscience/kmath/operations/FieldElement;Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/FieldOperations : kscience/kmath/operations/RingOperations {
|
||||
@ -2352,15 +2299,6 @@ public final class kscience/kmath/operations/LongRing : kscience/kmath/operation
|
||||
public synthetic fun unaryPlus (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/MathElement {
|
||||
public abstract fun getContext ()Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/MathWrapper {
|
||||
public abstract fun unwrap ()Ljava/lang/Object;
|
||||
public abstract fun wrap (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/Norm {
|
||||
public abstract fun norm (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
}
|
||||
@ -2386,24 +2324,24 @@ public final class kscience/kmath/operations/NumericAlgebra$DefaultImpls {
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/OptionalOperationsKt {
|
||||
public static final fun acos (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun acosh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun asin (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun asinh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun atan (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun atanh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun cos (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun cosh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun exp (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun ln (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun norm (Lkscience/kmath/operations/MathElement;)Ljava/lang/Object;
|
||||
public static final fun pow (Lkscience/kmath/operations/MathElement;D)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun sin (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun sinh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun sqr (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun sqrt (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun tan (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun tanh (Lkscience/kmath/operations/MathElement;)Lkscience/kmath/operations/MathElement;
|
||||
public static final fun acos (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun acosh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun asin (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun asinh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun atan (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun atanh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun cos (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun cosh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun exp (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun ln (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun norm (Lkscience/kmath/operations/AlgebraElement;)Ljava/lang/Object;
|
||||
public static final fun pow (Lkscience/kmath/operations/AlgebraElement;D)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun sin (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun sinh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun sqr (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun sqrt (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun tan (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
public static final fun tanh (Lkscience/kmath/operations/AlgebraElement;)Lkscience/kmath/operations/AlgebraElement;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/PowerOperations : kscience/kmath/operations/Algebra {
|
||||
@ -2430,61 +2368,6 @@ public final class kscience/kmath/operations/PowerOperations$DefaultImpls {
|
||||
public static fun unaryOperationFunction (Lkscience/kmath/operations/PowerOperations;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/Real : kscience/kmath/operations/FieldElement {
|
||||
public static final field Companion Lkscience/kmath/operations/Real$Companion;
|
||||
public static final synthetic fun box-impl (D)Lkscience/kmath/operations/Real;
|
||||
public static fun constructor-impl (D)D
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun div (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public synthetic fun div (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public fun div-qF3TpSg (D)D
|
||||
public static fun div-qF3TpSg (DD)D
|
||||
public static fun div-qF3TpSg (DLjava/lang/Number;)D
|
||||
public fun div-qF3TpSg (Ljava/lang/Number;)D
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public static fun equals-impl (DLjava/lang/Object;)Z
|
||||
public static final fun equals-impl0 (DD)Z
|
||||
public synthetic fun getContext ()Ljava/lang/Object;
|
||||
public synthetic fun getContext ()Lkscience/kmath/operations/Field;
|
||||
public fun getContext ()Lkscience/kmath/operations/RealField;
|
||||
public static fun getContext-impl (D)Lkscience/kmath/operations/RealField;
|
||||
public final fun getValue ()D
|
||||
public fun hashCode ()I
|
||||
public static fun hashCode-impl (D)I
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public fun minus-qF3TpSg (D)D
|
||||
public static fun minus-qF3TpSg (DD)D
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public fun plus-qF3TpSg (D)D
|
||||
public static fun plus-qF3TpSg (DD)D
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public synthetic fun times (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public synthetic fun times (Ljava/lang/Object;)Lkscience/kmath/operations/FieldElement;
|
||||
public synthetic fun times (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public fun times-qF3TpSg (D)D
|
||||
public static fun times-qF3TpSg (DD)D
|
||||
public static fun times-qF3TpSg (DLjava/lang/Number;)D
|
||||
public fun times-qF3TpSg (Ljava/lang/Number;)D
|
||||
public fun toString ()Ljava/lang/String;
|
||||
public static fun toString-impl (D)Ljava/lang/String;
|
||||
public final synthetic fun unbox-impl ()D
|
||||
public fun unwrap ()Ljava/lang/Double;
|
||||
public synthetic fun unwrap ()Ljava/lang/Object;
|
||||
public static fun unwrap-impl (D)Ljava/lang/Double;
|
||||
public synthetic fun wrap (Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public fun wrap-qF3TpSg (D)D
|
||||
public static fun wrap-qF3TpSg (DD)D
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/Real$Companion {
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/RealField : kscience/kmath/operations/ExtendedField, kscience/kmath/operations/Norm {
|
||||
public static final field INSTANCE Lkscience/kmath/operations/RealField;
|
||||
public fun acos (D)Ljava/lang/Double;
|
||||
@ -2594,15 +2477,6 @@ public final class kscience/kmath/operations/Ring$DefaultImpls {
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/RingElement : kscience/kmath/operations/SpaceElement {
|
||||
public abstract fun times (Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/RingElement$DefaultImpls {
|
||||
public static fun div (Lkscience/kmath/operations/RingElement;Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public static fun minus (Lkscience/kmath/operations/RingElement;Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public static fun plus (Lkscience/kmath/operations/RingElement;Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
public static fun times (Lkscience/kmath/operations/RingElement;Ljava/lang/Number;)Lkscience/kmath/operations/RingElement;
|
||||
public static fun times (Lkscience/kmath/operations/RingElement;Ljava/lang/Object;)Lkscience/kmath/operations/RingElement;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/RingOperations : kscience/kmath/operations/SpaceOperations {
|
||||
@ -2733,18 +2607,7 @@ public final class kscience/kmath/operations/Space$DefaultImpls {
|
||||
public static fun unaryPlus (Lkscience/kmath/operations/Space;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/SpaceElement : kscience/kmath/operations/MathElement, kscience/kmath/operations/MathWrapper {
|
||||
public abstract fun div (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public abstract fun minus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public abstract fun plus (Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public abstract fun times (Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
}
|
||||
|
||||
public final class kscience/kmath/operations/SpaceElement$DefaultImpls {
|
||||
public static fun div (Lkscience/kmath/operations/SpaceElement;Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public static fun minus (Lkscience/kmath/operations/SpaceElement;Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public static fun plus (Lkscience/kmath/operations/SpaceElement;Ljava/lang/Object;)Lkscience/kmath/operations/SpaceElement;
|
||||
public static fun times (Lkscience/kmath/operations/SpaceElement;Ljava/lang/Number;)Lkscience/kmath/operations/SpaceElement;
|
||||
public abstract interface class kscience/kmath/operations/SpaceElement : kscience/kmath/operations/AlgebraElement {
|
||||
}
|
||||
|
||||
public abstract interface class kscience/kmath/operations/SpaceOperations : kscience/kmath/operations/Algebra {
|
||||
@ -2845,7 +2708,7 @@ public final class kscience/kmath/structures/Buffer$DefaultImpls {
|
||||
public static fun contentEquals (Lkscience/kmath/structures/Buffer;Lkscience/kmath/structures/Buffer;)Z
|
||||
}
|
||||
|
||||
public final class kscience/kmath/structures/BuffersKt {
|
||||
public final class kscience/kmath/structures/BufferKt {
|
||||
public static final fun ListBuffer (ILkotlin/jvm/functions/Function1;)Ljava/util/List;
|
||||
public static final fun asBuffer (Ljava/util/List;)Ljava/util/List;
|
||||
public static final fun asBuffer ([Ljava/lang/Object;)Lkscience/kmath/structures/ArrayBuffer;
|
||||
|
@ -95,7 +95,7 @@ public fun <T, E> ExpressionAlgebra<T, E>.bind(symbol: Symbol): E =
|
||||
/**
|
||||
* A delegate to create a symbol with a string identity in this scope
|
||||
*/
|
||||
public val symbol: ReadOnlyProperty<Any?, Symbol> = ReadOnlyProperty { thisRef, property ->
|
||||
public val symbol: ReadOnlyProperty<Any?, Symbol> = ReadOnlyProperty { _, property ->
|
||||
StringSymbol(property.name)
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ public interface SpaceOperations<T> : Algebra<T> {
|
||||
* @param k the multiplicand.
|
||||
* @return the product.
|
||||
*/
|
||||
public operator fun T.times(k: Number): T = multiply(this, k.toDouble())
|
||||
public operator fun T.times(k: Number): T = multiply(this, k)
|
||||
|
||||
/**
|
||||
* Division of this element by scalar.
|
||||
|
@ -1,11 +1,14 @@
|
||||
package kscience.kmath.operations
|
||||
|
||||
import kscience.kmath.misc.UnstableKMathAPI
|
||||
|
||||
/**
|
||||
* The generic mathematics elements which is able to store its context
|
||||
*
|
||||
* @param C the type of mathematical context for this element.
|
||||
* @param T the type wrapped by this wrapper.
|
||||
*/
|
||||
public interface MathElement<C> {
|
||||
public interface AlgebraElement<T, C : Algebra<T>> {
|
||||
/**
|
||||
* The context this element belongs to.
|
||||
*/
|
||||
@ -13,22 +16,67 @@ public interface MathElement<C> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents element that can be wrapped to its "primitive" value.
|
||||
* Divides this element by number.
|
||||
*
|
||||
* @param T the type wrapped by this wrapper.
|
||||
* @param I the type of this wrapper.
|
||||
* @param k the divisor.
|
||||
* @return the quotient.
|
||||
*/
|
||||
public interface MathWrapper<T, I> {
|
||||
/**
|
||||
* Unwraps [I] to [T].
|
||||
*/
|
||||
public fun unwrap(): T
|
||||
public operator fun <T : AlgebraElement<T, S>, S : Space<T>> T.div(k: Number): T =
|
||||
context.multiply(this, 1.0 / k.toDouble())
|
||||
|
||||
/**
|
||||
* Multiplies this element by number.
|
||||
*
|
||||
* @param k the multiplicand.
|
||||
* @return the product.
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, S>, S : Space<T>> T.times(k: Number): T =
|
||||
context.multiply(this, k.toDouble())
|
||||
|
||||
/**
|
||||
* Subtracts element from this one.
|
||||
*
|
||||
* @param b the subtrahend.
|
||||
* @return the difference.
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, S>, S : Space<T>> T.minus(b: T): T =
|
||||
context.add(this, context.multiply(b, -1.0))
|
||||
|
||||
/**
|
||||
* Adds element to this one.
|
||||
*
|
||||
* @param b the augend.
|
||||
* @return the sum.
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, S>, S : Space<T>> T.plus(b: T): T =
|
||||
context.add(this, b)
|
||||
|
||||
/**
|
||||
* Number times element
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, S>, S : Space<T>> Number.times(element: T): T =
|
||||
element.times(this)
|
||||
|
||||
|
||||
/**
|
||||
* Multiplies this element by another one.
|
||||
*
|
||||
* @param b the multiplicand.
|
||||
* @return the product.
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, R>, R : Ring<T>> T.times(b: T): T =
|
||||
context.multiply(this, b)
|
||||
|
||||
|
||||
/**
|
||||
* Divides this element by another one.
|
||||
*
|
||||
* @param b the divisor.
|
||||
* @return the quotient.
|
||||
*/
|
||||
public operator fun <T : AlgebraElement<T, F>, F : Field<T>> T.div(b: T): T =
|
||||
context.divide(this, b)
|
||||
|
||||
/**
|
||||
* Wraps [T] to [I].
|
||||
*/
|
||||
public fun T.wrap(): I
|
||||
}
|
||||
|
||||
/**
|
||||
* The element of [Space].
|
||||
@ -37,39 +85,8 @@ public interface MathWrapper<T, I> {
|
||||
* @param I self type of the element. Needed for static type checking.
|
||||
* @param S the type of space.
|
||||
*/
|
||||
public interface SpaceElement<T, I : SpaceElement<T, I, S>, S : Space<T>> : MathElement<S>, MathWrapper<T, I> {
|
||||
/**
|
||||
* Adds element to this one.
|
||||
*
|
||||
* @param b the augend.
|
||||
* @return the sum.
|
||||
*/
|
||||
public operator fun plus(b: T): I = context.add(unwrap(), b).wrap()
|
||||
|
||||
/**
|
||||
* Subtracts element from this one.
|
||||
*
|
||||
* @param b the subtrahend.
|
||||
* @return the difference.
|
||||
*/
|
||||
public operator fun minus(b: T): I = context.add(unwrap(), context.multiply(b, -1.0)).wrap()
|
||||
|
||||
/**
|
||||
* Multiplies this element by number.
|
||||
*
|
||||
* @param k the multiplicand.
|
||||
* @return the product.
|
||||
*/
|
||||
public operator fun times(k: Number): I = context.multiply(unwrap(), k.toDouble()).wrap()
|
||||
|
||||
/**
|
||||
* Divides this element by number.
|
||||
*
|
||||
* @param k the divisor.
|
||||
* @return the quotient.
|
||||
*/
|
||||
public operator fun div(k: Number): I = context.multiply(unwrap(), 1.0 / k.toDouble()).wrap()
|
||||
}
|
||||
@UnstableKMathAPI
|
||||
public interface SpaceElement<T : SpaceElement<T, S>, S : Space<T>> : AlgebraElement<T, S>
|
||||
|
||||
/**
|
||||
* The element of [Ring].
|
||||
@ -78,15 +95,8 @@ public interface SpaceElement<T, I : SpaceElement<T, I, S>, S : Space<T>> : Math
|
||||
* @param I self type of the element. Needed for static type checking.
|
||||
* @param R the type of ring.
|
||||
*/
|
||||
public interface RingElement<T, I : RingElement<T, I, R>, R : Ring<T>> : SpaceElement<T, I, R> {
|
||||
/**
|
||||
* Multiplies this element by another one.
|
||||
*
|
||||
* @param b the multiplicand.
|
||||
* @return the product.
|
||||
*/
|
||||
public operator fun times(b: T): I = context.multiply(unwrap(), b).wrap()
|
||||
}
|
||||
@UnstableKMathAPI
|
||||
public interface RingElement<T : RingElement<T, R>, R : Ring<T>> : SpaceElement<T, R>
|
||||
|
||||
/**
|
||||
* The element of [Field].
|
||||
@ -95,14 +105,5 @@ public interface RingElement<T, I : RingElement<T, I, R>, R : Ring<T>> : SpaceEl
|
||||
* @param I self type of the element. Needed for static type checking.
|
||||
* @param F the type of field.
|
||||
*/
|
||||
public interface FieldElement<T, I : FieldElement<T, I, F>, F : Field<T>> : RingElement<T, I, F> {
|
||||
override val context: F
|
||||
|
||||
/**
|
||||
* Divides this element by another one.
|
||||
*
|
||||
* @param b the divisor.
|
||||
* @return the quotient.
|
||||
*/
|
||||
public operator fun div(b: T): I = context.divide(unwrap(), b).wrap()
|
||||
}
|
||||
@UnstableKMathAPI
|
||||
public interface FieldElement<T : FieldElement<T, F>, F : Field<T>> : RingElement<T, F>
|
@ -1,5 +1,7 @@
|
||||
package kscience.kmath.operations
|
||||
|
||||
import kscience.kmath.misc.UnstableKMathAPI
|
||||
|
||||
/**
|
||||
* A container for trigonometric operations for specific type.
|
||||
*
|
||||
@ -72,32 +74,38 @@ public interface TrigonometricOperations<T> : Algebra<T> {
|
||||
/**
|
||||
* Computes the sine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> sin(arg: T): T = arg.context.sin(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> sin(arg: T): T = arg.context.sin(arg)
|
||||
|
||||
/**
|
||||
* Computes the cosine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> cos(arg: T): T = arg.context.cos(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> cos(arg: T): T = arg.context.cos(arg)
|
||||
|
||||
/**
|
||||
* Computes the tangent of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> tan(arg: T): T = arg.context.tan(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> tan(arg: T): T = arg.context.tan(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse sine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> asin(arg: T): T = arg.context.asin(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> asin(arg: T): T = arg.context.asin(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse cosine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> acos(arg: T): T = arg.context.acos(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> acos(arg: T): T = arg.context.acos(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse tangent of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out TrigonometricOperations<T>>> atan(arg: T): T = arg.context.atan(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out TrigonometricOperations<T>>> atan(arg: T): T = arg.context.atan(arg)
|
||||
|
||||
/**
|
||||
* A container for hyperbolic trigonometric operations for specific type.
|
||||
@ -171,32 +179,38 @@ public interface HyperbolicOperations<T> : Algebra<T> {
|
||||
/**
|
||||
* Computes the hyperbolic sine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> sinh(arg: T): T = arg.context.sinh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> sinh(arg: T): T = arg.context.sinh(arg)
|
||||
|
||||
/**
|
||||
* Computes the hyperbolic cosine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> cosh(arg: T): T = arg.context.cosh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> cosh(arg: T): T = arg.context.cosh(arg)
|
||||
|
||||
/**
|
||||
* Computes the hyperbolic tangent of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> tanh(arg: T): T = arg.context.tanh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> tanh(arg: T): T = arg.context.tanh(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse hyperbolic sine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> asinh(arg: T): T = arg.context.asinh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> asinh(arg: T): T = arg.context.asinh(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse hyperbolic cosine of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> acosh(arg: T): T = arg.context.acosh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> acosh(arg: T): T = arg.context.acosh(arg)
|
||||
|
||||
/**
|
||||
* Computes the inverse hyperbolic tangent of [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out HyperbolicOperations<T>>> atanh(arg: T): T = arg.context.atanh(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out HyperbolicOperations<T>>> atanh(arg: T): T = arg.context.atanh(arg)
|
||||
|
||||
/**
|
||||
* A context extension to include power operations based on exponentiation.
|
||||
@ -239,17 +253,20 @@ public interface PowerOperations<T> : Algebra<T> {
|
||||
* @param power the exponent.
|
||||
* @return the base raised to the power.
|
||||
*/
|
||||
public infix fun <T : MathElement<out PowerOperations<T>>> T.pow(power: Double): T = context.power(this, power)
|
||||
@UnstableKMathAPI
|
||||
public infix fun <T : AlgebraElement<T, out PowerOperations<T>>> T.pow(power: Double): T = context.power(this, power)
|
||||
|
||||
/**
|
||||
* Computes the square root of the value [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out PowerOperations<T>>> sqrt(arg: T): T = arg pow 0.5
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out PowerOperations<T>>> sqrt(arg: T): T = arg pow 0.5
|
||||
|
||||
/**
|
||||
* Computes the square of the value [arg].
|
||||
*/
|
||||
public fun <T : MathElement<out PowerOperations<T>>> sqr(arg: T): T = arg pow 2.0
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out PowerOperations<T>>> sqr(arg: T): T = arg pow 2.0
|
||||
|
||||
/**
|
||||
* A container for operations related to `exp` and `ln` functions.
|
||||
@ -283,12 +300,14 @@ public interface ExponentialOperations<T> : Algebra<T> {
|
||||
/**
|
||||
* The identifier of exponential function.
|
||||
*/
|
||||
public fun <T : MathElement<out ExponentialOperations<T>>> exp(arg: T): T = arg.context.exp(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out ExponentialOperations<T>>> exp(arg: T): T = arg.context.exp(arg)
|
||||
|
||||
/**
|
||||
* The identifier of natural logarithm.
|
||||
*/
|
||||
public fun <T : MathElement<out ExponentialOperations<T>>> ln(arg: T): T = arg.context.ln(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out ExponentialOperations<T>>> ln(arg: T): T = arg.context.ln(arg)
|
||||
|
||||
/**
|
||||
* A container for norm functional on element.
|
||||
@ -306,4 +325,5 @@ public interface Norm<in T : Any, out R> {
|
||||
/**
|
||||
* Computes the norm of [arg] (i.e. absolute value or vector length).
|
||||
*/
|
||||
public fun <T : MathElement<out Norm<T, R>>, R> norm(arg: T): R = arg.context.norm(arg)
|
||||
@UnstableKMathAPI
|
||||
public fun <T : AlgebraElement<T, out Norm<T, R>>, R> norm(arg: T): R = arg.context.norm(arg)
|
||||
|
@ -52,23 +52,6 @@ public interface ExtendedField<T> : ExtendedFieldOperations<T>, Field<T>, Numeri
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Real field element wrapping double.
|
||||
*
|
||||
* @property value the [Double] value wrapped by this [Real].
|
||||
*
|
||||
* TODO inline does not work due to compiler bug. Waiting for fix for KT-27586
|
||||
*/
|
||||
public inline class Real(public val value: Double) : FieldElement<Double, Real, RealField> {
|
||||
public override val context: RealField
|
||||
get() = RealField
|
||||
|
||||
public override fun unwrap(): Double = value
|
||||
public override fun Double.wrap(): Real = Real(value)
|
||||
|
||||
public companion object
|
||||
}
|
||||
|
||||
/**
|
||||
* A field for [Double] without boxing. Does not produce appropriate field element.
|
||||
*/
|
||||
|
@ -1,11 +1,13 @@
|
||||
package kscience.kmath.geometry
|
||||
|
||||
import kscience.kmath.linear.Point
|
||||
import kscience.kmath.misc.UnstableKMathAPI
|
||||
import kscience.kmath.operations.SpaceElement
|
||||
import kscience.kmath.operations.invoke
|
||||
import kotlin.math.sqrt
|
||||
|
||||
public interface Vector2D : Point<Double>, Vector, SpaceElement<Vector2D, Vector2D, Euclidean2DSpace> {
|
||||
@OptIn(UnstableKMathAPI::class)
|
||||
public interface Vector2D : Point<Double>, Vector, SpaceElement<Vector2D, Euclidean2DSpace> {
|
||||
public val x: Double
|
||||
public val y: Double
|
||||
public override val context: Euclidean2DSpace get() = Euclidean2DSpace
|
||||
@ -18,8 +20,6 @@ public interface Vector2D : Point<Double>, Vector, SpaceElement<Vector2D, Vector
|
||||
}
|
||||
|
||||
public override operator fun iterator(): Iterator<Double> = listOf(x, y).iterator()
|
||||
public override fun unwrap(): Vector2D = this
|
||||
public override fun Vector2D.wrap(): Vector2D = this
|
||||
}
|
||||
|
||||
public val Vector2D.r: Double
|
||||
|
@ -1,11 +1,13 @@
|
||||
package kscience.kmath.geometry
|
||||
|
||||
import kscience.kmath.linear.Point
|
||||
import kscience.kmath.misc.UnstableKMathAPI
|
||||
import kscience.kmath.operations.SpaceElement
|
||||
import kscience.kmath.operations.invoke
|
||||
import kotlin.math.sqrt
|
||||
|
||||
public interface Vector3D : Point<Double>, Vector, SpaceElement<Vector3D, Vector3D, Euclidean3DSpace> {
|
||||
@OptIn(UnstableKMathAPI::class)
|
||||
public interface Vector3D : Point<Double>, Vector, SpaceElement<Vector3D, Euclidean3DSpace> {
|
||||
public val x: Double
|
||||
public val y: Double
|
||||
public val z: Double
|
||||
@ -20,8 +22,6 @@ public interface Vector3D : Point<Double>, Vector, SpaceElement<Vector3D, Vector
|
||||
}
|
||||
|
||||
public override operator fun iterator(): Iterator<Double> = listOf(x, y, z).iterator()
|
||||
public override fun unwrap(): Vector3D = this
|
||||
public override fun Vector3D.wrap(): Vector3D = this
|
||||
}
|
||||
|
||||
@Suppress("FunctionName")
|
||||
|
@ -8,7 +8,7 @@ import kscience.kmath.operations.invoke
|
||||
import kscience.kmath.structures.*
|
||||
import kotlin.math.floor
|
||||
|
||||
public data class BinDefinition<T : Comparable<T>>(
|
||||
public data class MultivariateBinDefinition<T : Comparable<T>>(
|
||||
public val space: SpaceOperations<Point<T>>,
|
||||
public val center: Point<T>,
|
||||
public val sizes: Point<T>,
|
||||
@ -23,8 +23,9 @@ public data class BinDefinition<T : Comparable<T>>(
|
||||
|
||||
|
||||
public class MultivariateBin<T : Comparable<T>>(
|
||||
public val definition: BinDefinition<T>,
|
||||
public override val value: Number,
|
||||
public val definition: MultivariateBinDefinition<T>,
|
||||
public val count: Long,
|
||||
public override val value: Double,
|
||||
) : Bin<T> {
|
||||
public override val dimension: Int
|
||||
get() = definition.center.size
|
||||
@ -56,7 +57,6 @@ public class RealHistogram(
|
||||
require(!(0 until dimension).any { upper[it] - lower[it] < 0 }) { "Range for one of axis is not strictly positive" }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get internal [NDStructure] bin index for given axis
|
||||
*/
|
||||
@ -68,11 +68,15 @@ public class RealHistogram(
|
||||
|
||||
private fun getIndex(point: Buffer<out Double>): IntArray = IntArray(dimension) { getIndex(it, point[it]) }
|
||||
|
||||
private fun getValue(index: IntArray): Long = counts[index].sum()
|
||||
private fun getCount(index: IntArray): Long = counts[index].sum()
|
||||
|
||||
public fun getValue(point: Buffer<out Double>): Long = getValue(getIndex(point))
|
||||
public fun getCount(point: Buffer<out Double>): Long = getCount(getIndex(point))
|
||||
|
||||
private fun getBinDefinition(index: IntArray): BinDefinition<Double> {
|
||||
private fun getValue(index: IntArray): Double = values[index].sum()
|
||||
|
||||
public fun getValue(point: Buffer<out Double>): Double = getValue(getIndex(point))
|
||||
|
||||
private fun getBinDefinition(index: IntArray): MultivariateBinDefinition<Double> {
|
||||
val center = index.mapIndexed { axis, i ->
|
||||
when (i) {
|
||||
0 -> Double.NEGATIVE_INFINITY
|
||||
@ -81,14 +85,14 @@ public class RealHistogram(
|
||||
}
|
||||
}.asBuffer()
|
||||
|
||||
return BinDefinition(RealBufferFieldOperations, center, binSize)
|
||||
return MultivariateBinDefinition(RealBufferFieldOperations, center, binSize)
|
||||
}
|
||||
|
||||
public fun getBinDefinition(point: Buffer<out Double>): BinDefinition<Double> = getBinDefinition(getIndex(point))
|
||||
public fun getBinDefinition(point: Buffer<out Double>): MultivariateBinDefinition<Double> = getBinDefinition(getIndex(point))
|
||||
|
||||
public override operator fun get(point: Buffer<out Double>): MultivariateBin<Double>? {
|
||||
val index = getIndex(point)
|
||||
return MultivariateBin(getBinDefinition(index), getValue(index))
|
||||
return MultivariateBin(getBinDefinition(index), getCount(index),getValue(index))
|
||||
}
|
||||
|
||||
// fun put(point: Point<out Double>){
|
||||
@ -103,8 +107,8 @@ public class RealHistogram(
|
||||
}
|
||||
|
||||
public override operator fun iterator(): Iterator<MultivariateBin<Double>> =
|
||||
values.elements().map { (index, value) ->
|
||||
MultivariateBin(getBinDefinition(index), value.sum())
|
||||
strides.indices().map { index->
|
||||
MultivariateBin(getBinDefinition(index), counts[index].sum(), values[index].sum())
|
||||
}.iterator()
|
||||
|
||||
/**
|
||||
|
@ -2,6 +2,7 @@ package kscience.kmath.histogram
|
||||
|
||||
import kscience.kmath.linear.Point
|
||||
import kscience.kmath.misc.UnstableKMathAPI
|
||||
import kscience.kmath.operations.SpaceElement
|
||||
import kscience.kmath.structures.Buffer
|
||||
import kscience.kmath.structures.asBuffer
|
||||
import kscience.kmath.structures.asSequence
|
||||
@ -38,9 +39,10 @@ public class UnivariateBin(
|
||||
/**
|
||||
* Univariate histogram with log(n) bin search speed
|
||||
*/
|
||||
public abstract class UnivariateHistogram(
|
||||
@OptIn(UnstableKMathAPI::class)
|
||||
public abstract class UnivariateHistogram protected constructor(
|
||||
protected val bins: TreeMap<Double, UnivariateBin> = TreeMap(),
|
||||
) : Histogram<Double, UnivariateBin> {
|
||||
) : Histogram<Double, UnivariateBin>, SpaceElement<UnivariateHistogram, UnivariateHistogramSpace> {
|
||||
|
||||
public operator fun get(value: Double): UnivariateBin? {
|
||||
// check ceiling entry and return it if it is what needed
|
||||
@ -64,10 +66,10 @@ public abstract class UnivariateHistogram(
|
||||
* Build a histogram with a uniform binning with a start at [start] and a bin size of [binSize]
|
||||
*/
|
||||
public fun uniformBuilder(binSize: Double, start: Double = 0.0): UnivariateHistogramBuilder =
|
||||
UnivariateHistogramBuilder { value ->
|
||||
UnivariateHistogramSpace { value ->
|
||||
val center = start + binSize * floor((value - start) / binSize + 0.5)
|
||||
UnivariateBin(center, binSize)
|
||||
}
|
||||
}.builder()
|
||||
|
||||
/**
|
||||
* Build and fill a [UnivariateHistogram]. Returns a read-only histogram.
|
||||
@ -84,7 +86,7 @@ public abstract class UnivariateHistogram(
|
||||
public fun customBuilder(borders: DoubleArray): UnivariateHistogramBuilder {
|
||||
val sorted = borders.sortedArray()
|
||||
|
||||
return UnivariateHistogramBuilder { value ->
|
||||
return UnivariateHistogramSpace { value ->
|
||||
when {
|
||||
value < sorted.first() -> UnivariateBin(
|
||||
Double.NEGATIVE_INFINITY,
|
||||
@ -103,7 +105,7 @@ public abstract class UnivariateHistogram(
|
||||
UnivariateBin((left + right) / 2, (right - left))
|
||||
}
|
||||
}
|
||||
}
|
||||
}.builder()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -116,11 +118,11 @@ public abstract class UnivariateHistogram(
|
||||
}
|
||||
}
|
||||
|
||||
public class UnivariateHistogramBuilder(
|
||||
private val factory: (Double) -> UnivariateBin,
|
||||
public class UnivariateHistogramBuilder internal constructor(
|
||||
override val context: UnivariateHistogramSpace,
|
||||
) : UnivariateHistogram(), MutableHistogram<Double, UnivariateBin> {
|
||||
|
||||
private fun createBin(value: Double): UnivariateBin = factory(value).also {
|
||||
private fun createBin(value: Double): UnivariateBin = context.binFactory(value).also {
|
||||
synchronized(this) { bins[it.position] = it }
|
||||
}
|
||||
|
||||
@ -128,7 +130,7 @@ public class UnivariateHistogramBuilder(
|
||||
* Thread safe put operation
|
||||
*/
|
||||
public fun put(value: Double, weight: Double = 1.0) {
|
||||
(get(value) ?: createBin(value)).apply{
|
||||
(get(value) ?: createBin(value)).apply {
|
||||
counter.increment()
|
||||
weightCounter.add(weight)
|
||||
}
|
||||
@ -141,8 +143,8 @@ public class UnivariateHistogramBuilder(
|
||||
/**
|
||||
* Put several items into a single bin
|
||||
*/
|
||||
public fun putMany(value: Double, count: Int, weight: Double = count.toDouble()){
|
||||
(get(value) ?: createBin(value)).apply{
|
||||
public fun putMany(value: Double, count: Int, weight: Double = count.toDouble()) {
|
||||
(get(value) ?: createBin(value)).apply {
|
||||
counter.add(count.toLong())
|
||||
weightCounter.add(weight)
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package kscience.kmath.histogram
|
||||
|
||||
import kscience.kmath.operations.Space
|
||||
|
||||
public class UnivariateHistogramSpace(public val binFactory: (Double) -> UnivariateBin) : Space<UnivariateHistogram> {
|
||||
|
||||
public fun builder(): UnivariateHistogramBuilder = UnivariateHistogramBuilder(this)
|
||||
|
||||
public fun produce(builder: UnivariateHistogramBuilder.() -> Unit): UnivariateHistogram = builder().apply(builder)
|
||||
|
||||
override fun add(
|
||||
a: UnivariateHistogram,
|
||||
b: UnivariateHistogram,
|
||||
): UnivariateHistogram {
|
||||
require(a.context == this){"Histogram $a does not belong to this context"}
|
||||
require(b.context == this){"Histogram $b does not belong to this context"}
|
||||
TODO()
|
||||
}
|
||||
|
||||
override fun multiply(a: UnivariateHistogram, k: Number): UnivariateHistogram {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override val zero: UnivariateHistogram = produce { }
|
||||
}
|
@ -83,7 +83,7 @@ public interface RandomGenerator {
|
||||
/**
|
||||
* Implements [RandomGenerator] by delegating all operations to [Random].
|
||||
*/
|
||||
public inline class DefaultGenerator(public val random: Random = Random) : RandomGenerator {
|
||||
public class DefaultGenerator(public val random: Random = Random) : RandomGenerator {
|
||||
public override fun nextBoolean(): Boolean = random.nextBoolean()
|
||||
public override fun nextDouble(): Double = random.nextDouble()
|
||||
public override fun nextInt(): Int = random.nextInt()
|
||||
|
@ -93,7 +93,6 @@ public final class kscience/kmath/viktor/ViktorNDField : kscience/kmath/nd/NDFie
|
||||
public fun minus (Lkscience/kmath/nd/NDStructure;D)Lkscience/kmath/nd/NDStructure;
|
||||
public fun minus (Lkscience/kmath/nd/NDStructure;Ljava/lang/Number;)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun minus (Lkscience/kmath/nd/NDStructure;Ljava/lang/Object;)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun minus (Lkscience/kmath/nd/NDStructure;Lkscience/kmath/nd/NDStructure;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun minus-frQ_39w (Lkscience/kmath/nd/NDStructure;Lkscience/kmath/nd/NDStructure;)Lorg/jetbrains/bio/viktor/F64Array;
|
||||
public synthetic fun multiply (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
public synthetic fun multiply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
@ -110,7 +109,6 @@ public final class kscience/kmath/viktor/ViktorNDField : kscience/kmath/nd/NDFie
|
||||
public synthetic fun plus (Ljava/lang/Object;Lkscience/kmath/nd/NDStructure;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun plus (Lkscience/kmath/nd/NDStructure;Ljava/lang/Number;)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun plus (Lkscience/kmath/nd/NDStructure;Ljava/lang/Object;)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun plus (Lkscience/kmath/nd/NDStructure;Lkscience/kmath/nd/NDStructure;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun plus-frQ_39w (Lkscience/kmath/nd/NDStructure;D)Lorg/jetbrains/bio/viktor/F64Array;
|
||||
public fun plus-frQ_39w (Lkscience/kmath/nd/NDStructure;Lkscience/kmath/nd/NDStructure;)Lorg/jetbrains/bio/viktor/F64Array;
|
||||
public synthetic fun pow (Ljava/lang/Object;Ljava/lang/Number;)Ljava/lang/Object;
|
||||
@ -141,7 +139,6 @@ public final class kscience/kmath/viktor/ViktorNDField : kscience/kmath/nd/NDFie
|
||||
public synthetic fun times (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
public synthetic fun times (Ljava/lang/Object;Lkscience/kmath/nd/NDStructure;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun times (Lkscience/kmath/nd/NDStructure;D)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun times (Lkscience/kmath/nd/NDStructure;Ljava/lang/Number;)Lkscience/kmath/nd/NDStructure;
|
||||
public synthetic fun times (Lkscience/kmath/nd/NDStructure;Ljava/lang/Object;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun times (Lkscience/kmath/nd/NDStructure;Lkscience/kmath/nd/NDStructure;)Lkscience/kmath/nd/NDStructure;
|
||||
public fun times-frQ_39w (Lkscience/kmath/nd/NDStructure;Ljava/lang/Number;)Lorg/jetbrains/bio/viktor/F64Array;
|
||||
|
@ -8,8 +8,8 @@ pluginManagement {
|
||||
maven("https://dl.bintray.com/kotlin/kotlinx")
|
||||
}
|
||||
|
||||
val toolsVersion = "0.7.4"
|
||||
val kotlinVersion = "1.4.30-RC"
|
||||
val toolsVersion = "0.7.5"
|
||||
val kotlinVersion = "1.4.30"
|
||||
|
||||
plugins {
|
||||
id("kotlinx.benchmark") version "0.2.0-dev-20"
|
||||
|
Loading…
Reference in New Issue
Block a user