# 1.0.0 * Addition of `sumArrays'`, `sumArraysM` and `productArrays'`, `productArraysM`. * Remove `Num`/`Fractional`/`Floating` instances for `D` and `DI` arrays. This was done to prevent surprises as in: [#97](https://github.com/lehins/massiv/issues/97) * Remove helper class `Nested` and type family `NestedStuct` * Make `negate` in `Num` instance throw error for `Sz` in order to avoid surprising behavior reported in: [#114](https://github.com/lehins/massiv/issues/114) * Add of `munsafeResize` * Add `uniformArray` and `uniformRangeArray` * Replace `isNonEmpty` with `isNotZeroSz` and added `isZeroSz` * Consolidate `Construct` class into `Load` * Introduce `Shape`, the parent of `Size` * Move `size` from `Load` into new class `Size` * Consolidate `Resize` into `Size` * Removed `maxSize` and replaced it with `maxLinearSize` * Remove specialized `DW` instances that used tuples as indices. * Get rid of `M` representation * Remove `R` type family and `Slice`, `InnerSlice` and `Extract` classes in favor of `D`. * Consolidate `OuterSlice` into `Source` * Add `Strategy` and move `setComp` (from `Construct`) and `getComp` (from `Load`) in there. * Remove `ix` from `Mutable`, `Manifest`, `Source` * Remove `liftArray2`. Instead add `liftArray2'` and `liftArray2M` that don't behave like a `map` for singleton argument. * Expose `liftNumArray2M` * Prevent `showsArrayPrec` from changing index type * Change function argument to monadic action for `unstablePartitionM` and `unsafeUnstablePartitionM` * Replace `snull` with a more generic `isNull` * Switch `DL` loading function to run in `ST` monad, rather than in any `Monad m`. * Rename `msize` -> `sizeOfMArray` * Add `unsafeResizeMArray` and `unsafeLinearSliceMArray` * Rename: * `loadArrayM` -> `iterArrayLinearM_` * `loadArrayWithSetM` -> `iterArrayLinearWithSetM_`. * `loadArrayWithStrideM` -> `iterArrayLinearWithStrideM_`. * Add `iterArrayLinearST_` and `iterArrayLinearWithSetST_` to `Load` class instead of `loadArrayM` and `loadArrayWithSetM`. * Add `iterArrayLinearWithStrideST_` to `LoadStride` class instead of `loadArrayWithStrideM`. * Add new mutable functions: * `resizeMArrayM` and `flattenMArray`, * `outerSliceMArrayM` and `outerSlicesMArray`, * `for2PrimM_` and `ifor2PrimM_`, * `zipSwapM_` * Switch effectful mapping functions to use the representation specific iteration. This means that they are now restricted to `Load` instead of `Source`. Functions affected: * `mapIO_`, `imapIO_`, `forIO_` and `iforIO_` * `mapIO`, `imapIO`, `forIO` and `iforIO` * Add `Uniform`, `UniformRange` and `Random` instances for `Ix2`, `IxN`, `Dim`, `Sz` and `Stride` * Consolidate `Mutable` into `Manifest` type class and move the `MArray` data family outside of the class. * Make sure empty arrays are always equal, regardless of their size. * Remove `LN` representation in favor of a standalone `List` newtype wrapper around lists. # 0.6.1 * Addition of `withLoadMArray_`, `withLoadMArrayS`, `withLoadMArrayS_`, `withLoadMArrayST`, `withLoadMArrayST_` * Addition of `replaceSlice` and `replaceOuterSlice` * Addition of `quicksortBy`, `quicksortByM` and `quicksortByM_` * Fix performance regression for `quicksort` and `quicksortM_` introduced in previous release. # 0.6.0 * Fix semantics of `Applicative`, `Num` and `Fractional` instance for `D` arrays: mismatched sizes will throw an error. * 20% speed improvement of matrix multiplication: `multiplyMatrices`, `.><.` and `!><.` and `>`, `|*|`, `multiplyTransposed`, `fromIntegerA`, `fromRationalA`, `piA` * Addition of `BL` representation and related functionality, fix for [#111](https://github.com/lehins/massiv/issues/111). * Addition of functions: `wrapLazyArray`, `unwrapLazyArray`, `toLazyArray`, `evalLazyArray`, `forceLazyArray`, `unwrapMutableLazyArray`, `fromBoxedVector`, `fromBoxedMVector`. * Rename: * `unsafeNormalBoxedArray` -> `coerceNormalBoxedArray` * `unsafeBoxedArray` -> `coerceBoxedArray` * Remove `unsafeFromBoxedVector` * Conversion from vector with `castFromVector` will return `BL` representation for boxed vector * Change type `B` -> `BL` for functions: `toBoxedVector` and `toBoxedMVector` * Rename `N` -> `BN` and add backwards compatibility shim. * Make `replicate` a function in `Construct` class * Add `newMArray`, `newMArray'` and deprecate `new` * Add custom implementation for `<$` in `Functor` instances for `BL` and `B`. # 0.5.9 * Add `mallocCompute`, `mallocCopy` and `unsafeMallocMArray` * Fix `.><.`, `><.` and `.><` on empty matrices. Result is now guaranteed to be empty too. * Add `unwrapByteArrayOffset` and `unwrapMutableByteArrayOffset` * Add `fromByteArrayOffsetM` and `fromMutableByteArrayOffsetM` # 0.5.8 * Improve loading of push arrays by adding `loadArrayWithSetM` and deprecating `defaultElement`. # 0.5.9 * Add `mallocCompute`, `mallocCopy` and `unsafeMallocMArray` # 0.5.8 * Improve loading of push arrays by adding `loadArrayWithSetM` and deprecating `defaultElement`. # 0.5.7 * Improve performance of `><.` and `><.` and `!><` and `!><` * New vector-matrix multiplication: `><.` and `>` # 0.5.5 * Add `takeWhile`, `dropWhile` and `findIndex` * Improve performance of `any`, `and`, `or`, `all` * Add `elem` # 0.5.4 * Addition of `unsafeTransformStencil` * Add `zip4`, `unzip4`, `zipWith4` and `izipWith4` * Make `Resize` a superclass of `Source` * Addition of `outerSlices`, `innerSlices`, `withinSlices` and `withinSlicesM` * Addition of `stackSlicesM`, `stackOuterSlicesM` and `stackInnerSlicesM` * Addition of `computeP` * Fix perfomrmance issue of folding functions applied to arrays with `Seq` computation strategy. # 0.5.3 * Fix `tanA` and `tanhA`. [#96](https://github.com/lehins/massiv/pull/96) * Relax argument of `snoc` and `cons` constraint to `Load` vectors * Improve `unsnocM` and `unconsM` by switching to `unsafeLinearSlice`, instead of delaying the array. * Fix parallelization for windowed array when computed with stride * Fix massiv doctests not being able to find massiv.h under NixOS # 0.5.2 * Addition of `lowerTriangular` and `upperTriangular` * Relax `identityMatrix` type to return an array of any `Num` type, not just `Int`. * Addition of `unsafeMakeLoadArrayAdjusted` * Add matrix-vector product (`(#>)`) * Addition of `siterate` # 0.5.1 * Fix `sfromListN` accepting a plain `Int` instead of `Sz1`, as well as switch to upper bound. * Fix order of argumetns in `iforM` * Restrict `szip*`, `szipWith*` and `sizipWith*` functions to flat vectors. * Addition of `unsafeSUnfoldrN`, `unsafeSUnfoldrNM` and `unsafeSFromListN` * Fix `sunfoldrN`, `sunfoldrNM` and `sfromListN` to not trust the supplied size. * Move `isEmpty` into `Load` class * Add `isNotEmpty` # 0.5.0 * Remove `Show` instance from `Value`. * Addition of `unsafeCreateArray`, `unsafeCreateArray_` and `unsafeCreateArrayS` * Remove `Comp` argument from functions that ignore it and set it to `Seq`: * `createArrayS_`, `createArrayS`, `createArrayST_`, `createArrayST` * `unfoldrPrimM_`, `iunfoldrPrimM_`, `unfoldrPrimM`, `iunfoldrPrimM` * `unfoldlPrimM_`, `iunfoldlPrimM_`, `unfoldlPrimM`, `iunfoldlPrimM` * Addition of `fromStorableVector` and `fromStorableMVector` * Modify `toMutableByteArray` to produce a copy if dealing with slice. * Addition of `toByteArrayM`, `toMutableByteArrayM` * Change `replicate` to produce delayed load array `DL` * Export unsafe stencil functions from `Data.Array.Massiv.Unsafe`, rather than from `Data.Massiv.Array.Stencil.Unsafe`. * Implement `unsafeMapStencil` and deprecate `mapStencilUnsafe` and `forStencilUnsafe` * Addition of `castToBuilder` * Addition of conversion functions: * `unwrapNormalForm` and `evalNormalForm` * `toBoxedVector`, `toBoxedMVector`, `evalBoxedVector` and `evalBoxedMVector` * `unwrapByteArray` and `unwrapMutableByteArray` * `toPrimitiveVector`, `toPrimitiveMVector`, `fromPrimitiveVector` and `fromPrimitiveMVector` * `toStorableVector`, `toStorableMVector`, `fromStorableVector` and `fromStorableMVector` * `fromUnboxedVector` and `fromUnboxedMVector` * `unsafeBoxedArray`, `unsafeNormalBoxedArray`, `unsafeFromBoxedVector` * Removed deprecated `traverseAR`, `itraverseAR`, `traversePrimR` and `itraversePrimR` * Removed: `imapMR`, `imapMR`, `iforMR`, and `iforMR` * Renamed: * `withMArray` to `withMArray_`, * `withMArrayS` to `withMArrayS_` and * `withMArrayST` to `withMArrayST_` * Added versions that keep the artifact of mutable action: `withMArray`, `withMArrayS`, `withMArrayST`. # 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](https://github.com/lehins/massiv/issues/56) # 0.4.2 * Fix loading empty `DS` stream arrays of unknown size. Fix for [#83](https://github.com/lehins/massiv/issues/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](https://github.com/ekmett/exceptions/pull/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. * `Num`, `Fractional` and `Applicative` for `D` and `DI` changed behavior: instead of treating singleton as a special array of any size it is treated as singleton. # 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](https://github.com/lehins/massiv/pull/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 `MArray`s * `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](https://github.com/lehins/massiv/pull/76) # 0.2.8 * Fixed a problem where convolution stencil size was not inverted, causing out of bounds memory read: [#72](https://github.com/lehins/massiv/issues/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](https://github.com/lehins/massiv/pull/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](https://github.com/lehins/massiv/issues/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](https://github.com/lehins/massiv/issues/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](https://github.com/lehins/massiv/issues/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