Merge remote-tracking branch 'origin/dev' into feature/fit-analysis

# Conflicts:
#	numass-data-proto/src/gen/kotlin/ru/inr/mass/data/proto/Point.kt
#	numass-workspace/src/main/kotlin/ru/inr/mass/scripts/fit.kt
This commit is contained in:
chernov 2023-10-09 14:55:39 +03:00
commit 7659bc41a0
19 changed files with 170 additions and 209 deletions

View File

@ -13,12 +13,12 @@ allprojects {
} }
group = "ru.inr.mass" group = "ru.inr.mass"
version = "0.1.4-dev-1" version = "0.1.4-dev-2"
} }
val dataforgeVersion by extra("0.6.0-dev-15") val dataforgeVersion by extra("0.6.2")
val tablesVersion: String by extra("0.2.0-dev-3") val tablesVersion: String by extra("0.2.0-dev-3")
val kmathVersion by extra("0.3.1-dev-9") val kmathVersion by extra("0.3.1")
val visionForgeVersion: String by rootProject.extra("0.3.0-dev-6") val visionForgeVersion: String by rootProject.extra("0.3.0-dev-6")

View File

@ -5,12 +5,11 @@
kotlin.code.style=official kotlin.code.style=official
kotlin.mpp.stability.nowarn=true kotlin.mpp.stability.nowarn=true
kotlin.js.compiler=ir
kotlin.jupyter.add.scanner=false
org.gradle.configureondemand=true org.gradle.configureondemand=true
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G
toolsVersion=0.13.3-kotlin-1.7.20 toolsVersion=0.14.10-kotlin-1.9.0
compose.version=1.2.2 compose.version=1.5.1

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -8,7 +8,9 @@ val dataforgeVersion: String by rootProject.extra
val kmathVersion: String by rootProject.extra val kmathVersion: String by rootProject.extra
val tablesVersion: String by rootProject.extra val tablesVersion: String by rootProject.extra
kotlin.sourceSets { kscience {
jvm()
js()
commonMain { commonMain {
dependencies { dependencies {
api(projects.numass.numassDataModel) api(projects.numass.numassDataModel)

View File

@ -6,7 +6,11 @@ plugins {
val dataforgeVersion: String by rootProject.extra val dataforgeVersion: String by rootProject.extra
kotlin.sourceSets { kscience{
jvm()
js()
useSerialization()
commonMain { commonMain {
dependencies { dependencies {
api("space.kscience:dataforge-context:$dataforgeVersion") api("space.kscience:dataforge-context:$dataforgeVersion")
@ -14,15 +18,14 @@ kotlin.sourceSets {
api("org.jetbrains.kotlinx:kotlinx-datetime:${space.kscience.gradle.KScienceVersions.dateTimeVersion}") api("org.jetbrains.kotlinx:kotlinx-datetime:${space.kscience.gradle.KScienceVersions.dateTimeVersion}")
} }
} }
jvmMain{ }
kotlin.sourceSets{
getByName("jvmMain"){
dependencies{ dependencies{
api("ch.qos.logback:logback-classic:1.2.3") api("ch.qos.logback:logback-classic:1.2.3")
} }
} }
} }
kscience{
useSerialization()
}

View File

@ -1,6 +1,6 @@
plugins { plugins {
id("space.kscience.gradle.jvm") id("space.kscience.gradle.jvm")
id("com.squareup.wire") version "4.4.1" id("com.squareup.wire") version "4.9.1"
`maven-publish` `maven-publish`
} }

View File

@ -2,29 +2,11 @@
// Source: ru.inr.mass.data.proto.Point in numass-proto.proto // Source: ru.inr.mass.data.proto.Point in numass-proto.proto
package ru.inr.mass.`data`.proto package ru.inr.mass.`data`.proto
import com.squareup.wire.FieldEncoding import com.squareup.wire.*
import com.squareup.wire.Message
import com.squareup.wire.ProtoAdapter
import com.squareup.wire.ProtoReader
import com.squareup.wire.ProtoWriter
import com.squareup.wire.ReverseProtoWriter
import com.squareup.wire.Syntax
import com.squareup.wire.Syntax.PROTO_3 import com.squareup.wire.Syntax.PROTO_3
import com.squareup.wire.WireField import com.squareup.wire.internal.JvmField
import com.squareup.wire.`internal`.immutableCopyOf import com.squareup.wire.internal.immutableCopyOf
import com.squareup.wire.`internal`.redactElements import com.squareup.wire.internal.redactElements
import kotlin.Any
import kotlin.AssertionError
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.DeprecationLevel
import kotlin.Int
import kotlin.Long
import kotlin.Nothing
import kotlin.String
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmField
import okio.ByteString import okio.ByteString
public class Point( public class Point(
@ -38,6 +20,7 @@ public class Point(
tag = 1, tag = 1,
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel#ADAPTER", adapter = "ru.inr.mass.data.proto.Point${'$'}Channel#ADAPTER",
label = WireField.Label.REPEATED, label = WireField.Label.REPEATED,
schemaIndex = 0,
) )
public val channels: List<Channel> = immutableCopyOf("channels", channels) public val channels: List<Channel> = immutableCopyOf("channels", channels)
@ -45,10 +28,10 @@ public class Point(
message = "Shouldn't be used in Kotlin", message = "Shouldn't be used in Kotlin",
level = DeprecationLevel.HIDDEN, level = DeprecationLevel.HIDDEN,
) )
public override fun newBuilder(): Nothing = throw override fun newBuilder(): Nothing = throw
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
public override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other === this) return true if (other === this) return true
if (other !is Point) return false if (other !is Point) return false
if (unknownFields != other.unknownFields) return false if (unknownFields != other.unknownFields) return false
@ -56,7 +39,7 @@ public class Point(
return true return true
} }
public override fun hashCode(): Int { override fun hashCode(): Int {
var result = super.hashCode var result = super.hashCode
if (result == 0) { if (result == 0) {
result = unknownFields.hashCode() result = unknownFields.hashCode()
@ -66,7 +49,7 @@ public class Point(
return result return result
} }
public override fun toString(): String { override fun toString(): String {
val result = mutableListOf<String>() val result = mutableListOf<String>()
if (channels.isNotEmpty()) result += """channels=$channels""" if (channels.isNotEmpty()) result += """channels=$channels"""
return result.joinToString(prefix = "Point{", separator = ", ", postfix = "}") return result.joinToString(prefix = "Point{", separator = ", ", postfix = "}")
@ -85,23 +68,23 @@ public class Point(
null, null,
"numass-proto.proto" "numass-proto.proto"
) { ) {
public override fun encodedSize(`value`: Point): Int { override fun encodedSize(`value`: Point): Int {
var size = value.unknownFields.size var size = value.unknownFields.size
size += Channel.ADAPTER.asRepeated().encodedSizeWithTag(1, value.channels) size += Channel.ADAPTER.asRepeated().encodedSizeWithTag(1, value.channels)
return size return size
} }
public override fun encode(writer: ProtoWriter, `value`: Point): Unit { override fun encode(writer: ProtoWriter, `value`: Point) {
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels) Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
} }
public override fun encode(writer: ReverseProtoWriter, `value`: Point): Unit { override fun encode(writer: ReverseProtoWriter, `value`: Point) {
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels) Channel.ADAPTER.asRepeated().encodeWithTag(writer, 1, value.channels)
} }
public override fun decode(reader: ProtoReader): Point { override fun decode(reader: ProtoReader): Point {
val channels = mutableListOf<Channel>() val channels = mutableListOf<Channel>()
val unknownFields = reader.forEachTag { tag -> val unknownFields = reader.forEachTag { tag ->
when (tag) { when (tag) {
@ -115,7 +98,7 @@ public class Point(
) )
} }
public override fun redact(`value`: Point): Point = value.copy( override fun redact(`value`: Point): Point = value.copy(
channels = value.channels.redactElements(Channel.ADAPTER), channels = value.channels.redactElements(Channel.ADAPTER),
unknownFields = ByteString.EMPTY unknownFields = ByteString.EMPTY
) )
@ -135,6 +118,7 @@ public class Point(
tag = 1, tag = 1,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
schemaIndex = 0,
) )
public val id: Long = 0L, public val id: Long = 0L,
blocks: List<Block> = emptyList(), blocks: List<Block> = emptyList(),
@ -147,6 +131,7 @@ public class Point(
tag = 2, tag = 2,
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block#ADAPTER", adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block#ADAPTER",
label = WireField.Label.REPEATED, label = WireField.Label.REPEATED,
schemaIndex = 1,
) )
public val blocks: List<Block> = immutableCopyOf("blocks", blocks) public val blocks: List<Block> = immutableCopyOf("blocks", blocks)
@ -154,10 +139,10 @@ public class Point(
message = "Shouldn't be used in Kotlin", message = "Shouldn't be used in Kotlin",
level = DeprecationLevel.HIDDEN, level = DeprecationLevel.HIDDEN,
) )
public override fun newBuilder(): Nothing = throw override fun newBuilder(): Nothing = throw
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
public override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other === this) return true if (other === this) return true
if (other !is Channel) return false if (other !is Channel) return false
if (unknownFields != other.unknownFields) return false if (unknownFields != other.unknownFields) return false
@ -166,7 +151,7 @@ public class Point(
return true return true
} }
public override fun hashCode(): Int { override fun hashCode(): Int {
var result = super.hashCode var result = super.hashCode
if (result == 0) { if (result == 0) {
result = unknownFields.hashCode() result = unknownFields.hashCode()
@ -177,7 +162,7 @@ public class Point(
return result return result
} }
public override fun toString(): String { override fun toString(): String {
val result = mutableListOf<String>() val result = mutableListOf<String>()
result += """id=$id""" result += """id=$id"""
if (blocks.isNotEmpty()) result += """blocks=$blocks""" if (blocks.isNotEmpty()) result += """blocks=$blocks"""
@ -200,26 +185,26 @@ public class Point(
null, null,
"numass-proto.proto" "numass-proto.proto"
) { ) {
public override fun encodedSize(`value`: Channel): Int { override fun encodedSize(`value`: Channel): Int {
var size = value.unknownFields.size var size = value.unknownFields.size
if (value.id != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.id) if (value.id != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.id)
size += Block.ADAPTER.asRepeated().encodedSizeWithTag(2, value.blocks) size += Block.ADAPTER.asRepeated().encodedSizeWithTag(2, value.blocks)
return size return size
} }
public override fun encode(writer: ProtoWriter, `value`: Channel): Unit { override fun encode(writer: ProtoWriter, `value`: Channel) {
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id) if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks) Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
} }
public override fun encode(writer: ReverseProtoWriter, `value`: Channel): Unit { override fun encode(writer: ReverseProtoWriter, `value`: Channel) {
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks) Block.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.blocks)
if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id) if (value.id != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.id)
} }
public override fun decode(reader: ProtoReader): Channel { override fun decode(reader: ProtoReader): Channel {
var id: Long = 0L var id: Long = 0L
val blocks = mutableListOf<Block>() val blocks = mutableListOf<Block>()
val unknownFields = reader.forEachTag { tag -> val unknownFields = reader.forEachTag { tag ->
@ -236,7 +221,7 @@ public class Point(
) )
} }
public override fun redact(`value`: Channel): Channel = value.copy( override fun redact(`value`: Channel): Channel = value.copy(
blocks = value.blocks.redactElements(Block.ADAPTER), blocks = value.blocks.redactElements(Block.ADAPTER),
unknownFields = ByteString.EMPTY unknownFields = ByteString.EMPTY
) )
@ -256,6 +241,7 @@ public class Point(
tag = 1, tag = 1,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
schemaIndex = 0,
) )
public val time: Long = 0L, public val time: Long = 0L,
frames: List<Frame> = emptyList(), frames: List<Frame> = emptyList(),
@ -266,6 +252,7 @@ public class Point(
tag = 3, tag = 3,
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Events#ADAPTER", adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Events#ADAPTER",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
schemaIndex = 2,
) )
public val events: Events? = null, public val events: Events? = null,
/** /**
@ -275,6 +262,7 @@ public class Point(
tag = 4, tag = 4,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
schemaIndex = 3,
) )
public val length: Long = 0L, public val length: Long = 0L,
/** /**
@ -285,6 +273,7 @@ public class Point(
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
jsonName = "binSize", jsonName = "binSize",
schemaIndex = 4,
) )
public val bin_size: Long = 0L, public val bin_size: Long = 0L,
unknownFields: ByteString = ByteString.EMPTY, unknownFields: ByteString = ByteString.EMPTY,
@ -296,6 +285,7 @@ public class Point(
tag = 2, tag = 2,
adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Frame#ADAPTER", adapter = "ru.inr.mass.data.proto.Point${'$'}Channel${'$'}Block${'$'}Frame#ADAPTER",
label = WireField.Label.REPEATED, label = WireField.Label.REPEATED,
schemaIndex = 1,
) )
public val frames: List<Frame> = immutableCopyOf("frames", frames) public val frames: List<Frame> = immutableCopyOf("frames", frames)
@ -303,10 +293,10 @@ public class Point(
message = "Shouldn't be used in Kotlin", message = "Shouldn't be used in Kotlin",
level = DeprecationLevel.HIDDEN, level = DeprecationLevel.HIDDEN,
) )
public override fun newBuilder(): Nothing = throw override fun newBuilder(): Nothing = throw
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
public override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other === this) return true if (other === this) return true
if (other !is Block) return false if (other !is Block) return false
if (unknownFields != other.unknownFields) return false if (unknownFields != other.unknownFields) return false
@ -318,7 +308,7 @@ public class Point(
return true return true
} }
public override fun hashCode(): Int { override fun hashCode(): Int {
var result = super.hashCode var result = super.hashCode
if (result == 0) { if (result == 0) {
result = unknownFields.hashCode() result = unknownFields.hashCode()
@ -332,7 +322,7 @@ public class Point(
return result return result
} }
public override fun toString(): String { override fun toString(): String {
val result = mutableListOf<String>() val result = mutableListOf<String>()
result += """time=$time""" result += """time=$time"""
if (frames.isNotEmpty()) result += """frames=$frames""" if (frames.isNotEmpty()) result += """frames=$frames"""
@ -361,7 +351,7 @@ public class Point(
null, null,
"numass-proto.proto" "numass-proto.proto"
) { ) {
public override fun encodedSize(`value`: Block): Int { override fun encodedSize(`value`: Block): Int {
var size = value.unknownFields.size var size = value.unknownFields.size
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time) if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
size += Frame.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames) size += Frame.ADAPTER.asRepeated().encodedSizeWithTag(2, value.frames)
@ -372,7 +362,7 @@ public class Point(
return size return size
} }
public override fun encode(writer: ProtoWriter, `value`: Block): Unit { override fun encode(writer: ProtoWriter, `value`: Block) {
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames) Frame.ADAPTER.asRepeated().encodeWithTag(writer, 2, value.frames)
if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events) if (value.events != null) Events.ADAPTER.encodeWithTag(writer, 3, value.events)
@ -381,7 +371,7 @@ public class Point(
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
} }
public override fun encode(writer: ReverseProtoWriter, `value`: Block): Unit { override fun encode(writer: ReverseProtoWriter, `value`: Block) {
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size) if (value.bin_size != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 5, value.bin_size)
if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length) if (value.length != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 4, value.length)
@ -390,7 +380,7 @@ public class Point(
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
} }
public override fun decode(reader: ProtoReader): Block { override fun decode(reader: ProtoReader): Block {
var time: Long = 0L var time: Long = 0L
val frames = mutableListOf<Frame>() val frames = mutableListOf<Frame>()
var events: Events? = null var events: Events? = null
@ -416,7 +406,7 @@ public class Point(
) )
} }
public override fun redact(`value`: Block): Block = value.copy( override fun redact(`value`: Block): Block = value.copy(
frames = value.frames.redactElements(Frame.ADAPTER), frames = value.frames.redactElements(Frame.ADAPTER),
events = value.events?.let(Events.ADAPTER::redact), events = value.events?.let(Events.ADAPTER::redact),
unknownFields = ByteString.EMPTY unknownFields = ByteString.EMPTY
@ -437,6 +427,7 @@ public class Point(
tag = 1, tag = 1,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
schemaIndex = 0,
) )
public val time: Long = 0L, public val time: Long = 0L,
/** /**
@ -447,6 +438,7 @@ public class Point(
adapter = "com.squareup.wire.ProtoAdapter#BYTES", adapter = "com.squareup.wire.ProtoAdapter#BYTES",
label = WireField.Label.OMIT_IDENTITY, label = WireField.Label.OMIT_IDENTITY,
declaredName = "data", declaredName = "data",
schemaIndex = 1,
) )
public val data_: ByteString = ByteString.EMPTY, public val data_: ByteString = ByteString.EMPTY,
unknownFields: ByteString = ByteString.EMPTY, unknownFields: ByteString = ByteString.EMPTY,
@ -455,10 +447,10 @@ public class Point(
message = "Shouldn't be used in Kotlin", message = "Shouldn't be used in Kotlin",
level = DeprecationLevel.HIDDEN, level = DeprecationLevel.HIDDEN,
) )
public override fun newBuilder(): Nothing = throw override fun newBuilder(): Nothing = throw
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
public override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other === this) return true if (other === this) return true
if (other !is Frame) return false if (other !is Frame) return false
if (unknownFields != other.unknownFields) return false if (unknownFields != other.unknownFields) return false
@ -467,7 +459,7 @@ public class Point(
return true return true
} }
public override fun hashCode(): Int { override fun hashCode(): Int {
var result = super.hashCode var result = super.hashCode
if (result == 0) { if (result == 0) {
result = unknownFields.hashCode() result = unknownFields.hashCode()
@ -478,7 +470,7 @@ public class Point(
return result return result
} }
public override fun toString(): String { override fun toString(): String {
val result = mutableListOf<String>() val result = mutableListOf<String>()
result += """time=$time""" result += """time=$time"""
result += """data_=$data_""" result += """data_=$data_"""
@ -501,7 +493,7 @@ public class Point(
null, null,
"numass-proto.proto" "numass-proto.proto"
) { ) {
public override fun encodedSize(`value`: Frame): Int { override fun encodedSize(`value`: Frame): Int {
var size = value.unknownFields.size var size = value.unknownFields.size
if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time) if (value.time != 0L) size += ProtoAdapter.UINT64.encodedSizeWithTag(1, value.time)
if (value.data_ != ByteString.EMPTY) size += ProtoAdapter.BYTES.encodedSizeWithTag(2, if (value.data_ != ByteString.EMPTY) size += ProtoAdapter.BYTES.encodedSizeWithTag(2,
@ -509,21 +501,21 @@ public class Point(
return size return size
} }
public override fun encode(writer: ProtoWriter, `value`: Frame): Unit { override fun encode(writer: ProtoWriter, `value`: Frame) {
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2, if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
value.data_) value.data_)
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
} }
public override fun encode(writer: ReverseProtoWriter, `value`: Frame): Unit { override fun encode(writer: ReverseProtoWriter, `value`: Frame) {
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2, if (value.data_ != ByteString.EMPTY) ProtoAdapter.BYTES.encodeWithTag(writer, 2,
value.data_) value.data_)
if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time) if (value.time != 0L) ProtoAdapter.UINT64.encodeWithTag(writer, 1, value.time)
} }
public override fun decode(reader: ProtoReader): Frame { override fun decode(reader: ProtoReader): Frame {
var time: Long = 0L var time: Long = 0L
var data_: ByteString = ByteString.EMPTY var data_: ByteString = ByteString.EMPTY
val unknownFields = reader.forEachTag { tag -> val unknownFields = reader.forEachTag { tag ->
@ -540,7 +532,7 @@ public class Point(
) )
} }
public override fun redact(`value`: Frame): Frame = value.copy( override fun redact(`value`: Frame): Frame = value.copy(
unknownFields = ByteString.EMPTY unknownFields = ByteString.EMPTY
) )
} }
@ -566,6 +558,7 @@ public class Point(
tag = 1, tag = 1,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.PACKED, label = WireField.Label.PACKED,
schemaIndex = 0,
) )
public val times: List<Long> = immutableCopyOf("times", times) public val times: List<Long> = immutableCopyOf("times", times)
@ -576,6 +569,7 @@ public class Point(
tag = 2, tag = 2,
adapter = "com.squareup.wire.ProtoAdapter#UINT64", adapter = "com.squareup.wire.ProtoAdapter#UINT64",
label = WireField.Label.PACKED, label = WireField.Label.PACKED,
schemaIndex = 1,
) )
public val amplitudes: List<Long> = immutableCopyOf("amplitudes", amplitudes) public val amplitudes: List<Long> = immutableCopyOf("amplitudes", amplitudes)
@ -583,10 +577,10 @@ public class Point(
message = "Shouldn't be used in Kotlin", message = "Shouldn't be used in Kotlin",
level = DeprecationLevel.HIDDEN, level = DeprecationLevel.HIDDEN,
) )
public override fun newBuilder(): Nothing = throw override fun newBuilder(): Nothing = throw
AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin") AssertionError("Builders are deprecated and only available in a javaInterop build; see https://square.github.io/wire/wire_compiler/#kotlin")
public override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other === this) return true if (other === this) return true
if (other !is Events) return false if (other !is Events) return false
if (unknownFields != other.unknownFields) return false if (unknownFields != other.unknownFields) return false
@ -595,7 +589,7 @@ public class Point(
return true return true
} }
public override fun hashCode(): Int { override fun hashCode(): Int {
var result = super.hashCode var result = super.hashCode
if (result == 0) { if (result == 0) {
result = unknownFields.hashCode() result = unknownFields.hashCode()
@ -606,7 +600,7 @@ public class Point(
return result return result
} }
public override fun toString(): String { override fun toString(): String {
val result = mutableListOf<String>() val result = mutableListOf<String>()
if (times.isNotEmpty()) result += """times=$times""" if (times.isNotEmpty()) result += """times=$times"""
if (amplitudes.isNotEmpty()) result += """amplitudes=$amplitudes""" if (amplitudes.isNotEmpty()) result += """amplitudes=$amplitudes"""
@ -629,43 +623,61 @@ public class Point(
null, null,
"numass-proto.proto" "numass-proto.proto"
) { ) {
public override fun encodedSize(`value`: Events): Int { override fun encodedSize(`value`: Events): Int {
var size = value.unknownFields.size var size = value.unknownFields.size
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(1, value.times) size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(1, value.times)
size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(2, value.amplitudes) size += ProtoAdapter.UINT64.asPacked().encodedSizeWithTag(2, value.amplitudes)
return size return size
} }
public override fun encode(writer: ProtoWriter, `value`: Events): Unit { override fun encode(writer: ProtoWriter, `value`: Events) {
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times) ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes) ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
} }
public override fun encode(writer: ReverseProtoWriter, `value`: Events): Unit { override fun encode(writer: ReverseProtoWriter, `value`: Events) {
writer.writeBytes(value.unknownFields) writer.writeBytes(value.unknownFields)
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes) ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 2, value.amplitudes)
ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times) ProtoAdapter.UINT64.asPacked().encodeWithTag(writer, 1, value.times)
} }
public override fun decode(reader: ProtoReader): Events { override fun decode(reader: ProtoReader): Events {
val times = mutableListOf<Long>() var times: MutableList<Long>? = null
val amplitudes = mutableListOf<Long>() var amplitudes: MutableList<Long>? = null
val unknownFields = reader.forEachTag { tag -> val unknownFields = reader.forEachTag { tag ->
when (tag) { when (tag) {
1 -> times.add(ProtoAdapter.UINT64.decode(reader)) 1 -> {
2 -> amplitudes.add(ProtoAdapter.UINT64.decode(reader)) if (times == null) {
val minimumByteSize = 1
val initialCapacity = (reader.nextFieldMinLengthInBytes() / minimumByteSize)
.coerceAtMost(Int.MAX_VALUE.toLong())
.toInt()
times = ArrayList(initialCapacity)
}
times!!.add(ProtoAdapter.UINT64.decode(reader))
}
2 -> {
if (amplitudes == null) {
val minimumByteSize = 1
val initialCapacity = (reader.nextFieldMinLengthInBytes() / minimumByteSize)
.coerceAtMost(Int.MAX_VALUE.toLong())
.toInt()
amplitudes = ArrayList(initialCapacity)
}
amplitudes!!.add(ProtoAdapter.UINT64.decode(reader))
}
else -> reader.readUnknownField(tag) else -> reader.readUnknownField(tag)
} }
} }
return Events( return Events(
times = times, times = times ?: listOf(),
amplitudes = amplitudes, amplitudes = amplitudes ?: listOf(),
unknownFields = unknownFields unknownFields = unknownFields
) )
} }
public override fun redact(`value`: Events): Events = value.copy( override fun redact(`value`: Events): Events = value.copy(
unknownFields = ByteString.EMPTY unknownFields = ByteString.EMPTY
) )
} }

View File

@ -20,7 +20,6 @@ import java.nio.file.Path
import kotlin.io.path.exists import kotlin.io.path.exists
import kotlin.io.path.isDirectory import kotlin.io.path.isDirectory
import kotlin.io.path.relativeTo import kotlin.io.path.relativeTo
import kotlin.reflect.KClass
public class NumassProtoPlugin : AbstractPlugin() { public class NumassProtoPlugin : AbstractPlugin() {
public val io: IOPlugin by require(IOPlugin) public val io: IOPlugin by require(IOPlugin)
@ -35,7 +34,6 @@ public class NumassProtoPlugin : AbstractPlugin() {
public companion object : PluginFactory<NumassProtoPlugin> { public companion object : PluginFactory<NumassProtoPlugin> {
override fun build(context: Context, meta: Meta): NumassProtoPlugin = NumassProtoPlugin() override fun build(context: Context, meta: Meta): NumassProtoPlugin = NumassProtoPlugin()
override val tag: PluginTag = PluginTag("numass-proto", group = "ru.inr.mass") override val tag: PluginTag = PluginTag("numass-proto", group = "ru.inr.mass")
override val type: KClass<out NumassProtoPlugin> = NumassProtoPlugin::class
} }
} }

View File

@ -39,24 +39,8 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
writeRawString(END_SEQUENCE) writeRawString(END_SEQUENCE)
} }
override fun writeEnvelope( override fun writeObject(output: Output, obj: Envelope) {
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
) {
error("Don't write legacy formats") error("Don't write legacy formats")
// val metaFormat = metaFormatFactory.invoke(formatMeta, io.context)
// val metaBytes = metaFormat.toBinary(envelope.meta)
// val actualSize: ULong = (envelope.data?.size ?: 0).toULong()
// val tag = Tag(metaFormatFactory.key, metaBytes.size.toUInt() + 2u, actualSize)
// output.writeBinary(tag.toBinary())
// output.writeBinary(metaBytes)
// output.writeRawString("\r\n")
// envelope.data?.let {
// output.writeBinary(it)
// }
// output.flush()
} }
/** /**
@ -68,31 +52,30 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
override fun readObject(input: Input): Envelope { override fun readObject(input: Input): Envelope {
val tag = input.readTag() val tag = input.readTag()
val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) val metaFormat = io.resolveMetaFormat(tag.metaFormatKey) ?: JsonMetaFormat
?: error("Meta format with key ${tag.metaFormatKey} not found")
val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt())) val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
val data = input.readBinary(tag.dataSize.toInt()) val data = input.readBinary(tag.dataSize.toInt())
return SimpleEnvelope(meta, data) return Envelope(meta, data)
}
override fun readPartial(input: Input): PartialEnvelope {
val tag = input.readTag()
val metaFormat = if (tag.metaFormatKey == 1.toShort()) {
JsonMetaFormat
} else {
io.resolveMetaFormat(tag.metaFormatKey)
?: error("Meta format with key ${tag.metaFormatKey} not found")
}
val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
return PartialEnvelope(meta, 30 + tag.metaSize.toInt(), tag.dataSize)
} }
//
// override fun readPartial(input: Input): PartialEnvelope {
// val tag = input.readTag()
//
// val metaFormat = if (tag.metaFormatKey == 1.toShort()) {
// JsonMetaFormat
// } else {
// io.resolveMetaFormat(tag.metaFormatKey)
// ?: error("Meta format with key ${tag.metaFormatKey} not found")
// }
//
// val meta: Meta = metaFormat.readObjectFrom(input.readBinary(tag.metaSize.toInt()))
//
//
// return PartialEnvelope(meta, 30 + tag.metaSize.toInt(), tag.dataSize)
// }
private data class Tag( private data class Tag(
val metaFormatKey: Short, val metaFormatKey: Short,
@ -149,23 +132,11 @@ public class TaggedNumassEnvelopeFormat(private val io: IOPlugin) : EnvelopeForm
private val default by lazy { invoke() } private val default by lazy { invoke() }
override fun readPartial(input: Input): PartialEnvelope = override fun writeObject(output: Output, obj: Envelope) {
default.run { readPartial(input) } error("Don't write legacy formats")
override fun writeEnvelope(
output: Output,
envelope: Envelope,
metaFormatFactory: MetaFormatFactory,
formatMeta: Meta,
): Unit = default.run {
writeEnvelope(
output,
envelope,
metaFormatFactory,
formatMeta
)
} }
override fun readObject(input: Input): Envelope = default.readObject(input) override fun readObject(input: Input): Envelope = default.readObject(input)
} }
} }

View File

@ -8,62 +8,41 @@ val visionForgeVersion: String by rootProject.extra
val production: Boolean by rootProject.extra(true) val production: Boolean by rootProject.extra(true)
kotlin {
js(IR) { kscience {
browser { fullStack("js/numass-web.js")
webpackTask {
this.outputFileName = "js/numass-web.js" useSerialization {
} json()
}
binaries.executable()
} }
sourceSets { useContextReceivers()
useKtor()
commonMain { commonMain {
dependencies { dependencies {
implementation(project(":numass-data-model")) implementation(project(":numass-data-model"))
implementation("space.kscience:visionforge-core:$visionForgeVersion") implementation("space.kscience:visionforge-core:$visionForgeVersion")
implementation("space.kscience:visionforge-plotly:$visionForgeVersion") implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
}
}
}
kotlin{
sourceSets{
getByName("jvmMain"){
dependencies{
implementation(compose.runtime) implementation(compose.runtime)
}
}
jvmMain {
dependencies {
implementation(project(":numass-data-proto")) implementation(project(":numass-data-proto"))
implementation("io.ktor:ktor-server-cio:2.1.3") implementation("io.ktor:ktor-server-cio")
implementation("io.ktor:ktor-server-html-builder-jvm:2.1.3") implementation("io.ktor:ktor-server-html-builder")
implementation("space.kscience:visionforge-plotly:$visionForgeVersion") implementation("space.kscience:visionforge-plotly:$visionForgeVersion")
} }
} }
jsMain{ getByName("jsMain"){
dependencies{ dependencies{
implementation(compose.web.core) implementation(compose.html.core)
} }
} }
}
}
afterEvaluate {
val distributionTask = if (production) {
tasks.getByName("jsBrowserDistribution")
} else {
tasks.getByName("jsBrowserDevelopmentExecutableDistribution")
}
tasks.getByName<ProcessResources>("jvmProcessResources") {
dependsOn(distributionTask)
from(distributionTask)
include("**/*.js")
if (production) {
include("**/*.map")
}
} }
} }
kscience {
useSerialization {
json()
}
withContextReceivers()
}

View File

@ -9,7 +9,6 @@ import space.kscience.dataforge.context.PluginTag
import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.Meta
import space.kscience.visionforge.Vision import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionPlugin import space.kscience.visionforge.VisionPlugin
import kotlin.reflect.KClass
public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) { public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) {
override val tag: PluginTag get() = Companion.tag override val tag: PluginTag get() = Companion.tag
@ -18,7 +17,6 @@ public class NumassCommonPlugin(meta: Meta = Meta.EMPTY) : VisionPlugin(meta) {
public companion object : PluginFactory<NumassCommonPlugin> { public companion object : PluginFactory<NumassCommonPlugin> {
override val tag: PluginTag = PluginTag("numass.common", "ru.inr.mass") override val tag: PluginTag = PluginTag("numass.common", "ru.inr.mass")
override val type: KClass<NumassCommonPlugin> = NumassCommonPlugin::class
override fun build(context: Context, meta: Meta): NumassCommonPlugin = NumassCommonPlugin() override fun build(context: Context, meta: Meta): NumassCommonPlugin = NumassCommonPlugin()

View File

@ -18,7 +18,6 @@ import space.kscience.visionforge.ElementVisionRenderer
import space.kscience.visionforge.Vision import space.kscience.visionforge.Vision
import space.kscience.visionforge.VisionClient import space.kscience.visionforge.VisionClient
import space.kscience.visionforge.plotly.PlotlyPlugin import space.kscience.visionforge.plotly.PlotlyPlugin
import kotlin.reflect.KClass
public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer { public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
public val client: VisionClient by require(VisionClient) public val client: VisionClient by require(VisionClient)
@ -83,8 +82,6 @@ public class NumassJsPlugin : AbstractPlugin(), ElementVisionRenderer {
public companion object : PluginFactory<NumassJsPlugin> { public companion object : PluginFactory<NumassJsPlugin> {
override val tag: PluginTag = PluginTag("numass.js", "ru.inr.mass") override val tag: PluginTag = PluginTag("numass.js", "ru.inr.mass")
override val type: KClass<NumassJsPlugin> = NumassJsPlugin::class
override fun build(context: Context, meta: Meta): NumassJsPlugin = NumassJsPlugin() override fun build(context: Context, meta: Meta): NumassJsPlugin = NumassJsPlugin()
} }

View File

@ -7,7 +7,9 @@ plugins {
val dataforgeVersion: String by rootProject.extra val dataforgeVersion: String by rootProject.extra
val kmathVersion: String by rootProject.extra val kmathVersion: String by rootProject.extra
kotlin.sourceSets { kscience{
jvm()
js()
commonMain { commonMain {
dependencies { dependencies {
api("space.kscience:dataforge-context:$dataforgeVersion") api("space.kscience:dataforge-context:$dataforgeVersion")
@ -15,7 +17,10 @@ kotlin.sourceSets {
api("space.kscience:kmath-functions:$kmathVersion") api("space.kscience:kmath-functions:$kmathVersion")
} }
} }
jvmMain { }
kotlin.sourceSets{
getByName("jvmMain"){
dependencies { dependencies {
api("space.kscience:kmath-commons:$kmathVersion") api("space.kscience:kmath-commons:$kmathVersion")
api("ch.qos.logback:logback-classic:1.2.3") api("ch.qos.logback:logback-classic:1.2.3")

View File

@ -15,10 +15,10 @@
*/ */
package ru.inr.mass.models package ru.inr.mass.models
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.data.ColumnarData import space.kscience.kmath.data.ColumnarData
import space.kscience.kmath.expressions.Symbol import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.expressions.symbol import space.kscience.kmath.expressions.symbol
import space.kscience.kmath.misc.UnstableKMathAPI
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer

View File

@ -33,7 +33,7 @@ public class NBkgSpectrum(public val source: Spectrum) : DifferentiableSpectrum
symbols.isEmpty() -> this symbols.isEmpty() -> this
symbols.size == 1 -> when (symbols.first()) { symbols.size == 1 -> when (symbols.first()) {
norm -> Spectrum { x, arguments -> source(x, arguments) } norm -> Spectrum { x, arguments -> source(x, arguments) }
bkg -> Spectrum { x, _ -> 1.0 } bkg -> Spectrum { _, _ -> 1.0 }
else -> (source as? DifferentiableSpectrum)?.derivativeOrNull(symbols)?.let { NBkgSpectrum(it) } else -> (source as? DifferentiableSpectrum)?.derivativeOrNull(symbols)?.let { NBkgSpectrum(it) }
} }
else -> null else -> null

View File

@ -18,7 +18,6 @@ import space.kscience.dataforge.workspace.WorkspacePlugin
import space.kscience.dataforge.workspace.pipeFrom import space.kscience.dataforge.workspace.pipeFrom
import space.kscience.dataforge.workspace.task import space.kscience.dataforge.workspace.task
import space.kscience.tables.Table import space.kscience.tables.Table
import kotlin.reflect.KClass
class NumassWorkspacePlugin : WorkspacePlugin() { class NumassWorkspacePlugin : WorkspacePlugin() {
override val tag: PluginTag get() = Companion.tag override val tag: PluginTag get() = Companion.tag
@ -128,7 +127,6 @@ class NumassWorkspacePlugin : WorkspacePlugin() {
companion object : PluginFactory<NumassWorkspacePlugin> { companion object : PluginFactory<NumassWorkspacePlugin> {
override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm") override val tag: PluginTag = PluginTag("numass", "ru.mipt.npm")
override val type: KClass<out NumassWorkspacePlugin> = NumassWorkspacePlugin::class
override fun build(context: Context, meta: Meta): NumassWorkspacePlugin = NumassWorkspacePlugin() override fun build(context: Context, meta: Meta): NumassWorkspacePlugin = NumassWorkspacePlugin()
} }
} }

View File

@ -3,13 +3,13 @@
package ru.inr.mass.workspace package ru.inr.mass.workspace
import ru.inr.mass.models.Spectrum import ru.inr.mass.models.Spectrum
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.data.XYColumnarData import space.kscience.kmath.data.XYColumnarData
import space.kscience.kmath.data.XYErrorColumnarData import space.kscience.kmath.data.XYErrorColumnarData
import space.kscience.kmath.expressions.DifferentiableExpression import space.kscience.kmath.expressions.DifferentiableExpression
import space.kscience.kmath.expressions.Symbol import space.kscience.kmath.expressions.Symbol
import space.kscience.kmath.misc.FeatureSet import space.kscience.kmath.misc.FeatureSet
import space.kscience.kmath.misc.Loggable import space.kscience.kmath.misc.Loggable
import space.kscience.kmath.misc.UnstableKMathAPI
import space.kscience.kmath.optimization.* import space.kscience.kmath.optimization.*
import space.kscience.kmath.random.RandomGenerator import space.kscience.kmath.random.RandomGenerator
import space.kscience.kmath.samplers.PoissonSampler import space.kscience.kmath.samplers.PoissonSampler

View File

@ -12,9 +12,9 @@ import ru.inr.mass.data.proto.HVData
import ru.inr.mass.data.proto.NumassDirectorySet import ru.inr.mass.data.proto.NumassDirectorySet
import space.kscience.dataforge.meta.asValue import space.kscience.dataforge.meta.asValue
import space.kscience.dataforge.meta.double import space.kscience.dataforge.meta.double
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.domains.center import space.kscience.kmath.domains.center
import space.kscience.kmath.histogram.Histogram1D import space.kscience.kmath.histogram.Histogram1D
import space.kscience.kmath.misc.UnstableKMathAPI
import space.kscience.kmath.operations.asIterable import space.kscience.kmath.operations.asIterable
import space.kscience.kmath.structures.Buffer import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.DoubleBuffer import space.kscience.kmath.structures.DoubleBuffer

View File

@ -1,7 +1,6 @@
rootProject.name = "numass" rootProject.name = "numass"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("VERSION_CATALOGS")
pluginManagement { pluginManagement {