forked from kscience/kmath
Noa scopes runners
This commit is contained in:
parent
7744880ce7
commit
00a04a1931
49
kmath-noa/src/main/kotlin/space/kscience/kmath/noa/Noa.kt
Normal file
49
kmath-noa/src/main/kotlin/space/kscience/kmath/noa/Noa.kt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-2021 KMath contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package space.kscience.kmath.noa
|
||||||
|
|
||||||
|
import space.kscience.kmath.noa.memory.NoaScope
|
||||||
|
import space.kscience.kmath.noa.memory.withNoaScope
|
||||||
|
|
||||||
|
public class NoaDouble
|
||||||
|
internal constructor(scope: NoaScope) :
|
||||||
|
NoaDoubleAlgebra(scope)
|
||||||
|
|
||||||
|
public fun <R> NoaDouble(block: NoaDouble.() -> R): R? =
|
||||||
|
withNoaScope { NoaDouble(this).block() }
|
||||||
|
|
||||||
|
public fun <R> NoaDouble(scope: NoaScope, block: NoaDouble.() -> R): R? =
|
||||||
|
withNoaScope(scope) { NoaDouble(this).block() }
|
||||||
|
|
||||||
|
public class NoaFloat
|
||||||
|
internal constructor(scope: NoaScope) :
|
||||||
|
NoaFloatAlgebra(scope)
|
||||||
|
|
||||||
|
public fun <R> NoaFloat(block: NoaFloat.() -> R): R? =
|
||||||
|
withNoaScope { NoaFloat(this).block() }
|
||||||
|
|
||||||
|
public fun <R> NoaFloat(scope: NoaScope, block: NoaFloat.() -> R): R? =
|
||||||
|
withNoaScope(scope) { NoaFloat(this).block() }
|
||||||
|
|
||||||
|
public class NoaLong
|
||||||
|
internal constructor(scope: NoaScope) :
|
||||||
|
NoaLongAlgebra(scope)
|
||||||
|
|
||||||
|
public fun <R> NoaLong(block: NoaLong.() -> R): R? =
|
||||||
|
withNoaScope { NoaLong(this).block() }
|
||||||
|
|
||||||
|
public fun <R> NoaLong(scope: NoaScope, block: NoaLong.() -> R): R? =
|
||||||
|
withNoaScope(scope) { NoaLong(this).block() }
|
||||||
|
|
||||||
|
public class NoaInt
|
||||||
|
internal constructor(scope: NoaScope) :
|
||||||
|
NoaIntAlgebra(scope)
|
||||||
|
|
||||||
|
public fun <R> NoaInt(block: NoaInt.() -> R): R? =
|
||||||
|
withNoaScope { NoaInt(this).block() }
|
||||||
|
|
||||||
|
public fun <R> NoaInt(scope: NoaScope, block: NoaInt.() -> R): R? =
|
||||||
|
withNoaScope(scope) { NoaInt(this).block() }
|
@ -15,7 +15,8 @@ import space.kscience.kmath.tensors.core.TensorLinearStructure
|
|||||||
|
|
||||||
|
|
||||||
public sealed class NoaAlgebra<T, TensorType : NoaTensor<T>>
|
public sealed class NoaAlgebra<T, TensorType : NoaTensor<T>>
|
||||||
constructor(protected val scope: NoaScope) : TensorAlgebra<T> {
|
protected constructor(protected val scope: NoaScope) :
|
||||||
|
TensorAlgebra<T> {
|
||||||
|
|
||||||
protected abstract val Tensor<T>.tensor: TensorType
|
protected abstract val Tensor<T>.tensor: TensorType
|
||||||
|
|
||||||
@ -132,8 +133,10 @@ constructor(protected val scope: NoaScope) : TensorAlgebra<T> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class NoaPartialDivisionAlgebra<T, TensorType : NoaTensor<T>>
|
public sealed class NoaPartialDivisionAlgebra<T, TensorType : NoaTensor<T>>
|
||||||
internal constructor(scope: NoaScope) : NoaAlgebra<T, TensorType>(scope), LinearOpsTensorAlgebra<T>,
|
protected constructor(scope: NoaScope) :
|
||||||
|
NoaAlgebra<T, TensorType>(scope),
|
||||||
|
LinearOpsTensorAlgebra<T>,
|
||||||
AnalyticTensorAlgebra<T> {
|
AnalyticTensorAlgebra<T> {
|
||||||
|
|
||||||
override operator fun Tensor<T>.div(other: Tensor<T>): TensorType {
|
override operator fun Tensor<T>.div(other: Tensor<T>): TensorType {
|
||||||
@ -274,7 +277,8 @@ internal constructor(scope: NoaScope) : NoaAlgebra<T, TensorType>(scope), Linear
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NoaDoubleAlgebra(scope: NoaScope) :
|
public sealed class NoaDoubleAlgebra
|
||||||
|
protected constructor(scope: NoaScope) :
|
||||||
NoaPartialDivisionAlgebra<Double, NoaDoubleTensor>(scope) {
|
NoaPartialDivisionAlgebra<Double, NoaDoubleTensor>(scope) {
|
||||||
|
|
||||||
private fun Tensor<Double>.castHelper(): NoaDoubleTensor =
|
private fun Tensor<Double>.castHelper(): NoaDoubleTensor =
|
||||||
@ -349,7 +353,8 @@ public class NoaDoubleAlgebra(scope: NoaScope) :
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NoaFloatAlgebra(scope: NoaScope) :
|
public sealed class NoaFloatAlgebra
|
||||||
|
protected constructor(scope: NoaScope) :
|
||||||
NoaPartialDivisionAlgebra<Float, NoaFloatTensor>(scope) {
|
NoaPartialDivisionAlgebra<Float, NoaFloatTensor>(scope) {
|
||||||
|
|
||||||
private fun Tensor<Float>.castHelper(): NoaFloatTensor =
|
private fun Tensor<Float>.castHelper(): NoaFloatTensor =
|
||||||
@ -424,7 +429,8 @@ public class NoaFloatAlgebra(scope: NoaScope) :
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NoaLongAlgebra(scope: NoaScope) :
|
public sealed class NoaLongAlgebra
|
||||||
|
protected constructor(scope: NoaScope) :
|
||||||
NoaAlgebra<Long, NoaLongTensor>(scope) {
|
NoaAlgebra<Long, NoaLongTensor>(scope) {
|
||||||
|
|
||||||
private fun Tensor<Long>.castHelper(): NoaLongTensor =
|
private fun Tensor<Long>.castHelper(): NoaLongTensor =
|
||||||
@ -484,7 +490,8 @@ public class NoaLongAlgebra(scope: NoaScope) :
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NoaIntAlgebra(scope: NoaScope) :
|
public sealed class NoaIntAlgebra
|
||||||
|
protected constructor(scope: NoaScope) :
|
||||||
NoaAlgebra<Int, NoaIntTensor>(scope) {
|
NoaAlgebra<Int, NoaIntTensor>(scope) {
|
||||||
|
|
||||||
private fun Tensor<Int>.castHelper(): NoaIntTensor =
|
private fun Tensor<Int>.castHelper(): NoaIntTensor =
|
||||||
|
@ -30,14 +30,14 @@ public class NoaScope {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun <R> withNoaScope(block: NoaScope.() -> R): R? {
|
internal inline fun <R> withNoaScope(block: NoaScope.() -> R): R? {
|
||||||
val noaScope = NoaScope()
|
val noaScope = NoaScope()
|
||||||
val result = try { noaScope.block() } catch (e: Throwable) { null }
|
val result = try { noaScope.block() } catch (e: Throwable) { null }
|
||||||
noaScope.disposeAll()
|
noaScope.disposeAll()
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun <R> withNoaScope(scope: NoaScope, block: NoaScope.() -> R): R? {
|
internal inline fun <R> withNoaScope(scope: NoaScope, block: NoaScope.() -> R): R? {
|
||||||
val noaScope = NoaScope()
|
val noaScope = NoaScope()
|
||||||
val result = try { noaScope.block() } catch (e: Throwable) { null }
|
val result = try { noaScope.block() } catch (e: Throwable) { null }
|
||||||
if (result == null){
|
if (result == null){
|
||||||
|
Loading…
Reference in New Issue
Block a user