math-functions 0.3.3.0 → 0.3.4.0
raw patch · 4 files changed
+152/−18 lines, 4 filesdep ~vectordep ~vector-th-unboxPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: vector, vector-th-unbox
API changes (from Hackage documentation)
Files
- Numeric/SpecFunctions/Internal.hs +1/−1
- Numeric/Sum.hs +143/−14
- changelog.md +5/−0
- math-functions.cabal +3/−3
Numeric/SpecFunctions/Internal.hs view
@@ -582,7 +582,7 @@ -- | Regularized incomplete beta function. -- -- \[--- I(x;a,b) = \frac{1}{B(a,b)} \int_0^x t^{a-1}(1-t)^{1-b}\,dt+-- I(x;a,b) = \frac{1}{B(a,b)} \int_0^x t^{a-1}(1-t)^{b-1}\,dt -- \] -- -- Uses algorithm AS63 by Majumder and Bhattachrjee and quadrature
Numeric/Sum.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleContexts,- MultiParamTypeClasses, TemplateHaskell, TypeFamilies, CPP #-}+ MultiParamTypeClasses, TypeFamilies, CPP #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-} -- | -- Module : Numeric.Sum@@ -58,13 +58,14 @@ import Data.Semigroup (Semigroup(..)) #endif import Data.Vector.Generic (Vector(..), foldl')-import Data.Vector.Unboxed.Deriving (derivingUnbox) -- Needed for GHC 7.2 & 7.4 to derive Unbox instances+import Control.Monad (liftM) import Data.Vector.Generic.Mutable (MVector(..)) import qualified Data.Foldable as F import qualified Data.Vector as V import qualified Data.Vector.Generic as G+import qualified Data.Vector.Generic.Mutable as GM import qualified Data.Vector.Unboxed as U -- | A class for summation of floating point numbers.@@ -98,11 +99,54 @@ data KahanSum = KahanSum {-# UNPACK #-} !Double {-# UNPACK #-} !Double deriving (Eq, Show, Typeable, Data) -derivingUnbox "KahanSum"- [t| KahanSum -> (Double, Double) |]- [| \ (KahanSum a b) -> (a, b) |]- [| \ (a, b) -> KahanSum a b |]+instance U.Unbox KahanSum+newtype instance U.MVector s KahanSum = MV_KahanSum (U.MVector s (Double, Double))+instance MVector U.MVector KahanSum where+ {-# INLINE GM.basicLength #-}+ {-# INLINE GM.basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicInitialize #-}+ {-# INLINE basicUnsafeReplicate #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ {-# INLINE basicClear #-}+ {-# INLINE basicSet #-}+ {-# INLINE GM.basicUnsafeCopy #-}+ {-# INLINE basicUnsafeMove #-}+ {-# INLINE basicUnsafeGrow #-}+ basicLength (MV_KahanSum mvec) = GM.basicLength mvec+ basicUnsafeSlice idx len (MV_KahanSum mvec) = MV_KahanSum (GM.basicUnsafeSlice idx len mvec)+ basicOverlaps (MV_KahanSum mvec) (MV_KahanSum mvec') = basicOverlaps mvec mvec'+ basicUnsafeNew len = MV_KahanSum `liftM` basicUnsafeNew len+ basicInitialize (MV_KahanSum mvec) = basicInitialize mvec+ basicUnsafeReplicate len val = MV_KahanSum `liftM` basicUnsafeReplicate len ((\ (KahanSum a b) -> (a, b)) val)+ basicUnsafeRead (MV_KahanSum mvec) idx = (\ (a, b) -> KahanSum a b) `liftM` basicUnsafeRead mvec idx+ basicUnsafeWrite (MV_KahanSum mvec) idx val = basicUnsafeWrite mvec idx ((\ (KahanSum a b) -> (a, b)) val)+ basicClear (MV_KahanSum mvec) = basicClear mvec+ basicSet (MV_KahanSum mvec) val = basicSet mvec ((\ (KahanSum a b) -> (a, b)) val)+ basicUnsafeCopy (MV_KahanSum mvec) (MV_KahanSum mvec') = GM.basicUnsafeCopy mvec mvec'+ basicUnsafeMove (MV_KahanSum mvec) (MV_KahanSum mvec') = basicUnsafeMove mvec mvec'+ basicUnsafeGrow (MV_KahanSum mvec) len = MV_KahanSum `liftM` basicUnsafeGrow mvec len +newtype instance U.Vector KahanSum = V_KahanSum (U.Vector (Double, Double))+instance Vector U.Vector KahanSum where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE G.basicLength #-}+ {-# INLINE G.basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ {-# INLINE G.basicUnsafeCopy #-}+ {-# INLINE elemseq #-}+ basicUnsafeFreeze (MV_KahanSum mvec) = V_KahanSum `liftM` basicUnsafeFreeze mvec+ basicUnsafeThaw (V_KahanSum vec) = MV_KahanSum `liftM` basicUnsafeThaw vec+ basicLength (V_KahanSum vec) = G.basicLength vec+ basicUnsafeSlice idx len (V_KahanSum vec) = V_KahanSum (G.basicUnsafeSlice idx len vec)+ basicUnsafeIndexM (V_KahanSum vec) idx = (\ (a, b) -> KahanSum a b) `liftM` basicUnsafeIndexM vec idx+ basicUnsafeCopy (MV_KahanSum mvec) (V_KahanSum vec) = G.basicUnsafeCopy mvec vec+ elemseq (V_KahanSum vec) val = elemseq vec ((\ (KahanSum a b) -> (a, b)) val)++ instance Summation KahanSum where zero = KahanSum 0 0 add = kahanAdd@@ -137,11 +181,54 @@ data KBNSum = KBNSum {-# UNPACK #-} !Double {-# UNPACK #-} !Double deriving (Eq, Show, Typeable, Data) -derivingUnbox "KBNSum"- [t| KBNSum -> (Double, Double) |]- [| \ (KBNSum a b) -> (a, b) |]- [| \ (a, b) -> KBNSum a b |]+instance U.Unbox KBNSum+newtype instance U.MVector s KBNSum = MV_KBNSum (U.MVector s (Double, Double))+instance MVector U.MVector KBNSum where+ {-# INLINE GM.basicLength #-}+ {-# INLINE GM.basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicInitialize #-}+ {-# INLINE basicUnsafeReplicate #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ {-# INLINE basicClear #-}+ {-# INLINE basicSet #-}+ {-# INLINE GM.basicUnsafeCopy #-}+ {-# INLINE basicUnsafeMove #-}+ {-# INLINE basicUnsafeGrow #-}+ basicLength (MV_KBNSum mvec) = GM.basicLength mvec+ basicUnsafeSlice idx len (MV_KBNSum mvec) = MV_KBNSum (GM.basicUnsafeSlice idx len mvec)+ basicOverlaps (MV_KBNSum mvec) (MV_KBNSum mvec') = basicOverlaps mvec mvec'+ basicUnsafeNew len = MV_KBNSum `liftM` basicUnsafeNew len+ basicInitialize (MV_KBNSum mvec) = basicInitialize mvec+ basicUnsafeReplicate len val = MV_KBNSum `liftM` basicUnsafeReplicate len ((\ (KBNSum a b) -> (a, b)) val)+ basicUnsafeRead (MV_KBNSum mvec) idx = (\ (a, b) -> KBNSum a b) `liftM` basicUnsafeRead mvec idx+ basicUnsafeWrite (MV_KBNSum mvec) idx val = basicUnsafeWrite mvec idx ((\ (KBNSum a b) -> (a, b)) val)+ basicClear (MV_KBNSum mvec) = basicClear mvec+ basicSet (MV_KBNSum mvec) val = basicSet mvec ((\ (KBNSum a b) -> (a, b)) val)+ basicUnsafeCopy (MV_KBNSum mvec) (MV_KBNSum mvec') = GM.basicUnsafeCopy mvec mvec'+ basicUnsafeMove (MV_KBNSum mvec) (MV_KBNSum mvec') = basicUnsafeMove mvec mvec'+ basicUnsafeGrow (MV_KBNSum mvec) len = MV_KBNSum `liftM` basicUnsafeGrow mvec len +newtype instance U.Vector KBNSum = V_KBNSum (U.Vector (Double, Double))+instance Vector U.Vector KBNSum where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE G.basicLength #-}+ {-# INLINE G.basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ {-# INLINE G.basicUnsafeCopy #-}+ {-# INLINE elemseq #-}+ basicUnsafeFreeze (MV_KBNSum mvec) = V_KBNSum `liftM` basicUnsafeFreeze mvec+ basicUnsafeThaw (V_KBNSum vec) = MV_KBNSum `liftM` basicUnsafeThaw vec+ basicLength (V_KBNSum vec) = G.basicLength vec+ basicUnsafeSlice idx len (V_KBNSum vec) = V_KBNSum (G.basicUnsafeSlice idx len vec)+ basicUnsafeIndexM (V_KBNSum vec) idx = (\ (a, b) -> KBNSum a b) `liftM` basicUnsafeIndexM vec idx+ basicUnsafeCopy (MV_KBNSum mvec) (V_KBNSum vec) = G.basicUnsafeCopy mvec vec+ elemseq (V_KBNSum vec) val = elemseq vec ((\ (KBNSum a b) -> (a, b)) val)++ instance Summation KBNSum where zero = KBNSum 0 0 add = kbnAdd@@ -183,10 +270,52 @@ {-# UNPACK #-} !Double deriving (Eq, Show, Typeable, Data) -derivingUnbox "KB2Sum"- [t| KB2Sum -> (Double, Double, Double) |]- [| \ (KB2Sum a b c) -> (a, b, c) |]- [| \ (a, b, c) -> KB2Sum a b c |]+instance U.Unbox KB2Sum+newtype instance U.MVector s KB2Sum = MV_KB2Sum (U.MVector s (Double, Double, Double))+instance MVector U.MVector KB2Sum where+ {-# INLINE GM.basicLength #-}+ {-# INLINE GM.basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicInitialize #-}+ {-# INLINE basicUnsafeReplicate #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ {-# INLINE basicClear #-}+ {-# INLINE basicSet #-}+ {-# INLINE GM.basicUnsafeCopy #-}+ {-# INLINE basicUnsafeMove #-}+ {-# INLINE basicUnsafeGrow #-}+ basicLength (MV_KB2Sum mvec) = GM.basicLength mvec+ basicUnsafeSlice idx len (MV_KB2Sum mvec) = MV_KB2Sum (GM.basicUnsafeSlice idx len mvec)+ basicOverlaps (MV_KB2Sum mvec) (MV_KB2Sum mvec') = basicOverlaps mvec mvec'+ basicUnsafeNew len = MV_KB2Sum `liftM` basicUnsafeNew len+ basicInitialize (MV_KB2Sum mvec) = basicInitialize mvec+ basicUnsafeReplicate len val = MV_KB2Sum `liftM` basicUnsafeReplicate len ((\ (KB2Sum a b c) -> (a, b, c)) val)+ basicUnsafeRead (MV_KB2Sum mvec) idx = (\ (a, b, c) -> KB2Sum a b c) `liftM` basicUnsafeRead mvec idx+ basicUnsafeWrite (MV_KB2Sum mvec) idx val = basicUnsafeWrite mvec idx ((\ (KB2Sum a b c) -> (a, b, c)) val)+ basicClear (MV_KB2Sum mvec) = basicClear mvec+ basicSet (MV_KB2Sum mvec) val = basicSet mvec ((\ (KB2Sum a b c) -> (a, b, c)) val)+ basicUnsafeCopy (MV_KB2Sum mvec) (MV_KB2Sum mvec') = GM.basicUnsafeCopy mvec mvec'+ basicUnsafeMove (MV_KB2Sum mvec) (MV_KB2Sum mvec') = basicUnsafeMove mvec mvec'+ basicUnsafeGrow (MV_KB2Sum mvec) len = MV_KB2Sum `liftM` basicUnsafeGrow mvec len++newtype instance U.Vector KB2Sum = V_KB2Sum (U.Vector (Double, Double, Double))+instance Vector U.Vector KB2Sum where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE G.basicLength #-}+ {-# INLINE G.basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ {-# INLINE G.basicUnsafeCopy #-}+ {-# INLINE elemseq #-}+ basicUnsafeFreeze (MV_KB2Sum mvec) = V_KB2Sum `liftM` basicUnsafeFreeze mvec+ basicUnsafeThaw (V_KB2Sum vec) = MV_KB2Sum `liftM` basicUnsafeThaw vec+ basicLength (V_KB2Sum vec) = G.basicLength vec+ basicUnsafeSlice idx len (V_KB2Sum vec) = V_KB2Sum (G.basicUnsafeSlice idx len vec)+ basicUnsafeIndexM (V_KB2Sum vec) idx = (\ (a, b, c) -> KB2Sum a b c) `liftM` basicUnsafeIndexM vec idx+ basicUnsafeCopy (MV_KB2Sum mvec) (V_KB2Sum vec) = G.basicUnsafeCopy mvec vec+ elemseq (V_KB2Sum vec) val = elemseq vec ((\ (KB2Sum a b c) -> (a, b, c)) val) instance Summation KB2Sum where zero = KB2Sum 0 0 0
changelog.md view
@@ -1,3 +1,8 @@+## Changes in 0.3.4.0++ * Dependency on `vector-th-unbox` is dropped. All instances are written by+ hand now.+ ## Changes in 0.3.3.0 * New implementation for `logGamma`. Now it's precise within 2 ulps at full
math-functions.cabal view
@@ -1,5 +1,5 @@ name: math-functions-version: 0.3.3.0+version: 0.3.4.0 cabal-version: >= 1.10 license: BSD2 license-file: LICENSE@@ -28,6 +28,8 @@ || ==8.2.2 || ==8.4.4 || ==8.6.5+ || ==8.8.3+ || ==8.10.1 , GHCJS ==8.4 extra-source-files:@@ -65,7 +67,6 @@ FlexibleContexts MultiParamTypeClasses ScopedTypeVariables- TemplateHaskell TypeFamilies DeriveGeneric @@ -75,7 +76,6 @@ , data-default-class >= 0.1.2.0 , vector >= 0.7 , primitive- , vector-th-unbox >= 0.2.1.6 if flag(system-expm1) && !os(windows) cpp-options: -DUSE_SYSTEM_EXPM1 if flag(system-erf) && !impl(ghcjs)