ox-arrays-0.2.0.0: ox-arrays.cabal
cabal-version: 3.0
name: ox-arrays
version: 0.2.0.0
synopsis: An efficient CPU-based multidimensional array (tensor) library
description:
An efficient and richly typed CPU-based multidimensional array (tensor)
library built upon the optimized tensor representation (strides list)
implemented in the orthotope package. See the README.
If you use this package: let me know (e.g. via email) if you find it useful!
Both positive feedback (keep this!) and negative feedback (I needed this but
ox-arrays doesn't provide it) is welcome.
copyright: (c) 2025 Tom Smeding, Mikolaj Konarski
author: Tom Smeding, Mikolaj Konarski
maintainer: Tom Smeding <xhackage@tomsmeding.com>
license: BSD-3-Clause
category: Array, Tensors
build-type: Simple
extra-doc-files: README.md CHANGELOG.md
extra-source-files: cbits/arith_lists.h
flag trace-wrappers
description:
Compile modules that define wrappers around the array methods that trace
their arguments and results. This is conditional on a flag because these
modules make documentation generation fail.
(@https://gitlab.haskell.org/ghc/ghc/-/issues/24964@ , should be fixed in
GHC 9.12)
default: False
manual: True
flag nonportable-simd
description:
Assume the binary will be run on the same CPU as where it is built. Setting
this flag causes `-march=native` to be passed to the C compiler when
compiling arithmetic operations. The result is generally much faster
arithmetic operations, but the executable is much less portable to
different computers.
default: False
manual: True
flag pedantic-c-warnings
description:
Compile embedded C code with a high warning level. Only useful for
ox-arrays developers.
default: False
manual: True
flag default-show-instances
description:
Use default GHC-derived Show instances for arrays, shapes and indices. This
exposes the internal struct-of-arrays representation and is less readable,
but can be useful for ox-arrays debugging.
default: False
manual: True
common basics
default-language: Haskell2010
ghc-options: -Wall -Wcompat -Widentities -Wunused-packages -Wpartial-fields -Wredundant-bang-patterns -Woperator-whitespace -Wredundant-strictness-flags
if impl(ghc >= 9.14)
ghc-options: -Wno-pattern-namespace-specifier
library
import: basics
exposed-modules:
-- put this module on top so ghci considers it the "main" module
Data.Array.Nested
Data.Array.Nested.Convert
Data.Array.Nested.Mixed
Data.Array.Nested.Mixed.ListX
Data.Array.Nested.Mixed.Shape
Data.Array.Nested.Lemmas
Data.Array.Nested.Permutation
Data.Array.Nested.Ranked
Data.Array.Nested.Ranked.Base
Data.Array.Nested.Ranked.Shape
Data.Array.Nested.Shaped
Data.Array.Nested.Shaped.Base
Data.Array.Nested.Shaped.Shape
Data.Array.Nested.Types
Data.Array.Strided.Orthotope
Data.Array.XArray
Data.Bag
Data.Vector.Generic.Checked
if impl(ghc < 9.8)
exposed-modules:
GHC.TypeLits.Orphans
if flag(trace-wrappers)
exposed-modules:
Data.Array.Nested.Trace
Data.Array.Nested.Trace.TH
build-depends:
template-haskell
other-extensions: TemplateHaskell
if flag(default-show-instances)
cpp-options: -DOXAR_DEFAULT_SHOW_INSTANCES
build-depends:
ox-arrays:strided-array-ops,
base,
deepseq < 1.7,
ghc-typelits-knownnat,
ghc-typelits-natnormalise,
orthotope >= 0.1.8.0 && < 0.2,
vector < 0.14,
vector-stream < 0.14
hs-source-dirs: src
library strided-array-ops
import: basics
visibility: public
exposed-modules:
Data.Array.Strided
Data.Array.Strided.Array
Data.Array.Strided.Arith
Data.Array.Strided.Arith.Internal
Data.Array.Strided.Arith.Internal.Foreign
Data.Array.Strided.Arith.Internal.Lists
Data.Array.Strided.Arith.Internal.Lists.TH
build-depends:
base >=4.18 && <4.23,
ghc-typelits-knownnat >= 0.8 && < 1
-- 0.9.0 is unsound: https://github.com/clash-lang/ghc-typelits-natnormalise/issues/105
&& (< 0.9 || >= 0.9.1),
ghc-typelits-natnormalise >= 0.8.1 && < 1,
template-haskell < 3,
vector < 0.14
hs-source-dirs: ops
c-sources: cbits/arith.c
cc-options: -O3 -std=c11
if flag(pedantic-c-warnings)
cc-options: -Wall -Wextra -pedantic
if flag(nonportable-simd)
cc-options: -march=native
elif arch(x86_64) || arch(i386)
-- hmatrix assumes sse2, so we can too
cc-options: -msse2
other-extensions: TemplateHaskell
test-suite test
import: basics
type: exitcode-stdio-1.0
main-is: Main.hs
other-modules:
Gen
Tests.C
Tests.Permutation
Util
build-depends:
ox-arrays,
base,
bytestring,
ghc-typelits-knownnat,
ghc-typelits-natnormalise,
hedgehog,
orthotope,
random >= 1.3.0,
tasty,
tasty-hedgehog,
vector
hs-source-dirs: test
test-suite example
import: basics
type: exitcode-stdio-1.0
main-is: Main.hs
build-depends:
ox-arrays,
base
hs-source-dirs: example
benchmark bench
import: basics
type: exitcode-stdio-1.0
main-is: Main.hs
build-depends:
ox-arrays,
ox-arrays:strided-array-ops,
base,
hmatrix,
orthotope,
tasty-bench,
vector
hs-source-dirs: bench
source-repository head
type: git
location: https://git.tomsmeding.com/ox-arrays