massiv

Efficient Haskell Arrays featuring Parallel computation

There is a decent introduction to the library with some examples in the main README on github.

See massiv-io for ability to read/write images.

Changes

0.4.5

  • Addition of computeIO and computePrimM
  • Addition of makeArrayLinearA
  • Addition of traverseS
  • Fix regression in performance introduced in massiv-0.4.0

0.4.4

  • Addition of appendOuterM and concatOuterM
  • Addition of zoom
  • Addition of write_, modify_ and swap_

0.4.3

  • Addition of catMaybesS and tally

0.4.3

  • Addition of applyStencil and Padding with helper functions noPadding and samePadding.
  • Addition of foldlStencil, foldrStencil and monoidal foldStencil.
  • Addition of common generic stencils: sumStencil, productStencil, avgStencil, maxStencil, minStencil and idStencil.
  • Addition of mapStencilUnsafe for the brave.
  • Improve compile time error reporting for invalid dimensions.
  • Fix incorrect loading of DW arrays of dimension higher than 3
  • Addition of foldOuterSlice, ifoldOuterSlice, foldInnerSlice and ifoldInnerSlice. Fix for #56

0.4.2

  • Fix loading empty DS stream arrays of unknown size. Fix for #83.

0.4.1

  • Introduction of Stream and DS representation:
    • filterS, filterM, ifilterS, ifilterM
    • mapMaybeS, mapMaybeM, imapMaybeS, imapMaybeM
    • unfoldr, unfoldrN
    • takeS and dropS
  • Deprecated traverseAR, itraverseAR, traversePrimR, itraversePrimR (not feasible to keep duplicate functions just for representation, TypeApplications or ScopedVariables should be used instead.)
  • Fix performance issue with copying of unboxed arrays and initialization of storable array.
  • Addition of unsafeLoadIntoS, unsafeLoadInto and maxSize
  • Addition of reverse, reverse' and reverseM
  • Addition of modifyDimension, modifyDimM, and modifyDim'

0.4.0

  • Made Construct a super class of Mutable
  • Reimplement a safe version of makeLoadArray, that is parallelizable.
  • Switch from EltRepr r ix to much simpler R r
  • Remove Construct instance for M representation.
  • unsafeLinearSet - length argument now accepts Sz1 instead of an Int
  • Renamed:
    • forPrimM_ -> forPrimM
    • iforPrimM_ -> iforPrimM
    • iforLinearPrimM_ -> iforLinearPrimM
  • Introduced new functions that do not mutate the original array: forPrimM_, iforPrimM_ and iforLinearPrimM_
  • Addition of readM, writeM, modifyM, swapM, modifyM_, swapM_
  • Add an orphan instance of MonadThrow for ST monad for older versions of exceptions. See ekmett/exceptions#72
  • Deprecation of read', write' modify' and swap'
  • Make modify accept a monadic action, rather than a pure function. Also now it returns the old element.
  • Make swap return the swapped elements.
  • Addition of unsafeLinearSwap and unsafeSwap
  • Expose unsafeLinearModify and unsafeModify
  • Expose Data.Massiv.Core.List
  • Expose indexWith, so macro INDEX_CHECK from massiv.h could be used outside massiv.
  • Addition of liftSz
  • Fixed expand* functions by making them accept Sz1 instead of an Int
  • Addition of expandWithinM
  • Bunch of minor fixes to Show instances
  • Extracted test-suite into it’s own package.
  • Stop accepting computation strategy for all functions that can be performed sequentially only:
    • iterateN
    • iiterateN
    • unfoldrS_
    • iunfoldrS_
    • unfoldlS_
    • iunfoldlS_
    • makeArrayA
    • makeArrayAR
    • generateArrayLinearS
    • generateArrayS
  • Redefined most of the numeric operators with Numeric and NumericFloat. Will be required for SIMD operations.

