Revert SymbolIndexer package to make ASM builders work.

This commit is contained in:
Alexander Nozik 2024-12-24 12:26:01 +03:00
parent 43e407e11a
commit b9f413b5ce
14 changed files with 17 additions and 27 deletions

View File

@ -40,7 +40,7 @@ kscience {
}
dependencies(jvmMain) {
implementation("org.ow2.asm:asm-commons:9.2")
implementation("org.ow2.asm:asm-commons:9.7.1")
}
}
@ -54,7 +54,7 @@ kotlin {
}
}
if (System.getProperty("space.kscience.kmath.ast.dump.generated.classes") == "1") {
if (project.properties["space.kscience.kmath.ast.dump.generated.classes"] == "1") {
tasks.withType<org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTest> {
jvmArgs("-Dspace.kscience.kmath.ast.dump.generated.classes=1")
}

View File

@ -5,15 +5,12 @@
package space.kscience.kmath.wasm.internal
import `<dynamic>`.invoke
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.ast.TypedMst
import space.kscience.kmath.expressions.DoubleExpression
import space.kscience.kmath.expressions.Expression
import space.kscience.kmath.expressions.IntExpression
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.*
import space.kscience.kmath.internal.binaryen.*
import space.kscience.kmath.internal.webassembly.Instance
import space.kscience.kmath.named.SimpleSymbolIndexer
import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.Float64
import space.kscience.kmath.internal.binaryen.Module as BinaryenModule

View File

@ -11,7 +11,6 @@ import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.ast.TypedMst
import space.kscience.kmath.ast.evaluateConstants
import space.kscience.kmath.expressions.*
import space.kscience.kmath.named.SimpleSymbolIndexer
import space.kscience.kmath.operations.Float64Field
import space.kscience.kmath.operations.Int32Ring
import space.kscience.kmath.structures.Float64

View File

@ -12,7 +12,6 @@ import space.kscience.kmath.asm.internal.*
import space.kscience.kmath.ast.TypedMst
import space.kscience.kmath.ast.evaluateConstants
import space.kscience.kmath.expressions.*
import space.kscience.kmath.named.SimpleSymbolIndexer
import space.kscience.kmath.operations.Algebra
import space.kscience.kmath.operations.Float64Field
import space.kscience.kmath.operations.Int32Ring

View File

@ -14,8 +14,6 @@ import org.objectweb.asm.commons.InstructionAdapter
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.ast.TypedMst
import space.kscience.kmath.expressions.*
import space.kscience.kmath.named.SimpleSymbolIndexer
import space.kscience.kmath.named.SymbolIndexer
import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.Float64
import java.lang.invoke.MethodHandles
@ -77,7 +75,7 @@ internal sealed class PrimitiveAsmBuilder<T : Number, out E : Expression<T>>(
val instance: E by lazy {
val classWriter = ClassWriter(ClassWriter.COMPUTE_FRAMES) {
visit(
V1_8,
V11,
ACC_PUBLIC or ACC_FINAL or ACC_SUPER,
classType.internalName,
"${OBJECT_TYPE.descriptor}${expressionParentType.descriptor}",

View File

@ -73,7 +73,6 @@ internal tailrec fun buildName(marker: String, collision: Int = 0): String {
return buildName(marker, collision + 1)
}
@Suppress("FunctionName")
internal inline fun ClassWriter(flags: Int, block: ClassWriter.() -> Unit): ClassWriter {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
return ClassWriter(flags).apply(block)

View File

@ -18,12 +18,11 @@ import space.kscience.attributes.AttributesBuilder
import space.kscience.attributes.SetAttribute
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.SymbolIndexer
import space.kscience.kmath.expressions.derivative
import space.kscience.kmath.named.SymbolIndexer
import space.kscience.kmath.named.withSymbols
import space.kscience.kmath.expressions.withSymbols
import space.kscience.kmath.optimization.*
import space.kscience.kmath.structures.Float64
import kotlin.collections.set
import kotlin.reflect.KClass
public operator fun PointValuePair.component1(): DoubleArray = point

View File

@ -7,7 +7,6 @@ package space.kscience.kmath.expressions
import space.kscience.attributes.SafeType
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.named.SymbolIndexer
import space.kscience.kmath.operations.*
import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer

View File

@ -9,7 +9,6 @@ import space.kscience.attributes.SafeType
import space.kscience.attributes.WithType
import space.kscience.attributes.safeTypeOf
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.named.SymbolIndexer
import space.kscience.kmath.operations.Algebra
import space.kscience.kmath.operations.DoubleField
import space.kscience.kmath.operations.IntRing

View File

@ -3,10 +3,9 @@
* 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.named
package space.kscience.kmath.expressions
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.linear.Point
import space.kscience.kmath.nd.Structure2D
import space.kscience.kmath.structures.BufferFactory
@ -15,6 +14,8 @@ import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import kotlin.jvm.JvmInline
//DO NOT MOVE THIS CLASS if you do not want ASM module to break
/**
* An environment to easy transform indexed variables to symbols and back.
* TODO requires multi-receivers to be beautiful

View File

@ -9,6 +9,7 @@ package space.kscience.kmath.named
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.SymbolIndexer
import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.MutableBuffer

View File

@ -9,7 +9,9 @@ package space.kscience.kmath.named
import space.kscience.kmath.PerformancePitfall
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.SimpleSymbolIndexer
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.SymbolIndexer
import space.kscience.kmath.linear.Matrix
import space.kscience.kmath.structures.getOrNull
@ -20,7 +22,7 @@ import space.kscience.kmath.structures.getOrNull
*/
public class NamedMatrix<T>(public val values: Matrix<T>, public val indexer: SymbolIndexer) : Matrix<T> by values {
init {
require(values.rows.size == values.columns.size) { "Only square matrices could be named" }
require(values.rowNum == values.colNum) { "Only square matrices could be named" }
}
public operator fun get(i: Symbol, j: Symbol): T = get(indexer.indexOf(i), indexer.indexOf(j))

View File

@ -6,18 +6,15 @@
package space.kscience.kmath.optimization
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.DifferentiableExpression
import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.derivative
import space.kscience.kmath.expressions.withDefaultArgs
import space.kscience.kmath.expressions.*
import space.kscience.kmath.linear.*
import space.kscience.kmath.misc.log
import space.kscience.kmath.named.NamedMatrix
import space.kscience.kmath.named.SymbolIndexer
import space.kscience.kmath.named.named
import space.kscience.kmath.operations.Float64Field
import space.kscience.kmath.operations.Float64L2Norm
import space.kscience.kmath.operations.algebra
import space.kscience.kmath.optimization.QowOptimizer.distance
import space.kscience.kmath.structures.Float64
import space.kscience.kmath.structures.Float64Buffer
import kotlin.math.abs