Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
525 changes: 525 additions & 0 deletions dataset_arch.md

Large diffs are not rendered by default.

25 changes: 23 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,34 @@
[versions]
agp = "8.11.2"
kotlin = "2.2.20"
kotlinx-coroutines = "1.10.2"
kotlinxCoroutines = "1.10.2"
android-minSdk = "24"
android-compileSdk = "36"
kotlinxSerializationJson = "1.9.0"
ktorClientCore = "3.3.0"
ktorClientPlugins = "3.1.1"
logbackClassic = "1.5.18"


[libraries]
kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
kotlinx-coroutines-core-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", version.ref = "kotlinxCoroutines" }

kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }

ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktorClientCore" }
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktorClientCore" }
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktorClientCore" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorClientCore" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktorClientCore" }
ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktorClientCore" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktorClientCore" }
ktor-client-plugins = { module = "io.ktor:ktor-client-plugins", version.ref = "ktorClientPlugins" }


logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logbackClassic" }


[plugins]
androidLibrary = { id = "com.android.library", version.ref = "agp" }
Expand Down
4 changes: 2 additions & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ include("skainet-core:skainet-performance")
include("skainet-core:skainet-reflection")
include("skainet-nn:skainet-nn-api")
include("skainet-nn:skainet-nn-relection")
//include("skainet-data:skainet-data-api")
//include("skainet-data:skainet-data-simple")
include("skainet-data:skainet-data-api")
include("skainet-data:skainet-data-simple")
61 changes: 61 additions & 0 deletions skainet-data/skainet-data-api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
}

kotlin {
explicitApi()

androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}

iosArm64()
iosSimulatorArm64()
macosArm64 ()
linuxX64 ()
linuxArm64 ()

jvm()

@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser()
binaries.executable()
}

sourceSets {
val commonMain by getting {
dependencies {
implementation(project(":skainet-core:skainet-tensors-api"))
implementation(project(":skainet-core:skainet-tensors"))
}
}

commonTest.dependencies {
implementation(libs.kotlin.test)
implementation(project(":skainet-core:skainet-performance"))
}
}
}

android {
namespace = "sk.ainet.core.api"
compileSdk = libs.versions.android.compileSdk.get().toInt()

defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
2 changes: 2 additions & 0 deletions skainet-data/skainet-data-api/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
POM_ARTIFACT_ID=data-api
POM_NAME=skainet datasets API
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package sk.ainet.data

import sk.ainet.core.tensor.DType
import sk.ainet.core.tensor.Tensor

public data class DataBatch<T : DType, V>(val x: Array<Tensor<T, V>>, val y: Tensor<T, V>) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || this::class != other::class) return false

other as DataBatch<*, *>

if (!x.contentEquals(other.x)) return false
if (y != other.y) return false

return true
}

override fun hashCode(): Int {
var result = x.contentHashCode()
result = 31 * result + y.hashCode()
return result
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package sk.ainet.data

import sk.ainet.core.tensor.DType
import kotlin.math.min


/** Just abstract Dataset. */
public abstract class Dataset<T, Y> {
/** Splits datasets on two sub-datasets according [splitRatio].*/
public abstract fun split(splitRatio: Double): Pair<Dataset<T, Y>, Dataset<T, Y>>

/** Returns amount of data rows. */
public abstract val xSize: Int

/** Returns row by index [idx]. */
public abstract fun getX(idx: Int): T

/** Returns label as [Int] by index [idx]. */
public abstract fun getY(idx: Int): Y

/** Shuffles the dataset. */
public abstract fun shuffle(): Dataset<T, Y>

/**
* An iterator over a [Dataset].
*/
public inner class BatchIterator<T : DType, V> internal constructor(
private val batchSize: Int
) : Iterator<DataBatch<T, V>> {

private var batchStart = 0

override fun hasNext(): Boolean = batchStart < xSize

override fun next(): DataBatch<T, V> {
val batchLength = min(batchSize, xSize - batchStart)
val batch = createDataBatch<T, V>(batchStart, batchLength)
batchStart += batchSize
return batch
}
}

/** Creates data batch that starts from [batchStart] with length [batchLength]. */
protected abstract fun <T : DType, V> createDataBatch(batchStart: Int, batchLength: Int): DataBatch<T, V>


/** Returns [BatchIterator] with fixed [batchSize]. */
public fun <T : DType, V> batchIterator(batchSize: Int): BatchIterator<T, V> {
return BatchIterator(batchSize)
}
}
92 changes: 92 additions & 0 deletions skainet-data/skainet-data-simple/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.vanniktech.mavenPublish)
}

kotlin {
explicitApi()

androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}

iosArm64()
iosSimulatorArm64()
/*
macosArm64()

linuxX64()
linuxArm64()

*/

jvm()

@OptIn(ExperimentalWasmDsl::class)
wasmJs {
browser()
binaries.executable()
}

sourceSets {
androidMain.dependencies {
implementation(libs.ktor.client.android)
}
val commonMain by getting {
dependencies {
implementation(project(":skainet-core:skainet-tensors-api"))
implementation(project(":skainet-core:skainet-tensors-api"))
implementation(libs.kotlinx.serialization.json)
implementation(libs.ktor.client.core)
implementation(libs.kotlinx.coroutines)

}
}

jvmMain.dependencies {
implementation(libs.ktor.client.cio)
implementation(libs.ktor.client.plugins)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.kotlinx.coroutines.core.jvm)
implementation(libs.logback.classic) // For logging
}

commonTest.dependencies {
implementation(libs.kotlin.test)
implementation(project(":skainet-core:skainet-performance"))
}
val wasmJsMain by getting {
dependencies {
implementation(libs.ktor.client.js)
}
}

val iosMain by creating {
dependencies {
implementation(libs.ktor.client.darwin)
}
}
}
}

android {
namespace = "sk.ainet.core.api"
compileSdk = libs.versions.android.compileSdk.get().toInt()

defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
2 changes: 2 additions & 0 deletions skainet-data/skainet-data-simple/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
POM_ARTIFACT_ID=data-basic
POM_NAME=skainet neural basic datasets
Loading
Loading