Dev #127
@ -1,11 +1,11 @@
|
||||
package scientifik.kmath.expressions.asm
|
||||
|
||||
import scientifik.kmath.expressions.ExpressionContext
|
||||
import scientifik.kmath.expressions.ExpressionAlgebra
|
||||
import scientifik.kmath.operations.*
|
||||
|
||||
open class AsmExpressionAlgebra<T>(val algebra: Algebra<T>) :
|
||||
Algebra<AsmExpression<T>>,
|
||||
ExpressionContext<T, AsmExpression<T>> {
|
||||
ExpressionAlgebra<T, AsmExpression<T>> {
|
||||
override fun unaryOperation(operation: String, arg: AsmExpression<T>): AsmExpression<T> =
|
||||
AsmUnaryOperation(algebra, operation, arg)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package scientifik.kmath.expressions.asm
|
||||
|
||||
import scientifik.kmath.expressions.Expression
|
||||
import scientifik.kmath.expressions.ExpressionContext
|
||||
import scientifik.kmath.expressions.ExpressionAlgebra
|
||||
import scientifik.kmath.operations.*
|
||||
|
||||
@PublishedApi
|
||||
@ -18,7 +18,7 @@ internal fun buildName(expression: AsmExpression<*>, collision: Int = 0): String
|
||||
}
|
||||
|
||||
|
||||
inline fun <reified T, E : ExpressionContext<T, AsmExpression<T>>> asm(
|
||||
inline fun <reified T, E : ExpressionAlgebra<T, AsmExpression<T>>> asm(
|
||||
i: E,
|
||||
algebra: Algebra<T>,
|
||||
block: E.() -> AsmExpression<T>
|
||||
@ -29,22 +29,22 @@ inline fun <reified T, E : ExpressionContext<T, AsmExpression<T>>> asm(
|
||||
return ctx.generate()
|
||||
}
|
||||
|
||||
inline fun <reified T> asmAlgebra(
|
||||
inline fun <reified T> buildAsmAlgebra(
|
||||
algebra: Algebra<T>,
|
||||
block: AsmExpressionAlgebra<T>.() -> AsmExpression<T>
|
||||
): Expression<T> = asm(AsmExpressionAlgebra(algebra), algebra, block)
|
||||
|
||||
inline fun <reified T> asmSpace(
|
||||
inline fun <reified T> buildAsmSpace(
|
||||
algebra: Space<T>,
|
||||
block: AsmExpressionSpace<T>.() -> AsmExpression<T>
|
||||
): Expression<T> = asm(AsmExpressionSpace(algebra), algebra, block)
|
||||
|
||||
inline fun <reified T> asmRing(
|
||||
inline fun <reified T> buildAsmRing(
|
||||
algebra: Ring<T>,
|
||||
block: AsmExpressionRing<T>.() -> AsmExpression<T>
|
||||
): Expression<T> = asm(AsmExpressionRing(algebra), algebra, block)
|
||||
|
||||
inline fun <reified T> asmField(
|
||||
inline fun <reified T> buildAsmField(
|
||||
algebra: Field<T>,
|
||||
block: AsmExpressionField<T>.() -> AsmExpression<T>
|
||||
): Expression<T> = asm(AsmExpressionField(algebra), algebra, block)
|
||||
|
@ -2,9 +2,7 @@ package scientifik.kmath.expressions
|
||||
|
||||
import scientifik.kmath.expressions.asm.AsmExpression
|
||||
import scientifik.kmath.expressions.asm.AsmExpressionField
|
||||
import scientifik.kmath.expressions.asm.asmField
|
||||
import scientifik.kmath.expressions.asm.asmRing
|
||||
import scientifik.kmath.operations.IntRing
|
||||
import scientifik.kmath.expressions.asm.buildAsmField
|
||||
import scientifik.kmath.operations.RealField
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
@ -14,7 +12,7 @@ class AsmTest {
|
||||
expected: Double?,
|
||||
arguments: Map<String, Double> = emptyMap(),
|
||||
block: AsmExpressionField<Double>.() -> AsmExpression<Double>
|
||||
): Unit = assertEquals(expected = expected, actual = asmField(RealField, block)(arguments))
|
||||
): Unit = assertEquals(expected = expected, actual = buildAsmField(RealField, block)(arguments))
|
||||
|
||||
@Test
|
||||
fun testConstantsSum(): Unit = testDoubleExpression(16.0) { const(8.0) + 8.0 }
|
||||
|
@ -0,0 +1,30 @@
|
||||
package scientifik.kmath.expressions
|
||||
|
||||
import scientifik.kmath.operations.Algebra
|
||||
import scientifik.kmath.operations.Field
|
||||
import scientifik.kmath.operations.Ring
|
||||
import scientifik.kmath.operations.Space
|
||||
|
||||
/**
|
||||
* Create a functional expression on this [Algebra]
|
||||
*/
|
||||
fun <T> Algebra<T>.buildExpression(block: FunctionalExpressionAlgebra<T>.() -> Expression<T>): Expression<T> =
|
||||
FunctionalExpressionAlgebra(this).run(block)
|
||||
|
||||
/**
|
||||
* Create a functional expression on this [Space]
|
||||
*/
|
||||
fun <T> Space<T>.buildExpression(block: FunctionalExpressionSpace<T>.() -> Expression<T>): Expression<T> =
|
||||
FunctionalExpressionSpace(this).run(block)
|
||||
|
||||
/**
|
||||
* Create a functional expression on this [Ring]
|
||||
*/
|
||||
fun <T> Ring<T>.buildExpression(block: FunctionalExpressionRing<T>.() -> Expression<T>): Expression<T> =
|
||||
FunctionalExpressionRing(this).run(block)
|
||||
|
||||
/**
|
||||
* Create a functional expression on this [Field]
|
||||
*/
|
||||
fun <T> Field<T>.buildExpression(block: FunctionalExpressionField<T>.() -> Expression<T>): Expression<T> =
|
||||
FunctionalExpressionField(this).run(block)
|
@ -33,7 +33,7 @@ internal class FunctionalConstProductExpression<T>(val context: Space<T>, val ex
|
||||
|
||||
open class FunctionalExpressionAlgebra<T>(val algebra: Algebra<T>) :
|
||||
Algebra<Expression<T>>,
|
||||
ExpressionContext<T, Expression<T>> {
|
||||
ExpressionAlgebra<T, Expression<T>> {
|
||||
override fun unaryOperation(operation: String, arg: Expression<T>): Expression<T> =
|
||||
FunctionalUnaryOperation(algebra, operation, arg)
|
||||
|
||||
|
@ -45,5 +45,6 @@ include(
|
||||
":kmath-for-real",
|
||||
":kmath-geometry",
|
||||
":kmath-ast",
|
||||
":kmath-asm",
|
||||
":examples"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user