diff --git a/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/AsmExpressionSpaces.kt b/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/AsmExpressionSpaces.kt index 232710d6c..0f8f685eb 100644 --- a/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/AsmExpressionSpaces.kt +++ b/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/AsmExpressionSpaces.kt @@ -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(val algebra: Algebra) : Algebra>, - ExpressionContext> { + ExpressionAlgebra> { override fun unaryOperation(operation: String, arg: AsmExpression): AsmExpression = AsmUnaryOperation(algebra, operation, arg) diff --git a/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/Builders.kt b/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/Builders.kt index 663bd55ba..c56adb767 100644 --- a/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/Builders.kt +++ b/kmath-asm/src/main/kotlin/scientifik/kmath/expressions/asm/Builders.kt @@ -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 >> asm( +inline fun >> asm( i: E, algebra: Algebra, block: E.() -> AsmExpression @@ -29,22 +29,22 @@ inline fun >> asm( return ctx.generate() } -inline fun asmAlgebra( +inline fun buildAsmAlgebra( algebra: Algebra, block: AsmExpressionAlgebra.() -> AsmExpression ): Expression = asm(AsmExpressionAlgebra(algebra), algebra, block) -inline fun asmSpace( +inline fun buildAsmSpace( algebra: Space, block: AsmExpressionSpace.() -> AsmExpression ): Expression = asm(AsmExpressionSpace(algebra), algebra, block) -inline fun asmRing( +inline fun buildAsmRing( algebra: Ring, block: AsmExpressionRing.() -> AsmExpression ): Expression = asm(AsmExpressionRing(algebra), algebra, block) -inline fun asmField( +inline fun buildAsmField( algebra: Field, block: AsmExpressionField.() -> AsmExpression ): Expression = asm(AsmExpressionField(algebra), algebra, block) diff --git a/kmath-asm/src/test/kotlin/scientifik/kmath/expressions/AsmTest.kt b/kmath-asm/src/test/kotlin/scientifik/kmath/expressions/AsmTest.kt index 93c52faac..034ba09c8 100644 --- a/kmath-asm/src/test/kotlin/scientifik/kmath/expressions/AsmTest.kt +++ b/kmath-asm/src/test/kotlin/scientifik/kmath/expressions/AsmTest.kt @@ -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 = emptyMap(), block: AsmExpressionField.() -> AsmExpression - ): 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 } diff --git a/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/Builders.kt b/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/Builders.kt new file mode 100644 index 000000000..b2e4d8a3d --- /dev/null +++ b/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/Builders.kt @@ -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 Algebra.buildExpression(block: FunctionalExpressionAlgebra.() -> Expression): Expression = + FunctionalExpressionAlgebra(this).run(block) + +/** + * Create a functional expression on this [Space] + */ +fun Space.buildExpression(block: FunctionalExpressionSpace.() -> Expression): Expression = + FunctionalExpressionSpace(this).run(block) + +/** + * Create a functional expression on this [Ring] + */ +fun Ring.buildExpression(block: FunctionalExpressionRing.() -> Expression): Expression = + FunctionalExpressionRing(this).run(block) + +/** + * Create a functional expression on this [Field] + */ +fun Field.buildExpression(block: FunctionalExpressionField.() -> Expression): Expression = + FunctionalExpressionField(this).run(block) diff --git a/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/FunctionalExpressions.kt b/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/FunctionalExpressions.kt index ce9b4756c..cbbdb99f5 100644 --- a/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/FunctionalExpressions.kt +++ b/kmath-core/src/commonMain/kotlin/scientifik/kmath/expressions/FunctionalExpressions.kt @@ -33,7 +33,7 @@ internal class FunctionalConstProductExpression(val context: Space, val ex open class FunctionalExpressionAlgebra(val algebra: Algebra) : Algebra>, - ExpressionContext> { + ExpressionAlgebra> { override fun unaryOperation(operation: String, arg: Expression): Expression = FunctionalUnaryOperation(algebra, operation, arg) diff --git a/settings.gradle.kts b/settings.gradle.kts index 465ecfca8..2b2633060 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -45,5 +45,6 @@ include( ":kmath-for-real", ":kmath-geometry", ":kmath-ast", + ":kmath-asm", ":examples" )