diff --git a/core/api/core.api b/core/api/core.api index 790ce8fa29..16d6974b9d 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -5756,21 +5756,6 @@ public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/CodeGeneratorImp public static final fun toStandaloneSnippet (Lorg/jetbrains/kotlinx/dataframe/codeGen/CodeWithTypeCastGenerator;Ljava/lang/String;Ljava/util/List;)Ljava/lang/String; } -public abstract interface class org/jetbrains/kotlinx/dataframe/impl/codeGen/DfReadResult { -} - -public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/DfReadResult$Error : org/jetbrains/kotlinx/dataframe/impl/codeGen/DfReadResult { - public fun (Ljava/lang/Throwable;)V - public final fun getReason ()Ljava/lang/Throwable; -} - -public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/DfReadResult$Success : org/jetbrains/kotlinx/dataframe/impl/codeGen/DfReadResult { - public fun (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;)V - public final fun getFormat ()Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat; - public final fun getReadDfMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public final fun getSchema ()Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema; -} - public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/NameNormalizerImplKt { public static final fun from (Lorg/jetbrains/kotlinx/dataframe/codeGen/NameNormalizer$Companion;Ljava/util/Set;)Lorg/jetbrains/kotlinx/dataframe/codeGen/NameNormalizer; public static final fun id (Lorg/jetbrains/kotlinx/dataframe/codeGen/NameNormalizer$Companion;)Lorg/jetbrains/kotlinx/dataframe/codeGen/NameNormalizer; @@ -5778,7 +5763,6 @@ public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/NameNormalizerIm public final class org/jetbrains/kotlinx/dataframe/impl/codeGen/SchemaReaderKt { public static final fun getUrlCodeGenReader (Lorg/jetbrains/kotlinx/dataframe/codeGen/CodeGenerator$Companion;)Lkotlin/jvm/functions/Function4; - public static final fun getUrlDfReader (Lorg/jetbrains/kotlinx/dataframe/codeGen/CodeGenerator$Companion;)Lkotlin/jvm/functions/Function2; } public abstract interface class org/jetbrains/kotlinx/dataframe/impl/columns/ColumnsList : org/jetbrains/kotlinx/dataframe/columns/ColumnSet { @@ -5847,19 +5831,6 @@ public final class org/jetbrains/kotlinx/dataframe/impl/schema/UtilsKt { public static final fun getSchema (Lkotlin/reflect/KClass;)Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema; } -public final class org/jetbrains/kotlinx/dataframe/io/CSV : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun (C)V - public synthetic fun (CILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/CSVType : java/lang/Enum { public static final field DEFAULT Lorg/jetbrains/kotlinx/dataframe/io/CSVType; public static final field TDF Lorg/jetbrains/kotlinx/dataframe/io/CSVType; @@ -6078,37 +6049,6 @@ public final class org/jetbrains/kotlinx/dataframe/io/DisplayConfiguration$Compa public final fun getDEFAULT ()Lorg/jetbrains/kotlinx/dataframe/io/DisplayConfiguration; } -public final class org/jetbrains/kotlinx/dataframe/io/GuessKt { - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/lang/String;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/lang/String;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun readDataFrame (Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static final fun readDataRow (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun readDataRow (Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static final fun readDataRow (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun readDataRow$default (Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun readDataRow$default (Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; - public static synthetic fun readDataRow$default (Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow; -} - public final class org/jetbrains/kotlinx/dataframe/io/HtmlKt { public static final fun toHTML (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lorg/jetbrains/kotlinx/dataframe/io/DisplayConfiguration;Lorg/jetbrains/kotlinx/dataframe/jupyter/CellRenderer;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData; public static synthetic fun toHTML$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame;Lorg/jetbrains/kotlinx/dataframe/io/DisplayConfiguration;Lorg/jetbrains/kotlinx/dataframe/jupyter/CellRenderer;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData; @@ -6171,15 +6111,6 @@ public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedCode public static synthetic fun readCodeForGeneration$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedCodeGenerationFormat;Ljava/io/InputStream;Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String; } -public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat : org/jetbrains/kotlinx/dataframe/io/SupportedFormat { - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public abstract fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public abstract fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/io/InputStream;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedFormat { public abstract fun acceptsExtension (Ljava/lang/String;)Z public abstract fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z @@ -6261,17 +6192,6 @@ public final class org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$Path public final synthetic fun unbox-impl ()Ljava/lang/String; } -public final class org/jetbrains/kotlinx/dataframe/io/TSV : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/TsvKt { public static final fun readTSV (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/File;Ljava/util/List;Ljava/util/Map;ILjava/lang/Integer;ZLjava/nio/charset/Charset;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; public static final fun readTSV (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/InputStream;Ljava/util/List;ZLjava/util/Map;ILjava/lang/Integer;ZLjava/nio/charset/Charset;Lorg/jetbrains/kotlinx/dataframe/api/ParserOptions;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethods.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethods.kt index cc0a791828..b7da159ae0 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethods.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethods.kt @@ -21,9 +21,6 @@ public interface DefaultReadDfMethod { // Used APIs private const val CAST = "cast" private const val VERIFY = "verify" // cast(true) is obscure, i think it's better to use named argument here -private const val READ_CSV = "readCSV" -private const val READ_TSV = "readTSV" -private const val READ_JDBC = "readJdbc" public abstract class AbstractDefaultReadMethod( private val path: String?, @@ -80,8 +77,3 @@ public abstract class AbstractDefaultReadMethod( override val additionalImports: List = listOf("import org.jetbrains.kotlinx.dataframe.io.$methodName") } - -internal class DefaultReadCsvMethod(path: String?, arguments: MethodArguments) : - AbstractDefaultReadMethod(path, arguments, READ_CSV) - -internal class DefaultReadTsvMethod(path: String?) : AbstractDefaultReadMethod(path, MethodArguments.EMPTY, READ_TSV) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/codeGen/SchemaReader.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/codeGen/SchemaReader.kt index 666e904261..504f65880f 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/codeGen/SchemaReader.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/codeGen/SchemaReader.kt @@ -1,52 +1,13 @@ package org.jetbrains.kotlinx.dataframe.impl.codeGen -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.api.schema import org.jetbrains.kotlinx.dataframe.codeGen.Code import org.jetbrains.kotlinx.dataframe.codeGen.CodeGenerator import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod import org.jetbrains.kotlinx.dataframe.io.SupportedCodeGenerationFormat -import org.jetbrains.kotlinx.dataframe.io.SupportedDataFrameFormat -import org.jetbrains.kotlinx.dataframe.io.SupportedFormat import org.jetbrains.kotlinx.dataframe.io.guessFormat -import org.jetbrains.kotlinx.dataframe.io.read import org.jetbrains.kotlinx.dataframe.io.readCodeForGeneration -import org.jetbrains.kotlinx.dataframe.schema.DataFrameSchema import java.net.URL -/** - * Reader that can read a dataframe from a URL. It tries to guess the format based on the given [formats] and returns - * [DfReadResult.Success], or returns [DfReadResult.Error] if it fails. - */ -public val CodeGenerator.Companion.urlDfReader: (url: URL, formats: List) -> DfReadResult - get() = { url, formats -> - try { - val (format, df) = url.openStream().use { - DataFrame.read( - stream = it, - format = guessFormat(url, formats) as? SupportedDataFrameFormat?, - formats = formats.filterIsInstance(), - ) - } - DfReadResult.Success(df, format) - } catch (e: Throwable) { - DfReadResult.Error(e) - } - } - -public sealed interface DfReadResult { - - public class Success(private val df: AnyFrame, public val format: SupportedDataFrameFormat) : DfReadResult { - public fun getReadDfMethod(pathRepresentation: String?): DefaultReadDfMethod = - format.createDefaultReadMethod(pathRepresentation) - - public val schema: DataFrameSchema = df.schema() - } - - public class Error(public val reason: Throwable) : DfReadResult -} - /** * Reader that can read data from a URL and generate code (type schema representations) for it. * It tries to guess the format based on the given [formats] and returns [CodeGenerationReadResult.Success], @@ -55,7 +16,7 @@ public sealed interface DfReadResult { public val CodeGenerator.Companion.urlCodeGenReader: ( url: URL, name: String, - formats: List, + formats: List, generateHelperCompanionObject: Boolean, ) -> CodeGenerationReadResult get() = { url, name, formats, generateHelperCompanionObject -> diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/common.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/common.kt index afc8ca10f7..bfecb88c62 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/common.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/common.kt @@ -35,7 +35,7 @@ public fun catchHttpResponse(url: URL, body: (InputStream) -> AnyFrame): AnyFram val response = connection.responseMessage try { // attempt to read error response as dataframe - return DataFrame.read(connection.errorStream).df + return body(connection.errorStream) } catch (_: Exception) { throw RuntimeException("Server returned HTTP response code: $code. Response: $response") } diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt index 6d6ed0ad6a..387049a0af 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt @@ -11,8 +11,6 @@ import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.DataRow import org.jetbrains.kotlinx.dataframe.api.ParserOptions import org.jetbrains.kotlinx.dataframe.api.forEach -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadCsvMethod -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod import org.jetbrains.kotlinx.dataframe.impl.api.parse import org.jetbrains.kotlinx.dataframe.impl.io.readDelimImpl import org.jetbrains.kotlinx.dataframe.util.APACHE_CSV @@ -57,38 +55,13 @@ import java.math.BigDecimal import java.math.BigInteger import java.net.URL import java.nio.charset.Charset -import java.nio.file.Path import java.util.zip.GZIPInputStream import kotlin.reflect.KClass import kotlin.reflect.KType import kotlin.reflect.typeOf import kotlin.time.Duration -import kotlin.time.Instant as StdlibInstant import kotlinx.datetime.Instant as DeprecatedInstant - -@Deprecated(message = APACHE_CSV, level = DeprecationLevel.WARNING) -public class CSV(private val delimiter: Char = ',') : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): AnyFrame = - DataFrame.readCSV(stream = stream, delimiter = delimiter, header = header) - - override fun readDataFrame(file: File, header: List): AnyFrame = - DataFrame.readCSV(file = file, delimiter = delimiter, header = header) - - override fun readDataFrame(path: Path, header: List): AnyFrame = - // core CSV impl is deprecated, delegate via File to preserve module boundaries - DataFrame.readCSV(file = path.toFile(), delimiter = delimiter, header = header) - - override fun acceptsExtension(ext: String): Boolean = ext == "csv" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 20_001 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod { - val arguments = MethodArguments().add("delimiter", typeOf(), "'%L'", delimiter) - return DefaultReadCsvMethod(pathRepresentation, arguments) - } -} +import kotlin.time.Instant as StdlibInstant @Deprecated( message = APACHE_CSV, diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/guess.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/guess.kt index e4489e2165..c9bc8541ba 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/guess.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/guess.kt @@ -2,38 +2,16 @@ package org.jetbrains.kotlinx.dataframe.io import com.squareup.kotlinpoet.PropertySpec import com.squareup.kotlinpoet.asTypeName -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.AnyRow -import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.DataRow -import org.jetbrains.kotlinx.dataframe.annotations.DataSchema -import org.jetbrains.kotlinx.dataframe.annotations.ImportDataSchema -import org.jetbrains.kotlinx.dataframe.api.single import org.jetbrains.kotlinx.dataframe.codeGen.Code import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod import java.io.BufferedInputStream import java.io.File -import java.io.FileNotFoundException import java.io.InputStream import java.net.URL import java.nio.file.Path import java.util.ServiceLoader -import kotlin.io.path.extension import kotlin.reflect.KType -public sealed interface SupportedFormat { - - public fun acceptsExtension(ext: String): Boolean - - public fun acceptsSample(sample: SupportedFormatSample): Boolean - - // `DataFrame.Companion.read` methods uses this to sort list of all supported formats in ascending order (-1, 2, 10) - // sorted list is used to test if any format can read given input - public val testOrder: Int - - public fun createDefaultReadMethod(pathRepresentation: String? = null): DefaultReadDfMethod -} - public sealed interface SupportedFormatSample { @JvmInline @@ -52,21 +30,6 @@ public sealed interface SupportedFormatSample { public value class DataString(public val sampleData: String) : SupportedFormatSample } -/** - * Implement this interface to provide additional supported formats for DataFrames (such as JSON, XML, CSV, etc.). - * A [SupportedDataFrameFormat] is read directly to a DataFrame. If specified using - * [ImportDataSchema] or using the Gradle plugin, the read DataFrame will be used to - * generate [DataSchema] interfaces. - */ -public interface SupportedDataFrameFormat : SupportedFormat { - public fun readDataFrame(stream: InputStream, header: List = emptyList()): DataFrame<*> - - public fun readDataFrame(file: File, header: List = emptyList()): DataFrame<*> = - readDataFrame(file.toPath(), header) - - public fun readDataFrame(path: Path, header: List = emptyList()): DataFrame<*> -} - /** * Implement this interface to provide additional [DataSchema] interface generation formats for DataFrames (such as OpenAPI). * Note, this doesn't add functionality to [DataFrame.Companion.read], just [ImportDataSchema] and Gradle plugin. @@ -75,7 +38,7 @@ public interface SupportedDataFrameFormat : SupportedFormat { * [DataSchema] interfaces and `enum`s, with `typealias`es (and optional extension functions in some integration) * outside the interface. */ -public interface SupportedCodeGenerationFormat : SupportedFormat { +public interface SupportedCodeGenerationFormat { /** * @param stream where to read the schema from @@ -94,6 +57,16 @@ public interface SupportedCodeGenerationFormat : SupportedFormat { * @param generateHelperCompanionObject whether to generate a helper companion object (only needed for Jupyter) */ public fun readCodeForGeneration(file: File, name: String, generateHelperCompanionObject: Boolean = false): Code + + public fun acceptsExtension(ext: String): Boolean + + public fun acceptsSample(sample: SupportedFormatSample): Boolean + + // `DataFrame.Companion.read` methods uses this to sort list of all supported formats in ascending order (-1, 2, 10) + // sorted list is used to test if any format can read given input + public val testOrder: Int + + public fun createDefaultReadMethod(pathRepresentation: String? = null): DefaultReadDfMethod } public class MethodArguments { @@ -129,38 +102,23 @@ public class MethodArguments { * resources/META-INF/services/org.jetbrains.kotlinx.dataframe.io.SupportedFormat * to be detected here. */ -internal val supportedFormats: List by lazy { - ( - ServiceLoader.load(SupportedDataFrameFormat::class.java).toList() + - ServiceLoader.load(SupportedCodeGenerationFormat::class.java).toList() + - ServiceLoader.load(SupportedFormat::class.java).toList() - ).distinct() +internal val supportedFormats: List by lazy { + ServiceLoader.load(SupportedCodeGenerationFormat::class.java).toList() + .distinct() .sortedBy { it.testOrder } } internal fun guessFormatForExtension( ext: String, - formats: List = supportedFormats, + formats: List = supportedFormats, sample: SupportedFormatSample? = null, -): SupportedFormat? = formats.firstOrNull { it.acceptsExtension(ext) && (sample == null || it.acceptsSample(sample)) } - -internal fun guessFormat( - path: Path, - formats: List = supportedFormats, - sample: SupportedFormatSample.DataPath? = SupportedFormatSample.DataPath(path), -): SupportedFormat? = guessFormatForExtension(path.extension.lowercase(), formats, sample = sample) +): SupportedCodeGenerationFormat? = formats.firstOrNull { it.acceptsExtension(ext) && (sample == null || it.acceptsSample(sample)) } internal fun guessFormat( url: URL, - formats: List = supportedFormats, + formats: List = supportedFormats, sample: SupportedFormatSample.DataUrl? = SupportedFormatSample.DataUrl(url), -): SupportedFormat? = guessFormatForExtension(url.path.substringAfterLast("."), formats, sample = sample) - -internal fun guessFormat( - path: String, - formats: List = supportedFormats, - sample: SupportedFormatSample.PathString? = SupportedFormatSample.PathString(path), -): SupportedFormat? = guessFormatForExtension(path.substringAfterLast("."), formats, sample = sample) +): SupportedCodeGenerationFormat? = guessFormatForExtension(url.path.substringAfterLast("."), formats, sample = sample) private class NotCloseableStream(val src: InputStream) : InputStream() { override fun read(): Int = src.read() @@ -211,103 +169,6 @@ internal fun readCodeForGeneration( } } -internal fun DataFrame.Companion.read( - stream: InputStream, - format: SupportedDataFrameFormat? = null, - header: List = emptyList(), - formats: List = supportedFormats.filterIsInstance(), -): ReadAnyFrame { - if (format != null) return format to format.readDataFrame(stream, header = header) - stream.use { input -> - val byteArray = input.readBytes() // read 8192 bytes - formats.sortedBy { it.testOrder }.forEach { - try { - return it to it.readDataFrame(byteArray.inputStream(), header = header) - } catch (_: Exception) { - } - } - throw IllegalArgumentException("Unknown stream format; Tried $formats") - } -} - -internal fun DataFrame.Companion.read( - path: Path, - format: SupportedDataFrameFormat? = null, - header: List = emptyList(), - formats: List = supportedFormats.filterIsInstance(), -): ReadAnyFrame { - if (format != null) return format to format.readDataFrame(path, header = header) - formats.sortedBy { it.testOrder }.forEach { - try { - return it to it.readDataFrame(path, header = header) - } catch (e: FileNotFoundException) { - throw e - } catch (e: Exception) { - } - } - throw IllegalArgumentException("Unknown file format; Tried $formats") -} - -internal data class ReadAnyFrame(val format: SupportedDataFrameFormat, val df: AnyFrame) - -internal infix fun SupportedDataFrameFormat.to(df: AnyFrame) = ReadAnyFrame(this, df) - internal data class GeneratedCode(val format: SupportedCodeGenerationFormat, val code: Code) internal infix fun SupportedCodeGenerationFormat.to(code: Code) = GeneratedCode(this, code) - -public fun DataFrame.Companion.read(file: File, header: List = emptyList()): AnyFrame = - read(file.toPath(), header) - -public fun DataRow.Companion.read(file: File, header: List = emptyList()): AnyRow = - DataFrame.read(file.toPath(), header).single() - -public fun DataFrame.Companion.read(url: URL, header: List = emptyList()): AnyFrame = - when { - isFile(url) -> read(urlAsFile(url), header) - - isProtocolSupported(url) -> catchHttpResponse(url) { - read( - stream = it, - format = guessFormat(url)?.also { - if (it !is SupportedDataFrameFormat) error("Format $it does not support reading dataframes") - } as SupportedDataFrameFormat?, - header = header, - ).df - } - - else -> throw IllegalArgumentException("Invalid protocol for url $url") - } - -public fun DataRow.Companion.read(url: URL, header: List = emptyList()): AnyRow = - DataFrame.read(url, header).single() - -public fun DataFrame.Companion.read(path: String, header: List = emptyList()): AnyFrame = - read(asUrl(path), header) - -public fun DataRow.Companion.read(path: String, header: List = emptyList()): AnyRow = - DataFrame.read(path, header).single() - -public fun URL.readDataFrame(header: List = emptyList()): AnyFrame = DataFrame.read(this, header) - -public fun URL.readDataRow(header: List = emptyList()): AnyRow = DataRow.read(this, header) - -public fun File.readDataFrame(header: List = emptyList()): AnyFrame = DataFrame.read(this, header) - -public fun File.readDataRow(header: List = emptyList()): AnyRow = DataRow.read(this, header) - -public fun DataFrame.Companion.read(path: Path, header: List = emptyList()): AnyFrame = - read( - path = path, - format = guessFormat(path)?.also { - if (it !is SupportedDataFrameFormat) error("Format $it does not support reading dataframes") - } as SupportedDataFrameFormat?, - header = header, - ).df - -public fun DataRow.Companion.read(path: Path, header: List = emptyList()): AnyRow = - DataFrame.read(path, header).single() - -public fun Path.readDataFrame(header: List = emptyList()): AnyFrame = DataFrame.read(this, header) - -public fun Path.readDataRow(header: List = emptyList()): AnyRow = DataRow.read(this, header) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt index 9a79718c67..a65a1caa8f 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt @@ -1,11 +1,7 @@ package org.jetbrains.kotlinx.dataframe.io -import org.jetbrains.kotlinx.dataframe.AnyFrame import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.api.ParserOptions -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadTsvMethod -import org.jetbrains.kotlinx.dataframe.util.APACHE_CSV import org.jetbrains.kotlinx.dataframe.util.READ_TSV import org.jetbrains.kotlinx.dataframe.util.READ_TSV_FILE_OR_URL_REPLACE import org.jetbrains.kotlinx.dataframe.util.READ_TSV_FILE_REPLACE @@ -17,31 +13,6 @@ import java.io.FileInputStream import java.io.InputStream import java.net.URL import java.nio.charset.Charset -import java.nio.file.Path - -@Deprecated( - message = APACHE_CSV, - level = DeprecationLevel.WARNING, -) -public class TSV : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): AnyFrame = - DataFrame.readTSV(stream, header = header) - - override fun readDataFrame(file: File, header: List): AnyFrame = DataFrame.readTSV(file, header = header) - - override fun readDataFrame(path: Path, header: List): AnyFrame = - // legacy TSV implementation lives in this module; delegate via File to keep behavior - DataFrame.readTSV(path.toFile(), header = header) - - override fun acceptsExtension(ext: String): Boolean = ext == "tsv" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 30_001 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = - DefaultReadTsvMethod(pathRepresentation) -} private const val TAB_CHAR = '\t' diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sort.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sort.kt index 56e0bddaf7..e31765d6e7 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sort.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sort.kt @@ -3,7 +3,8 @@ package org.jetbrains.kotlinx.dataframe.api import io.kotest.assertions.throwables.shouldThrowMessage import io.kotest.matchers.shouldBe import org.jetbrains.kotlinx.dataframe.DataColumn -import org.jetbrains.kotlinx.dataframe.io.readDataFrame +import org.jetbrains.kotlinx.dataframe.DataFrame +import org.jetbrains.kotlinx.dataframe.io.readCsv import org.jetbrains.kotlinx.dataframe.nrow import org.jetbrains.kotlinx.dataframe.testResource import org.jetbrains.kotlinx.dataframe.testSets.DsSalaries @@ -78,7 +79,7 @@ class SortDataColumn { @Test fun `sort by nested column`() { - val df = testResource("ds_salaries.csv").readDataFrame().cast() + val df = DataFrame.readCsv(testResource("ds_salaries.csv")).cast() val aggregate = df.pivot(false) { companySize }.groupBy { companyLocation }.aggregate { maxOf { salaryInUsd } into "salary" maxBy { salaryInUsd } into "extra" @@ -89,7 +90,7 @@ class SortDataColumn { @Test fun `sort by invalid nested column`() { - val df = testResource("ds_salaries.csv").readDataFrame().cast() + val df = DataFrame.readCsv(testResource("ds_salaries.csv")).cast() val aggregate = df.pivot(false) { companySize }.groupBy { companyLocation }.aggregate { maxOf { salaryInUsd } into "salary" maxBy { salaryInUsd } into "extra" diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sortGroupedDataframe.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sortGroupedDataframe.kt index 5b065dbe5f..bdc47d0fa5 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sortGroupedDataframe.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/sortGroupedDataframe.kt @@ -4,13 +4,14 @@ import io.kotest.matchers.shouldBe import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.alsoDebug import org.jetbrains.kotlinx.dataframe.io.read +import org.jetbrains.kotlinx.dataframe.io.readCsv import org.junit.Test class SortGroupedDataframeTests { @Test fun `Sorted grouped iris dataset`() { - val irisData = DataFrame.read("src/test/resources/irisDataset.csv") + val irisData = DataFrame.readCsv("src/test/resources/irisDataset.csv") irisData.alsoDebug() irisData.groupBy("variety").let { diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/PlaylistJsonTest.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/PlaylistJsonTest.kt index e64ea4e697..ee2f8cb347 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/PlaylistJsonTest.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/PlaylistJsonTest.kt @@ -112,7 +112,7 @@ class PlaylistJsonTest { } val path = "../data/playlistItems.json" - val df = DataFrame.read(path) + val df = DataFrame.readJson(path) val typed = df.cast() val item = typed.items[0] diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/ApiLevels.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/ApiLevels.kt index 140466e6a4..b8d6f620b0 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/ApiLevels.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/ApiLevels.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlinx.dataframe.api.cast import org.jetbrains.kotlinx.dataframe.api.dropNulls import org.jetbrains.kotlinx.dataframe.api.filter import org.jetbrains.kotlinx.dataframe.explainer.TransformDataFrameExpressions -import org.jetbrains.kotlinx.dataframe.io.read +import org.jetbrains.kotlinx.dataframe.io.readCsv import org.junit.Ignore import org.junit.Test @@ -20,7 +20,7 @@ class ApiLevels { @TransformDataFrameExpressions fun strings() { // SampleStart - DataFrame.read("titanic.csv") + DataFrame.readCsv("titanic.csv") .add("lastName") { "name"().split(",").last() } .dropNulls("age") .filter { @@ -42,7 +42,7 @@ class ApiLevels { @Test @TransformDataFrameExpressions fun extensionProperties2() { - val df = DataFrame.read("titanic.csv").cast() + val df = DataFrame.readCsv("titanic.csv").cast() // SampleStart df.add("lastName") { name.split(",").last() } .dropNulls { age } @@ -54,7 +54,7 @@ class ApiLevels { @TransformDataFrameExpressions fun extensionProperties1() { // SampleStart - val df /* : AnyFrame */ = DataFrame.read("titanic.csv") + val df /* : AnyFrame */ = DataFrame.readCsv("titanic.csv") // SampleEnd } } diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/OtherSamples.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/OtherSamples.kt index c8d41fb263..a441220fe0 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/OtherSamples.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/OtherSamples.kt @@ -5,7 +5,7 @@ import org.jetbrains.kotlinx.dataframe.DataFrame import org.jetbrains.kotlinx.dataframe.api.take import org.jetbrains.kotlinx.dataframe.explainer.WritersideFooter import org.jetbrains.kotlinx.dataframe.explainer.WritersideStyle -import org.jetbrains.kotlinx.dataframe.io.read +import org.jetbrains.kotlinx.dataframe.io.readCsv import org.jetbrains.kotlinx.dataframe.io.toStandaloneHtml import org.junit.Test import java.io.File @@ -18,7 +18,7 @@ class OtherSamples : TestBase() { @Test fun example() { - val df = DataFrame.read("../data/movies.csv").take(5) + val df = DataFrame.readCsv("../data/movies.csv").take(5) // writeTable(df, "exampleName") } diff --git a/dataframe-arrow/api/dataframe-arrow.api b/dataframe-arrow/api/dataframe-arrow.api index c3f0a80c3b..549a1e164a 100644 --- a/dataframe-arrow/api/dataframe-arrow.api +++ b/dataframe-arrow/api/dataframe-arrow.api @@ -1,14 +1,3 @@ -public final class org/jetbrains/kotlinx/dataframe/io/ArrowFeather : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/ArrowReadingKt { public static final fun readArrow (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/apache/arrow/vector/ipc/ArrowReader;Lorg/jetbrains/kotlinx/dataframe/api/NullabilityOptions;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; public static synthetic fun readArrow$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Lorg/apache/arrow/vector/ipc/ArrowReader;Lorg/jetbrains/kotlinx/dataframe/api/NullabilityOptions;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; diff --git a/dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReading.kt b/dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReading.kt index 5cf884d73d..35fb2571ff 100644 --- a/dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReading.kt +++ b/dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReading.kt @@ -19,30 +19,8 @@ import java.nio.channels.SeekableByteChannel import java.nio.file.Files import java.nio.file.Path -public class ArrowFeather : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): AnyFrame = - DataFrame.readArrowFeather(stream, NullabilityOptions.Widening) - - override fun readDataFrame(path: Path, header: List): AnyFrame = - DataFrame.readArrowFeather(path, NullabilityOptions.Widening) - - override fun acceptsExtension(ext: String): Boolean = ext == "feather" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 50000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = - DefaultReadArrowMethod(pathRepresentation) -} - -private const val READ_ARROW_FEATHER = "readArrowFeather" - internal const val ARROW_PARQUET_DEFAULT_BATCH_SIZE = 32768L -private class DefaultReadArrowMethod(path: String?) : - AbstractDefaultReadMethod(path, MethodArguments.EMPTY, READ_ARROW_FEATHER) - internal object Allocator { val ROOT by lazy { RootAllocator(Long.MAX_VALUE) diff --git a/dataframe-csv/api/dataframe-csv.api b/dataframe-csv/api/dataframe-csv.api index a9a964783c..1c064d635b 100644 --- a/dataframe-csv/api/dataframe-csv.api +++ b/dataframe-csv/api/dataframe-csv.api @@ -1,16 +1,3 @@ -public final class org/jetbrains/kotlinx/dataframe/io/CsvDeephaven : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun (C)V - public synthetic fun (CILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/QuoteMode : java/lang/Enum { public static final field ALL Lorg/jetbrains/kotlinx/dataframe/io/QuoteMode; public static final field ALL_NON_NULL Lorg/jetbrains/kotlinx/dataframe/io/QuoteMode; @@ -121,19 +108,6 @@ public final class org/jetbrains/kotlinx/dataframe/io/ToTsvStrKt { public static synthetic fun toTsvStr$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame;ZCLjava/lang/Character;Lorg/jetbrains/kotlinx/dataframe/io/QuoteMode;Ljava/lang/Character;Ljava/lang/Character;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String; } -public final class org/jetbrains/kotlinx/dataframe/io/TsvDeephaven : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun (C)V - public synthetic fun (CILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/UtilKt { public static final fun getDEFAULT_DELIM_NULL_STRINGS ()Ljava/util/Set; } diff --git a/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt b/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt deleted file mode 100644 index 801fd3a717..0000000000 --- a/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt +++ /dev/null @@ -1,39 +0,0 @@ -@file:JvmName("CsvDeephavenKt") - -package org.jetbrains.kotlinx.dataframe.io - -import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.codeGen.AbstractDefaultReadMethod -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod -import org.jetbrains.kotlinx.dataframe.documentationCsv.DelimParams -import java.io.File -import java.io.InputStream -import java.nio.file.Path -import kotlin.reflect.typeOf - -public class CsvDeephaven(private val delimiter: Char = DelimParams.CSV_DELIMITER) : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): DataFrame<*> = - DataFrame.readCsv(inputStream = stream, header = header, delimiter = delimiter) - - override fun readDataFrame(file: File, header: List): DataFrame<*> = - DataFrame.readCsv(file = file, header = header, delimiter = delimiter) - - override fun readDataFrame(path: Path, header: List): DataFrame<*> = - DataFrame.readCsv(path = path, delimiter = delimiter, header = header) - - override fun acceptsExtension(ext: String): Boolean = ext == "csv" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 20_000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod { - val arguments = MethodArguments().add("delimiter", typeOf(), "'%L'", delimiter) - return DefaultReadCsvMethod(pathRepresentation, arguments) - } -} - -private const val READ_CSV = "readCsv" - -internal class DefaultReadCsvMethod(path: String?, arguments: MethodArguments) : - AbstractDefaultReadMethod(path, arguments, READ_CSV) diff --git a/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt b/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt deleted file mode 100644 index ecb123b93c..0000000000 --- a/dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/tsv.kt +++ /dev/null @@ -1,39 +0,0 @@ -@file:JvmName("TsvDeephavenKt") - -package org.jetbrains.kotlinx.dataframe.io - -import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.codeGen.AbstractDefaultReadMethod -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod -import org.jetbrains.kotlinx.dataframe.documentationCsv.DelimParams -import java.io.File -import java.io.InputStream -import java.nio.file.Path -import kotlin.reflect.typeOf - -public class TsvDeephaven(private val delimiter: Char = DelimParams.TSV_DELIMITER) : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): DataFrame<*> = - DataFrame.readTsv(inputStream = stream, header = header, delimiter = delimiter) - - override fun readDataFrame(file: File, header: List): DataFrame<*> = - DataFrame.readTsv(file = file, header = header, delimiter = delimiter) - - override fun readDataFrame(path: Path, header: List): DataFrame<*> = - DataFrame.readTsv(path = path, header = header, delimiter = delimiter) - - override fun acceptsExtension(ext: String): Boolean = ext == "tsv" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 30_000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod { - val arguments = MethodArguments().add("delimiter", typeOf(), "'%L'", delimiter) - return DefaultReadTsvMethod(pathRepresentation, arguments) - } -} - -private const val READ_TSV = "readTsv" - -internal class DefaultReadTsvMethod(path: String?, arguments: MethodArguments) : - AbstractDefaultReadMethod(path, arguments, READ_TSV) diff --git a/dataframe-csv/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/DelimCsvTsvTests.kt b/dataframe-csv/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/DelimCsvTsvTests.kt index cdb482e09f..7b93335c4c 100644 --- a/dataframe-csv/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/DelimCsvTsvTests.kt +++ b/dataframe-csv/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/DelimCsvTsvTests.kt @@ -99,7 +99,7 @@ class DelimCsvTsvTests { @Test fun readCsv() { - val df = DataFrame.read(simpleCsv) + val df = DataFrame.readCsv(simpleCsv) df.columnsCount() shouldBe 11 df.rowsCount() shouldBe 5 @@ -328,13 +328,6 @@ class DelimCsvTsvTests { df.toCsvStr().first() shouldBe 'a' } - @Test - fun `guess tsv`() { - val df = DataFrame.read(testResource("abc.tsv")) - df.columnsCount() shouldBe 3 - df.rowsCount() shouldBe 2 - } - @Test fun `write csv without header produce correct file`() { val df = dataFrameOf("a", "b", "c")( diff --git a/dataframe-excel/api/dataframe-excel.api b/dataframe-excel/api/dataframe-excel.api index 06541cf3c9..481031387d 100644 --- a/dataframe-excel/api/dataframe-excel.api +++ b/dataframe-excel/api/dataframe-excel.api @@ -1,14 +1,3 @@ -public final class org/jetbrains/kotlinx/dataframe/io/Excel : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - public final class org/jetbrains/kotlinx/dataframe/io/FormattingOptions { public fun (Ljava/lang/String;Lorg/apache/poi/ss/usermodel/DataFormatter;)V public synthetic fun (Ljava/lang/String;Lorg/apache/poi/ss/usermodel/DataFormatter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V diff --git a/dataframe-excel/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/xlsx.kt b/dataframe-excel/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/xlsx.kt index e76332bfc7..4f4b03b866 100644 --- a/dataframe-excel/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/xlsx.kt +++ b/dataframe-excel/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/xlsx.kt @@ -49,28 +49,9 @@ import java.time.LocalDate as JavaLocalDate import java.time.LocalDateTime as JavaLocalDateTime import java.util.Date as JavaDate -public class Excel : SupportedDataFrameFormat { - override fun readDataFrame(stream: InputStream, header: List): AnyFrame = DataFrame.readExcel(stream) - - override fun readDataFrame(path: Path, header: List): AnyFrame = DataFrame.readExcel(path) - - override fun acceptsExtension(ext: String): Boolean = ext == "xls" || ext == "xlsx" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 40000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = - DefaultReadExcelMethod(pathRepresentation) -} - private const val MESSAGE_REMOVE_1_1 = "Will be removed in 1.1." internal const val READ_EXCEL_OLD = "This function is only here for binary compatibility. $MESSAGE_REMOVE_1_1" -internal class DefaultReadExcelMethod(path: String?) : - AbstractDefaultReadMethod(path, MethodArguments.EMPTY, READ_EXCEL) - -private const val READ_EXCEL = "readExcel" private const val READ_EXCEL_TEMP_FOLDER_PREFIX = "dataframe-excel" /** diff --git a/dataframe-excel/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/XlsxTest.kt b/dataframe-excel/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/XlsxTest.kt index 95571f6a00..8fe2f4a21a 100644 --- a/dataframe-excel/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/XlsxTest.kt +++ b/dataframe-excel/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/XlsxTest.kt @@ -88,13 +88,13 @@ class XlsxTest { @Test fun `read date time`() { - val df = DataFrame.read(testResource("datetime.xlsx")) + val df = DataFrame.readExcel(testResource("datetime.xlsx")) df["time"].type() shouldBe typeOf() } @Test fun `write date time`() { - val df = DataFrame.read(testResource("datetime.xlsx")) + val df = DataFrame.readExcel(testResource("datetime.xlsx")) val temp = Files.createTempFile("excel", ".xlsx").toFile() df.writeExcel(temp) DataFrame.readExcel(temp) shouldBe df diff --git a/dataframe-jdbc/api/dataframe-jdbc.api b/dataframe-jdbc/api/dataframe-jdbc.api index 43b8f1cf82..2f68b65546 100644 --- a/dataframe-jdbc/api/dataframe-jdbc.api +++ b/dataframe-jdbc/api/dataframe-jdbc.api @@ -12,24 +12,6 @@ public final class org/jetbrains/kotlinx/dataframe/io/DbConnectionConfig { public fun toString ()Ljava/lang/String; } -public final class org/jetbrains/kotlinx/dataframe/io/Jdbc : org/jetbrains/kotlinx/dataframe/io/SupportedCodeGenerationFormat, org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { - public fun ()V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readCodeForGeneration (Ljava/io/File;Ljava/lang/String;Z)Ljava/lang/String; - public fun readCodeForGeneration (Ljava/io/InputStream;Ljava/lang/String;Z)Ljava/lang/String; - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; -} - -public final class org/jetbrains/kotlinx/dataframe/io/JdbcSchemaKt { - public static final fun buildCodeForDB (Ljava/net/URL;Ljava/lang/String;)Ljava/lang/String; - public static final fun getDatabaseCodeGenReader (Lorg/jetbrains/kotlinx/dataframe/codeGen/CodeGenerator$Companion;)Lkotlin/jvm/functions/Function2; -} - public final class org/jetbrains/kotlinx/dataframe/io/ReadDataFrameSchemaKt { public static final fun readAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema$Companion;Ljava/sql/Connection;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Ljava/util/Map; public static final fun readAllSqlTables (Lorg/jetbrains/kotlinx/dataframe/schema/DataFrameSchema$Companion;Ljavax/sql/DataSource;Lorg/jetbrains/kotlinx/dataframe/io/db/DbType;)Ljava/util/Map; diff --git a/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/Jdbc.kt b/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/Jdbc.kt deleted file mode 100644 index a5307b96d9..0000000000 --- a/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/Jdbc.kt +++ /dev/null @@ -1,53 +0,0 @@ -package org.jetbrains.kotlinx.dataframe.io - -import org.jetbrains.kotlinx.dataframe.AnyFrame -import org.jetbrains.kotlinx.dataframe.DataFrame -import org.jetbrains.kotlinx.dataframe.codeGen.AbstractDefaultReadMethod -import org.jetbrains.kotlinx.dataframe.codeGen.Code -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod -import java.io.File -import java.io.InputStream -import java.nio.file.Path - -// TODO: https://github.com/Kotlin/dataframe/issues/450 -public class Jdbc : - SupportedCodeGenerationFormat, - SupportedDataFrameFormat { - public override fun readDataFrame(stream: InputStream, header: List): AnyFrame = DataFrame.readJDBC(stream) - - public override fun readDataFrame(path: Path, header: List): AnyFrame = DataFrame.readJDBC(path) - - override fun readCodeForGeneration( - stream: InputStream, - name: String, - generateHelperCompanionObject: Boolean, - ): Code = throw IllegalStateException("Jdbc.readCodeForGeneration() is not yet implemented: Issue #450") - - override fun readCodeForGeneration(file: File, name: String, generateHelperCompanionObject: Boolean): Code = - throw IllegalStateException("Jdbc.readCodeForGeneration() is not yet implemented: Issue #450") - - override fun acceptsExtension(ext: String): Boolean = ext == "jdbc" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 40000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = - DefaultReadJdbcMethod(pathRepresentation) -} - -private fun DataFrame.Companion.readJDBC(stream: File): DataFrame<*> { - TODO("Not yet implemented") -} - -private fun DataFrame.Companion.readJDBC(path: Path): DataFrame<*> { - TODO("Not yet implemented") -} - -private fun DataFrame.Companion.readJDBC(stream: InputStream): DataFrame<*> { - TODO("Not yet implemented") -} - -internal class DefaultReadJdbcMethod(path: String?) : AbstractDefaultReadMethod(path, MethodArguments.EMPTY, READ_JDBC) - -private const val READ_JDBC = "readJDBC" diff --git a/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/jdbcSchema.kt b/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/jdbcSchema.kt deleted file mode 100644 index 30895b7d90..0000000000 --- a/dataframe-jdbc/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/jdbcSchema.kt +++ /dev/null @@ -1,28 +0,0 @@ -package org.jetbrains.kotlinx.dataframe.io - -import org.jetbrains.kotlinx.dataframe.annotations.DataSchema -import org.jetbrains.kotlinx.dataframe.codeGen.Code -import org.jetbrains.kotlinx.dataframe.codeGen.CodeGenerator -import org.jetbrains.kotlinx.dataframe.impl.codeGen.CodeGenerationReadResult -import java.net.URL - -// TODO: helper functions created to support existing hierarchy https://github.com/Kotlin/dataframe/issues/450 -public val CodeGenerator.Companion.databaseCodeGenReader: (url: URL, name: String) -> CodeGenerationReadResult - get() = { url, name -> - try { - val code = buildCodeForDB(url, name) - throw RuntimeException() - CodeGenerationReadResult.Success(code, Jdbc()) - } catch (e: Throwable) { - CodeGenerationReadResult.Error(e) - } - } - -public fun buildCodeForDB(url: URL, name: String): Code { - val annotationName = DataSchema::class.simpleName - val visibility = "public " - val propertyVisibility = "public " - - val declarations = mutableListOf() - return declarations.joinToString() -} diff --git a/dataframe-json/api/dataframe-json.api b/dataframe-json/api/dataframe-json.api index 368faf4a12..a032afd2d9 100644 --- a/dataframe-json/api/dataframe-json.api +++ b/dataframe-json/api/dataframe-json.api @@ -19,17 +19,8 @@ public abstract interface class org/jetbrains/kotlinx/dataframe/io/CustomEncoder public abstract fun encode (Ljava/lang/Object;)Lkotlinx/serialization/json/JsonElement; } -public final class org/jetbrains/kotlinx/dataframe/io/JSON : org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat { +public final class org/jetbrains/kotlinx/dataframe/io/JSON { public fun ()V - public fun (Lorg/jetbrains/kotlinx/dataframe/io/JSON$TypeClashTactic;Ljava/util/List;Z)V - public synthetic fun (Lorg/jetbrains/kotlinx/dataframe/io/JSON$TypeClashTactic;Ljava/util/List;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun acceptsExtension (Ljava/lang/String;)Z - public fun acceptsSample (Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample;)Z - public fun createDefaultReadMethod (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/codeGen/DefaultReadDfMethod; - public fun getTestOrder ()I - public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; - public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame; } public final class org/jetbrains/kotlinx/dataframe/io/JSON$TypeClashTactic : java/lang/Enum { diff --git a/dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/json.kt b/dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/json.kt index 4949d1f104..7360ca9ffb 100644 --- a/dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/json.kt +++ b/dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/json.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlinx.dataframe.api.JsonPath import org.jetbrains.kotlinx.dataframe.api.NameValueProperty import org.jetbrains.kotlinx.dataframe.api.single import org.jetbrains.kotlinx.dataframe.codeGen.AbstractDefaultReadMethod -import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup import org.jetbrains.kotlinx.dataframe.columns.FrameColumn import org.jetbrains.kotlinx.dataframe.documentation.UnifyingNumbers @@ -23,6 +22,8 @@ import org.jetbrains.kotlinx.dataframe.impl.io.encodeDataFrameWithMetadata import org.jetbrains.kotlinx.dataframe.impl.io.encodeFrame import org.jetbrains.kotlinx.dataframe.impl.io.encodeRow import org.jetbrains.kotlinx.dataframe.impl.io.readJsonImpl +import org.jetbrains.kotlinx.dataframe.io.Base64ImageEncodingOptions.Companion.GZIP_ON +import org.jetbrains.kotlinx.dataframe.io.Base64ImageEncodingOptions.Companion.LIMIT_SIZE_ON import org.jetbrains.kotlinx.dataframe.io.JSON.TypeClashTactic import org.jetbrains.kotlinx.dataframe.io.JSON.TypeClashTactic.ARRAY_AND_VALUE_COLUMNS import java.io.File @@ -30,62 +31,8 @@ import java.io.InputStream import java.net.URL import java.nio.file.Path import kotlin.io.path.writeText -import kotlin.reflect.typeOf - -public class JSON( - private val typeClashTactic: TypeClashTactic = ARRAY_AND_VALUE_COLUMNS, - private val keyValuePaths: List = emptyList(), - private val unifyNumbers: Boolean = true, -) : SupportedDataFrameFormat { - - override fun readDataFrame(stream: InputStream, header: List): AnyFrame = - DataFrame.readJson( - stream = stream, - header = header, - typeClashTactic = typeClashTactic, - keyValuePaths = keyValuePaths, - unifyNumbers = unifyNumbers, - ) - - override fun readDataFrame(path: Path, header: List): AnyFrame = - DataFrame.readJson( - path = path, - header = header, - keyValuePaths = keyValuePaths, - typeClashTactic = typeClashTactic, - unifyNumbers = unifyNumbers, - ) - - override fun acceptsExtension(ext: String): Boolean = ext == "json" - - override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough - - override val testOrder: Int = 10_000 - - override fun createDefaultReadMethod(pathRepresentation: String?): DefaultReadDfMethod = - DefaultReadJsonMethod( - path = pathRepresentation, - arguments = MethodArguments() - .add( - "keyValuePaths", - typeOf>(), - "listOf(${ - keyValuePaths.joinToString { - "org.jetbrains.kotlinx.dataframe.api.JsonPath(\"\"\"${it.path}\"\"\")" - } - })", - ) - .add( - "typeClashTactic", - typeOf(), - "org.jetbrains.kotlinx.dataframe.io.JSON.TypeClashTactic.${typeClashTactic.name}", - ) - .add( - "unifyNumbers", - typeOf(), - unifyNumbers.toString(), - ), - ) + +public object JSON { /** * Allows the choice of how to handle type clashes when reading a JSON file. diff --git a/samples/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/concepts/AccessApis.kt b/samples/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/concepts/AccessApis.kt index f99965bb53..3980acbc2f 100644 --- a/samples/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/concepts/AccessApis.kt +++ b/samples/src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/concepts/AccessApis.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlinx.dataframe.api.named import org.jetbrains.kotlinx.dataframe.api.rename import org.jetbrains.kotlinx.dataframe.api.select import org.jetbrains.kotlinx.dataframe.api.to -import org.jetbrains.kotlinx.dataframe.io.read +import org.jetbrains.kotlinx.dataframe.io.readCsv import org.junit.Ignore import org.junit.Test @@ -91,7 +91,7 @@ class AccessApis { @Test fun strings() { // SampleStart - DataFrame.read("titanic.csv") + DataFrame.readCsv("titanic.csv") .add("lastName") { "name"().split(",").last() } .dropNulls("age") .filter { @@ -113,7 +113,7 @@ class AccessApis { @Ignore @Test fun extensionProperties2() { - val df = DataFrame.read("titanic.csv").cast() + val df = DataFrame.readCsv("titanic.csv").cast() // SampleStart df.add("lastName") { name.split(",").last() } .dropNulls { age } @@ -125,7 +125,7 @@ class AccessApis { @Test fun extensionProperties1() { // SampleStart - val df = DataFrame.read("titanic.csv") + val df = DataFrame.readCsv("titanic.csv") // SampleEnd } }