Skip to content

Commit 316dc36

Browse files
committed
Add unitest for testing functionality
Related-To #139
1 parent 7c00ef6 commit 316dc36

13 files changed

Lines changed: 129 additions & 67 deletions

File tree

skainet-lang/skainet-lang-core/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ kotlin {
3636

3737
sourceSets {
3838
commonMain.dependencies {
39+
api(project(":skainet-lang:skainet-lang-ksp-annotations"))
3940
}
4041

4142
commonTest.dependencies {

skainet-lang/skainet-lang-core/src/commonMain/kotlin/sk/ainet/lang/tensor/ops/VoidTensorOps.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package sk.ainet.lang.tensor.ops
22

3+
import sk.ainet.lang.ops.InProgress
34
import sk.ainet.lang.tensor.Shape
45
import sk.ainet.lang.tensor.Tensor
56
import sk.ainet.lang.tensor.VoidOpsTensor
@@ -101,13 +102,15 @@ public class VoidTensorOps<V> : TensorOps<V> {
101102
return VoidOpsTensor(resultData, a.dtype)
102103
}
103104

105+
@InProgress("Metal", owner="ops-team", issue="GH-1234")
104106
override fun <T : DType> matmul(a: Tensor<T, V>, b: Tensor<T, V>): Tensor<T, V> {
105107
validateMatmulShapes(a.shape, b.shape)
106108
val resultShape = calculateMatmulShape(a.shape, b.shape)
107109
val resultData = dataFactory.zeros<T, V>(resultShape, a.dtype)
108110
return VoidOpsTensor(resultData, a.dtype)
109111
}
110112

113+
@InProgress("Metal", owner="ops-team", issue="GH-1234")
111114
override fun <T : DType> transpose(tensor: Tensor<T, V>): Tensor<T, V> {
112115
val resultShape = calculateTransposeShape(tensor.shape)
113116
val resultData = dataFactory.zeros<T, V>(resultShape, tensor.dtype)

skainet-lang/skainet-lang-export-ops/build.gradle.kts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
alias(libs.plugins.kotlinMultiplatform)
3+
alias(libs.plugins.kotlinSerialization)
34
alias(libs.plugins.ksp)
45
}
56

@@ -22,6 +23,8 @@ kotlin {
2223
sourceSets {
2324
commonMain.dependencies {
2425
implementation(project(":skainet-lang:skainet-lang-core"))
26+
implementation(libs.kotlinx.serialization.json)
27+
2528
}
2629

2730
commonTest.dependencies {
@@ -33,6 +36,8 @@ kotlin {
3336
kotlin.srcDir("build/generated/ksp/jvm/jvmMain/kotlin")
3437
dependencies {
3538
implementation(project(":skainet-lang:skainet-lang-ksp-annotations"))
39+
implementation("com.networknt:json-schema-validator:1.0.87")
40+
implementation("com.fasterxml.jackson.core:jackson-databind:2.15.2")
3641
}
3742
}
3843

@@ -68,3 +73,21 @@ tasks.register<JavaExec>("runKspMain") {
6873
classpath = files(kotlin.jvm().compilations["main"].output.allOutputs, configurations.getByName("jvmRuntimeClasspath"))
6974
mainClass.set("com.example.KspMainKt")
7075
}
76+
77+
// Add schema validation task
78+
tasks.register<JavaExec>("validateOperatorSchema") {
79+
group = "verification"
80+
description = "Validate generated operator.json files against the JSON schema"
81+
classpath = files(kotlin.jvm().compilations["main"].output.allOutputs, configurations.getByName("jvmRuntimeClasspath"))
82+
mainClass.set("org.mikrograd.diff.ksp.SchemaValidationMainKt")
83+
84+
// Set build directory as argument
85+
args(project.buildDir.absolutePath)
86+
87+
// Depend on KSP compilation to ensure JSON files are generated first
88+
dependsOn("kspKotlinJvm")
89+
90+
doFirst {
91+
println("Validating operator documentation JSON schema...")
92+
}
93+
}
Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
1+
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
2+
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
3+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
4+
15
plugins {
26
alias(libs.plugins.kotlinMultiplatform)
3-
alias(libs.plugins.ksp)
4-
alias(libs.plugins.kotlinSerialization)
57
alias(libs.plugins.vanniktech.mavenPublish)
68
}
79

810

911
kotlin {
1012
jvm()
13+
explicitApi()
14+
15+
iosArm64()
16+
iosSimulatorArm64()
17+
macosArm64 ()
18+
linuxX64 ()
19+
linuxArm64 ()
1120

12-
sourceSets {
13-
val commonMain by getting {
14-
dependencies {
21+
jvm()
1522

16-
implementation(libs.kotlinx.serialization.json)
17-
}
18-
}
23+
@OptIn(ExperimentalWasmDsl::class)
24+
wasmJs {
25+
browser()
26+
binaries.executable()
1927
}
2028
}
2129

skainet-lang/skainet-lang-ksp-annotations/src/commonMain/kotlin/sk/ainet/lang/ops/TensorOp.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package sk.ainet.lang.ops
44
* Computation mode for the Mikrograd annotation.
55
* This determines whether to use ForwardValue (INFERENCE) or BackwardValue (TRAINING).
66
*/
7-
enum class ComputationMode {
7+
public enum class ComputationMode {
88
/**
99
* Inference mode uses ForwardValue which doesn't track gradients.
1010
* This is more memory-efficient when only forward pass is needed.
@@ -26,7 +26,7 @@ enum class ComputationMode {
2626
*/
2727
@Target(AnnotationTarget.FUNCTION)
2828
@Retention(AnnotationRetention.SOURCE)
29-
annotation class TensorOp(val mode: ComputationMode = ComputationMode.INFERENCE)
29+
public annotation class TensorOp(val mode: ComputationMode = ComputationMode.INFERENCE)
3030

3131
/**
3232
* Annotation to mark classes or functions as not implemented for specific backends.
@@ -35,7 +35,7 @@ annotation class TensorOp(val mode: ComputationMode = ComputationMode.INFERENCE)
3535
*/
3636
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
3737
@Retention(AnnotationRetention.SOURCE)
38-
annotation class NotImplemented(vararg val backends: String)
38+
public annotation class NotImplemented(vararg val backends: String)
3939

4040
/**
4141
* Annotation to mark classes or functions as in progress for specific backends.
@@ -46,7 +46,7 @@ annotation class NotImplemented(vararg val backends: String)
4646
*/
4747
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
4848
@Retention(AnnotationRetention.SOURCE)
49-
annotation class InProgress(
49+
public annotation class InProgress(
5050
vararg val backends: String,
5151
val owner: String = "",
5252
val issue: String = ""

skainet-lang/skainet-lang-ksp-processor/build.gradle.kts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
plugins {
2-
kotlin("multiplatform")
2+
alias(libs.plugins.kotlinMultiplatform)
3+
alias(libs.plugins.ksp)
4+
alias(libs.plugins.vanniktech.mavenPublish)
5+
alias(libs.plugins.kotlinSerialization)
36
}
47

5-
group = "com.example"
6-
version = "1.0-SNAPSHOT"
7-
88
kotlin {
99
jvm()
1010
sourceSets {
11+
val commonMain by getting {
12+
dependencies {
13+
implementation(libs.kotlinx.serialization.json)
14+
}
15+
}
1116
val jvmMain by getting {
1217
dependencies {
13-
implementation(project(":skainet-lang:skainet-lang-ksp-annotations"))
1418
implementation(libs.kotlinpoet) // Use version from libs.versions.toml
1519
implementation(libs.kotlinpoet.ksp) // Required for KSP integration
1620
implementation(libs.ksp.api)
21+
implementation(project(":skainet-lang:skainet-lang-ksp-annotations"))
1722
}
1823
kotlin.srcDir("src/main/kotlin")
1924
resources.srcDir("src/main/resources")

skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/org/mikrograd/diff/ksp/ComputeGraphProcessor.kt renamed to skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/sk/ainet/lang/ops/ksp/ComputeGraphProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.mikrograd.diff.ksp
1+
package sk.ainet.lang.ops.ksp
22

33
import com.google.devtools.ksp.processing.*
44
import com.google.devtools.ksp.symbol.*

skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/org/mikrograd/diff/ksp/ExpressionParser.kt renamed to skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/sk/ainet/lang/ops/ksp/ExpressionParser.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.mikrograd.diff.ksp
1+
package sk.ainet.lang.ops.ksp
22

33
import com.squareup.kotlinpoet.CodeBlock
44

skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/org/mikrograd/diff/ksp/ExpressionVisitor.kt renamed to skainet-lang/skainet-lang-ksp-processor/src/main/kotlin/sk/ainet/lang/ops/ksp/ExpressionVisitor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.mikrograd.diff.ksp
1+
package sk.ainet.lang.ops.ksp
22

33
import com.squareup.kotlinpoet.CodeBlock
44
import com.squareup.kotlinpoet.ClassName

0 commit comments

Comments
 (0)