dataframe-2.2.0.0: dataframe.cabal
cabal-version: 3.0
name: dataframe
version: 2.2.0.0
synopsis: A fast, safe, and intuitive DataFrame library.
description: A fast, safe, and intuitive DataFrame library for exploratory data analysis.
bug-reports: https://github.com/mchav/dataframe/issues
license: MIT
license-file: LICENSE
author: Michael Chavinda
maintainer: mschavinda@gmail.com
copyright: (c) 2024-2026 Michael Chavinda
category: Data
tested-with: GHC ==9.4.8 || ==9.6.7 || ==9.8.4 || ==9.10.3 || ==9.12.2
extra-doc-files: CHANGELOG.md README.md
extra-source-files: cbits/arrow_abi.h
tests/data/typing/texts.txt
tests/data/typing/texts_with_empties.txt
tests/data/typing/texts_with_empties_and_nullish.txt
data/titanic/*.csv
data/ml/*.csv
data/ml/golden.json
data/sharded/*.parquet
tests/data/*.csv
tests/data/*.tsv
tests/data/*.parquet
tests/data/unstable_csv/*.csv
tests/data/unstable_csv/*.tsv
-- tests/data/*.md
-- tests/data/*.bin
-- tests/data/*.json
-- tests/data/*.txt
-- tests/data/*.encrypted
source-repository head
type: git
location: https://github.com/mchav/dataframe
common warnings
ghc-options:
-Wall
flag no-csv
default: False
manual: True
description: Exclude the CSV reader/writer (@dataframe-csv@). Enable
with @-f +no-csv@ (or @flags: no-csv@ in cabal.project)
to trim the dep set of the meta package when CSV is not
needed.
flag no-parquet
default: False
manual: True
description: Exclude the Parquet reader/writer (@dataframe-parquet@
plus pinch, zstd, snappy, streamly, http-conduit).
Enable with @-f +no-parquet@.
flag no-th
default: False
manual: True
description: Exclude the Template Haskell splices (@dataframe-th@,
@dataframe-csv-th@, @dataframe-parquet-th@). Enable
with @-f +no-th@ to drop the @template-haskell@ dep for
downstream packages that don't use compile-time schema
derivation.
library
import: warnings
default-extensions: Strict
-- Lock the unused-packages gate locally; haskell-ci already runs the
-- same Werror against this stanza. Catches the case where a satellite
-- gets added to build-depends but never re-exported.
ghc-options: -Werror=unused-packages
exposed-modules: DataFrame,
DataFrame.Typed
reexported-modules: DataFrame.Functions,
DataFrame.Synthesis,
DataFrame.Display.Web.Plot,
DataFrame.Display.Web.Chart,
DataFrame.Display.Web.Chart.Typed,
DataFrame.Internal.Types,
DataFrame.Internal.Expression,
DataFrame.Internal.Grouping,
DataFrame.Internal.Interpreter,
DataFrame.Internal.Nullable,
DataFrame.Internal.Parsing,
DataFrame.Internal.Column,
DataFrame.Internal.Binary,
DataFrame.Internal.Statistics,
DataFrame.Display.Terminal.PrettyPrint,
DataFrame.Display.Terminal.Colours,
DataFrame.Internal.DataFrame,
DataFrame.Internal.Row,
DataFrame.Internal.Schema,
DataFrame.Errors,
DataFrame.Operations.Core,
DataFrame.Operations.Join,
DataFrame.Operations.Merge,
DataFrame.Operators,
DataFrame.Operations.Permutation,
DataFrame.Operations.Subset,
DataFrame.Operations.Statistics,
DataFrame.Operations.Transformations,
DataFrame.Operations.Typing,
DataFrame.Operations.Aggregation,
DataFrame.Display,
DataFrame.Display.Terminal.Plot,
DataFrame.Monad,
DataFrame.DecisionTree,
DataFrame.IO.JSON,
DataFrame.Typed.Types,
DataFrame.Typed.Schema,
DataFrame.Typed.Freeze,
DataFrame.Typed.Access,
DataFrame.Typed.Operations,
DataFrame.Typed.Join,
DataFrame.Typed.Aggregate,
DataFrame.Typed.Expr,
DataFrame.Typed.Record,
DataFrame.Typed.Generic
build-depends: base >= 4 && <5,
dataframe-core ^>= 1.1,
dataframe-json ^>= 1.0,
dataframe-operations >= 1.1.1 && < 1.2,
dataframe-parsing ^>= 1.0.2,
dataframe-viz ^>= 1.0.3,
dataframe-learn ^>= 1.1
if !flag(no-csv)
reexported-modules: DataFrame.IO.CSV
build-depends: dataframe-csv ^>= 1.0.2
cpp-options: -DWITH_CSV
if !flag(no-parquet)
reexported-modules: DataFrame.IO.Parquet,
DataFrame.IO.Parquet.Binary,
DataFrame.IO.Parquet.Dictionary,
DataFrame.IO.Parquet.Levels,
DataFrame.IO.Parquet.Thrift,
DataFrame.IO.Parquet.Decompress,
DataFrame.IO.Parquet.Encoding,
DataFrame.IO.Parquet.Page,
DataFrame.IO.Parquet.Schema,
DataFrame.IO.Parquet.Utils,
DataFrame.IO.Parquet.Seeking,
DataFrame.IO.Parquet.Time,
DataFrame.IO.Utils.RandomAccess
build-depends: dataframe-parquet ^>= 1.0.1.1
cpp-options: -DWITH_PARQUET
-- The lazy executor calls both CSV and Parquet readers directly, so
-- it can only be pulled in when both backends are present.
if !flag(no-csv) && !flag(no-parquet)
reexported-modules: DataFrame.Lazy,
DataFrame.Lazy.IO.Binary,
DataFrame.Lazy.IO.CSV,
DataFrame.Lazy.Internal.DataFrame,
DataFrame.Lazy.Internal.LogicalPlan,
DataFrame.Lazy.Internal.PhysicalPlan,
DataFrame.Lazy.Internal.Optimizer,
DataFrame.Lazy.Internal.Executor,
DataFrame.Typed.Lazy
build-depends: dataframe-lazy ^>= 1.0.2
cpp-options: -DWITH_LAZY
if !flag(no-th)
build-depends: dataframe-th ^>= 1.0.1.1
cpp-options: -DWITH_TH
exposed-modules: DataFrame.TH,
DataFrame.Typed.TH
if !flag(no-th) && !flag(no-csv)
build-depends: dataframe-csv-th ^>= 1.0
cpp-options: -DWITH_CSV_TH
if !flag(no-th) && !flag(no-parquet)
build-depends: dataframe-parquet-th ^>= 1.0
cpp-options: -DWITH_PARQUET_TH
hs-source-dirs: src
default-language: Haskell2010
library arrow-bridge
import: warnings
visibility: public
hs-source-dirs: ffi
exposed-modules: DataFrame.IO.Arrow
DataFrame.IR
DataFrame.IR.ExprJson
-- The Arrow bridge IR loads CSV + Parquet readers, so it requires
-- both backends. If either flag is off, skip building it.
if flag(no-csv) || flag(no-parquet)
buildable: False
build-depends:
base >= 4 && < 5,
dataframe-core ^>= 1.1,
dataframe-csv ^>= 1.0.2,
dataframe-json ^>= 1.0,
dataframe-lazy ^>= 1.0.2,
dataframe-operations >= 1.1.1 && < 1.2,
dataframe-parquet ^>= 1.0.1.1,
dataframe-parsing ^>= 1.0.2,
text >= 2.0 && < 3,
aeson >= 0.11 && < 3,
bytestring >= 0.11 && < 0.13,
containers >= 0.6.7 && < 0.9,
vector ^>= 0.13
include-dirs: cbits
default-language: Haskell2010
executable dataframe-benchmark-example
import: warnings
main-is: Benchmark.hs
build-depends: base >= 4 && < 5,
dataframe >= 1 && < 3,
dataframe-operations >= 1.1.1 && < 1.2,
random >= 1 && < 2,
time >= 1.12 && < 2,
vector ^>= 0.13,
hs-source-dirs: app
default-language: Haskell2010
ghc-options: -rtsopts -threaded -with-rtsopts=-N
executable synthesis
import: warnings
main-is: Synthesis.hs
build-depends: base >= 4 && < 5,
dataframe >= 1 && < 3,
dataframe-core ^>= 1.1,
dataframe-learn ^>= 1.1,
dataframe-operations >= 1.1.1 && < 1.2,
random >= 1 && < 2,
text >= 2.0 && < 3
hs-source-dirs: app
default-language: Haskell2010
ghc-options: -rtsopts -threaded -with-rtsopts=-N
executable dataframe
import: warnings
main-is: Main.hs
build-depends: base >= 4 && < 5,
directory >= 1.3.0.0 && < 2,
filepath >= 1.4 && < 2,
process >= 1.6 && < 2,
time >= 1.12 && < 2
if !os(windows)
build-depends: unix >= 2 && < 3
hs-source-dirs: app
default-language: Haskell2010
ghc-options: -rtsopts -threaded -with-rtsopts=-N
executable lazy-bench
import: warnings
main-is: LazyBenchmark.hs
-- lazy-bench drives the lazy executor against CSV/Parquet sources, so
-- it can only build when both backends are present.
if flag(no-csv) || flag(no-parquet)
buildable: False
build-depends: base >= 4 && < 5,
bytestring >= 0.11 && < 0.13,
containers >= 0.6.7 && < 0.9,
dataframe >= 1 && < 3,
dataframe-core ^>= 1.1,
dataframe-lazy ^>= 1.0.2,
dataframe-parsing ^>= 1.0.2,
directory >= 1.3.0.0 && < 2,
random >= 1 && < 2,
text >= 2.0 && < 3,
time >= 1.12 && < 2,
hs-source-dirs: app
default-language: Haskell2010
ghc-options: -rtsopts -threaded -with-rtsopts=-N
benchmark dataframe-benchmark
import: warnings
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: benchmark
build-depends: base >= 4 && < 5,
criterion >= 1 && < 2,
deepseq >= 1.4 && < 2,
process >= 1.6 && < 2,
dataframe >= 1 && < 3,
random >= 1 && < 2,
default-language: Haskell2010
ghc-options:
-threaded
-rtsopts
-with-rtsopts=-N
test-suite tests
import: warnings
type: exitcode-stdio-1.0
main-is: Main.hs
-- Threaded RTS with -N so the parallel-grouping parity test exercises the
-- real multi-capability fork path rather than the sequential fallback.
ghc-options: -threaded -rtsopts -with-rtsopts=-N
-- The test runner imports CSV, JSON, Parquet, Lazy, and TH-derived
-- schema modules. All features must be enabled for it to compile.
if flag(no-csv) || flag(no-parquet) || flag(no-th)
buildable: False
other-modules: Assertions,
Cart,
DecisionTree,
Functions,
GenDataFrame,
Internal.ColumnBuilder,
Internal.DictEncode,
Internal.PackedText,
Internal.Parsing,
PackedTextMigration,
Learn.Numerics,
Learn.Denotation,
Learn.Models,
Learn.Ensembles,
Learn.Symbolic,
Learn.SklearnParity,
Learn.Synthesis,
Learn.MetricsTests,
Learn.Metamorphic,
Learn.EdgeCases,
Learn.NumericalRigor,
IO.CSV,
IO.CsvGolden,
IO.JSON,
LinearSolver,
Operations.Aggregations,
Operations.Apply,
Operations.Core,
Operations.Derive,
Operations.Filter,
Operations.GroupBy,
Operations.ParallelGroupBy,
Operations.ParallelJoin,
Operations.Inference,
Operations.InsertColumn,
Operations.Join,
Operations.Merge,
Operations.Nullable,
Operations.NullableHashing,
Operations.Provenance,
Operations.ReadCsv,
Operations.Window,
Operations.WriteCsv,
Operations.Shuffle,
Operations.Sort,
Operations.SetOps,
Operations.Subset,
Operations.Statistics,
Operations.Take,
Operations.Typing,
Operations.VectorKernel,
Operations.Record,
LazyParquet,
LazyParity,
Parquet,
ParquetTestData,
Plotting,
Properties,
Properties.Categorical,
Properties.Simplify,
Simplify,
TreePruning,
Worklist,
Monad
build-depends: base >= 4 && < 5,
aeson >= 0.11.0.0 && < 3,
bytestring >= 0.11 && < 0.13,
dataframe >= 1 && < 3,
dataframe-core ^>= 1.1,
dataframe-csv ^>= 1.0.2,
dataframe-json ^>= 1.0,
dataframe-lazy ^>= 1.0.2,
dataframe-learn ^>= 1.1,
dataframe-operations >= 1.1.1 && < 1.2,
dataframe-parquet ^>= 1.0,
dataframe-parsing ^>= 1.0.2,
HUnit ^>= 1.6,
QuickCheck >= 2 && < 3,
random-shuffle >= 0.0.4 && < 1,
random >= 1 && < 2,
text >= 2.0 && < 3,
time >= 1.12 && < 2,
vector ^>= 0.13,
temporary >= 1.3 && < 1.4,
directory >= 1.3 && < 1.4,
containers >= 0.6.7 && < 0.9
hs-source-dirs: tests
default-language: Haskell2010
-- Focused oracle for the packed-text column variant. Kept as its own suite so
-- it can run independently of the (heavier) `tests` runner.
test-suite packed-text
import: warnings
type: exitcode-stdio-1.0
main-is: PackedTextMain.hs
if flag(no-csv) || flag(no-parquet) || flag(no-th)
buildable: False
other-modules: Internal.PackedText
build-depends: base >= 4 && < 5,
bytestring >= 0.11 && < 0.13,
dataframe >= 1 && < 3,
dataframe-core ^>= 1.1,
dataframe-operations >= 1.1.1 && < 1.2,
HUnit ^>= 1.6,
text >= 2.0 && < 3,
vector ^>= 0.13
hs-source-dirs: tests
default-language: Haskell2010