0.3.6

  • Addition of unsafeArrayLinearCopy, unsafeLinearCopy, unsafeLinearShrink, unsafeLinearGrow
  • Implementation of iterateUntil and iterateUntilM
  • identityMatrix - generation of identity matrix

0.3.5

  • Fix and export guardNumberOfElements
  • Eq instances for IndexException and SizeException
  • Fix upsample implementation and improve its performance.
  • Addition of deleteRegionM, deleteRowsM and deleteColumnsM

0.3.4

  • Use the the new stateful workers feature of scheduler-1.4.0
  • Addition of:
    • randomArrayS
    • randomArrayWS
    • generateArrayWS
    • generateArrayLinearWS
    • mapWS, forWS, imapWS and iforWS
    • and splitLinearlyWithStatefulM_

0.3.3

  • Fix type signature for createArray.
  • Support for new version of scheduler
  • Addition of randomArray

0.3.2.1

  • Fix sqrtA function: #76

0.3.2

  • Exported withMArrayS
  • Switch to pure exception throwing for read', write', modify' and swap'. MonadThrow constraint prevented those functions to be used in ST monad.
  • Addition of quicksort, quicksortM_, unstablePartitionRegionM and unsafeUnstablePartitionRegionM

0.3.1

  • Addition of rangeStepInclusive'
  • Addition of flatten
  • makeLoadArray has been deprecated into unsafeMakeLoadArray.
  • A new safe makeLoadArrayS has been added.
  • Fix infix 4 for (...) and (..:) range functions, so they can be easily composed with numeric operations
  • Addition of imapSchedulerM_ and iforSchedulerM_

0.3.0

  • Class hierarchy an associated methods:
    • getComp moved from Construct to Load
    • Size class lost array value parameter e. unsafeResize and unsafeExtract became their own classes
  • New classes:
    • Resize with unsafeResize from old Size, except with array type parameter for applicability to mutable MArrays
    • Extract with unsafeExtract from old Size
    • StrideLoad, child of Load
  • ifoldlIO and related no longer take list of capabilities, but instead respect the inner computation strategy. For that reason these folds have been removed: foldlOnP, ifoldlOnP, foldrOnP, ifoldrOnP
  • fold now is just like the one from Data.Foldable takes no arguments and requires elements to be a monoid
  • singleton does not accept computation strategy any more and creates Seq array by default
  • New function empty.
  • Ragged functions are no longer exported, until the interface stabilizes and proper implementation of ragged arrays is in place.
  • Partial functions read', write' and swap' now live in IO and throw proper exceptions.
  • loadArray is renamed to loadArrayM and there is a new separate function (not part of Load class) with the name loadArray that actually uses loadArrayM
  • Moved unsafeWithPtr into Data.Massiv.Array.Unsafe
  • Addition of:
    • unsafeArrayToForeignPtr,
    • unsafeMArrayToForeignPtr,
    • unsafeArrayFromForeignPtr,
    • unsafeArrayFromForeignPtr0,
    • unsafeMArrayFromForeignPtr,
    • unsafeMArrayFromForeignPtr0
  • Addition of castToByteString, castFromByteString
  • Addition of makeUnsafeStencil
  • Window now has an windowUnrollIx2 field.
  • Addition of insertWindow and dropWindow

0.2.8.1

  • Fix sqrtA function. Backport of #76

0.2.8

  • Fixed a problem where convolution stencil size was not inverted, causing out of bounds memory read: #72
  • Fixed an issue with windowed array where a stencil size is smaller than the array it is applied to
  • Fixed incorrect cross-correlation stencil construction

0.2.7

  • Fixed a serious performance regression in Stencil’s Functor instance, which was introduced in version 0.2.3
  • Added type and pattern synonyms Sz for future compatibility with version 0.3. Could be useful for migration.

