From a334f91ea7a23a6a0ab661bba0f690086034970f Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Sat, 30 Apr 2022 10:55:37 +0300 Subject: [PATCH] Cleanup --- .../ru/mipt/spc/magprog/DataSetSiteContext.kt | 35 +++++++++++-------- src/main/resources/magprog/content/intro.md | 4 +-- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/ru/mipt/spc/magprog/DataSetSiteContext.kt b/src/main/kotlin/ru/mipt/spc/magprog/DataSetSiteContext.kt index 9976af0..59987e6 100644 --- a/src/main/kotlin/ru/mipt/spc/magprog/DataSetSiteContext.kt +++ b/src/main/kotlin/ru/mipt/spc/magprog/DataSetSiteContext.kt @@ -20,6 +20,7 @@ import space.kscience.dataforge.meta.toMeta import space.kscience.dataforge.misc.DFInternal import space.kscience.dataforge.names.Name import kotlin.reflect.KType +import kotlin.reflect.full.isSubtypeOf import kotlin.reflect.typeOf class DataSetSiteContext( @@ -64,22 +65,28 @@ class DataSetSiteContext( private val Data<*>.published: Boolean get() = meta["published"].string != "false" @DFInternal - override fun resolve(type: KType, name: Name): Data? = when (type) { - typeOf() -> { - val data = dataSet.selectOne(name) - if( data == null) null else { - when (data.meta[META_FILE_EXTENSION_KEY].string) { - "json" -> data.map { - Json.parseToJsonElement(it.decodeToString()).toMeta() - } - "yaml" -> data.map { - YamlMetaFormat.readObject(it.asBinary()) - } - else -> error("File with extension ${data.meta[META_FILE_EXTENSION_KEY]} could not be parsed as Meta") - } as Data? + override fun resolve(type: KType, name: Name): Data? { + val data: Data = dataSet.get(name) ?: return null + return if (type == typeOf() && data.type == typeOf()) { + data as Data + when (data.meta[META_FILE_EXTENSION_KEY].string) { + "json" -> data.map { + Json.parseToJsonElement(it.decodeToString()).toMeta() + } + "yaml" -> data.map { + YamlMetaFormat.readObject(it.asBinary()) + } + else -> error("File with extension ${data.meta[META_FILE_EXTENSION_KEY]} could not be parsed as Meta") + } as Data? + }else { + if (!data.type.isSubtypeOf(type)) { + null + } else { + object : Data by (data as Data) { + override val type: KType = type + } } } - else -> dataSet.selectOne(type, name) } @DFInternal diff --git a/src/main/resources/magprog/content/intro.md b/src/main/resources/magprog/content/intro.md index 4f775f4..429b97c 100644 --- a/src/main/resources/magprog/content/intro.md +++ b/src/main/resources/magprog/content/intro.md @@ -10,10 +10,10 @@ language: ru Цель создания программы — объединение усилий ученых и программистов для разработки лучших компьютерных решений и применения этих решений в области фундаментальной и прикладной науки и инженерии. Студенты магистерской программы в рамках научной работы и выполнения проектов работают над актуальными задачами: + * обработка и анализ данных физических и биологических экспериментов; * нахождение оптимальной траектории для задач в георазведке; -* разработка инструментов анализа данных для нефтяных компаний -и количество прикладных учебных задач от реальных заказчиков постоянно растет. +* разработка инструментов анализа данных для нефтяных компаний и количество прикладных учебных задач от реальных заказчиков постоянно растет. **Почему же** это направление так актуально?