packages feed

linear-massiv-0.1.0.6: linear-massiv.cabal

cabal-version: 3.0
name:          linear-massiv
category:      Math, Algebra, Numerical
version:       0.1.0.6
author:        Nadia Yvette Chambers
maintainer:    Nadia Yvette Chambers <nadia.yvette.chambers@ik.me>
synopsis:      Pure Haskell numerical linear algebra implementing Golub & Van Loan
description:
  Pure Haskell numerical linear algebra implementing algorithms from
  Golub & Van Loan's /Matrix Computations/ (4th ed.), with no FFI and no C
  dependencies.

  Provides type-safe matrix and vector operations backed by
  <https://hackage.haskell.org/package/massiv massiv> arrays, with
  compile-time dimension checking via GHC type-level naturals.
  Implements BLAS Level 1–3 operations, panel LU, Cholesky, and QR
  factorisations, blocked WY Householder transformations, banded linear
  solvers, symmetric eigenvalue decomposition, and singular value
  decomposition (SVD).

  Execution is portable across all architectures and GHC versions (9.6+)
  using efficient unboxed scalar kernels by default. On x86_64 systems with
  AVX2 and FMA support, optional SIMD acceleration can be enabled via the
  @simd@ cabal flag when compiling with GHC's LLVM backend.
license:       EUPL-1.2 OR Apache-2.0
license-file:  LICENSE
build-type:    Simple
tested-with:   GHC == 9.6.7, GHC == 9.8.4, GHC == 9.10.3, GHC == 9.12.4, GHC == 9.14.1
extra-doc-files:
  README.md
  CHANGELOG.md

source-repository head
  type: git
  location: https://github.com/NadiaYvette/linear-massiv

flag simd
  description: Enable AVX2 SIMD optimizations (requires GHC with LLVM backend and AVX2/FMA CPU)
  default:     False
  manual:      True

library
  hs-source-dirs: src
  exposed-modules:
    Numeric.LinearAlgebra.Massiv
    Numeric.LinearAlgebra.Massiv.Types
    Numeric.LinearAlgebra.Massiv.Internal
    Numeric.LinearAlgebra.Massiv.Norms
    Numeric.LinearAlgebra.Massiv.BLAS.Level1
    Numeric.LinearAlgebra.Massiv.BLAS.Level2
    Numeric.LinearAlgebra.Massiv.BLAS.Level3
    Numeric.LinearAlgebra.Massiv.Solve.Triangular
    Numeric.LinearAlgebra.Massiv.Solve.LU
    Numeric.LinearAlgebra.Massiv.Solve.Cholesky
    Numeric.LinearAlgebra.Massiv.Solve.Banded
    Numeric.LinearAlgebra.Massiv.Orthogonal.Householder
    Numeric.LinearAlgebra.Massiv.Orthogonal.Givens
    Numeric.LinearAlgebra.Massiv.Orthogonal.QR
    Numeric.LinearAlgebra.Massiv.Orthogonal.LeastSquares
    Numeric.LinearAlgebra.Massiv.Eigen.Power
    Numeric.LinearAlgebra.Massiv.Eigen.Hessenberg
    Numeric.LinearAlgebra.Massiv.Eigen.Schur
    Numeric.LinearAlgebra.Massiv.Eigen.Symmetric
    Numeric.LinearAlgebra.Massiv.Eigen.SVD
    Numeric.LinearAlgebra.Massiv.Internal.Kernel
    Numeric.LinearAlgebra.Massiv.Linear
  build-depends:
    base >= 4.18 && < 5,
    ghc-prim < 1,
    massiv >= 1.0 && < 2,
    linear >= 1.21 && < 2,
    vector >= 0.12 && < 1,
    primitive >= 0.7 && < 1,
    deepseq >= 1.4 && < 2
  default-language: GHC2021
  default-extensions:
    DataKinds
    TypeFamilies
    ScopedTypeVariables
    TypeApplications
    TypeOperators
    GADTs
    RankNTypes
    FlexibleContexts
    FlexibleInstances
    MultiParamTypeClasses
    StandaloneDeriving
    DerivingStrategies
  ghc-options: -Wall
  if flag(simd)
    cpp-options: -DUSE_SIMD
    ghc-options: -mavx2 -mfma

test-suite linear-massiv-test
  type: exitcode-stdio-1.0
  main-is: Spec.hs
  hs-source-dirs: test
  other-modules:
    Test.Types
    Test.Residuals
    Test.BLAS
    Test.Solve
    Test.Banded
    Test.Orthogonal
    Test.Eigen
    Test.Norms
    Test.Linear
  build-depends:
    base,
    linear-massiv,
    massiv,
    tasty >= 1.4,
    tasty-hunit >= 0.10,
    tasty-quickcheck >= 0.10,
    QuickCheck >= 2.14,
    linear,
    vector
  default-language: GHC2021
  default-extensions:
    DataKinds
    TypeFamilies
    ScopedTypeVariables
    TypeApplications
    TypeOperators
    GADTs
    RankNTypes
    FlexibleContexts
    FlexibleInstances
    MultiParamTypeClasses
  ghc-options: -Wall -threaded -rtsopts

benchmark linear-massiv-bench
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs: bench
  other-modules:
    Bench.BLAS
    Bench.Solve
    Bench.Orthogonal
    Bench.Eigen
    Bench.Parallel
  build-depends:
    base,
    linear-massiv,
    massiv,
    criterion >= 1.5,
    deepseq,
    linear
  default-language: GHC2021
  default-extensions:
    DataKinds
    TypeFamilies
    ScopedTypeVariables
    TypeApplications
    TypeOperators
    GADTs
    RankNTypes
    FlexibleContexts
    FlexibleInstances
    MultiParamTypeClasses
  ghc-options: -Wall -threaded -rtsopts "-with-rtsopts=-N"

benchmark linear-massiv-comparison
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs: bench-comparison
  build-depends:
    base,
    linear-massiv,
    massiv,
    hmatrix >= 0.20,
    linear,
    criterion >= 1.5,
    deepseq,
    vector
  default-language: GHC2021
  default-extensions:
    DataKinds
    TypeFamilies
    ScopedTypeVariables
    TypeApplications
    TypeOperators
    GADTs
    RankNTypes
    FlexibleContexts
    FlexibleInstances
    MultiParamTypeClasses
  ghc-options: -Wall -threaded -rtsopts "-with-rtsopts=-N"