0.2.6

  • Add expand* family of functions.
  • Long awaited makeArrayM/makeArrayA and mapM/forM/imapM/iforM/traverseA/itraverseA alnog with corresponding functions allowing for supplying representation.
  • Deprecate mapP and mapP_ in favor of mapIO and mapIO_, while making latter respect the Comp.
  • Addition of a whole collection of mutable operators:
    • mapIO/mapIO_/imapIO/imapIO_/forIO/forIO_/iforIO/iforIO_
    • createArray/createArrayST/createArrayST_
    • generateArray/generateArrayIO
    • unfoldlPrim/unfoldlPrim_
    • makeArrayA, makeArrayAR
  • Addition of cute synonyms: (...) and (..:)

0.2.5

  • Fix for insertDimension #62

0.2.4.1

  • Fix a bug in zip functions, where resulting array size would not take into account the size of one of the input arrays.

0.2.4

  • Addition of inner folds: ifoldlInner, foldlInner, ifoldrInner and foldrInner
  • Addition of functions that can fold over any dimension (foldlWithin, foldlWithin', etc.)
  • Addition of ifoldMono and ifoldSemi, thus fixing: #54
  • Improvement over manipulating index dimensions with addition of type level Dimension n data type and functions like getDimension, dropDimension.
  • Addition of insertDim and type level insertDimension as well as pullOutDim and pullOutDimension
  • Add partial extractFromTo'

0.2.3

  • Addition of Profunctor functions for Stencil: lmapStencil, rmapStencil and bimapStencil
  • Addition of integration approximation: Data.Massiv.Array.Numeric.Integral
  • Removed overlapping instances for DW in favor of concrete instances.
  • Relaxed contraint restrictions on matrix multiplication (|*|) and slightly improved performance with rewrite rules to avoid double transform.

0.2.2

  • Addition of withMArray, withMArrayST.
  • Improved preformance of matrix multiplication

0.2.1

  • Addition of Stride and related functions computeWithStride and computeWithStrideAs.

  • Addition of Window

  • Addition of loadArray adn loadArrayWithStride with default implementations that will become new loading functions in a subsequent release. loadArray will replace loadS and loadP, which will be deprecated in the next release and removed in the next major release. Some of this is discussed in #41

  • Addition of various conversion functions:

    • fromByteString, toByteString and toBuilder
    • unwrapArray, evalArray, unwrapMutableArray, evalMutableArray
    • unwrapNormalFormArray, evalNormalFormArray, unwrapNormalFormMutableArray, evalNormalFormMutableArray
  • Fix: Eq instance for Array M ix e

0.2.0

  • Fixed type signatures for convertAs and convertProxy
  • Added type constructors for DW and DI
  • Show instance for DW arrays.
  • Addition of unsafeBackpermuteDW.
  • Breaking changes:
    • Create new Data.Massiv.Array.Stencil.Unsafe module and move forStencilUnsafe into it.
    • Rename of rank -> dimensions #25
      • Removal Eq and Ord instances for Value #19
      • Move border resolution to mapStencil from makeStencil.
    • Updated iterators iterM, iterM_, etc. to have a separate step per dimension.

0.1.6

  • Semigroup and Monoid instance for Value.
  • Addition of forStencilUnsafe.
  • Fix minimum behaving as maximum.
  • Addition of foldSemi.

0.1.5

  • Fix inverted stencil index calculation #12
  • Add support for cross-correlation.

0.1.4

  • Addition of Monoidal folding foldMono.
  • Expose liftArray2.

0.1.3

  • Addition of withPtr and unsafeWithPtr for Storable arrays
  • Addition of computeInto.
  • Exposed makeWindowedArray.

0.1.2

  • Support for GHC-8.4 - instance of Comp for Semigroup
  • Brought back support for GHC-7.10

0.1.1

  • Addition of experimental mapM, imapM, forM, iforM, generateM and generateLinearM functions. Fixes #5
  • Addition of Ord instances for some array representations.

0.1.0

  • Initial Release