From a4250d0887462b123aa4d2a3d21dddc323ee4ee1 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Thu, 28 May 2015 11:53:11 +0200 Subject: general Range, test --- packages/base/src/Data/Packed/Internal/Numeric.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'packages/base/src/Data/Packed/Internal/Numeric.hs') diff --git a/packages/base/src/Data/Packed/Internal/Numeric.hs b/packages/base/src/Data/Packed/Internal/Numeric.hs index 67d047c..44d18b3 100644 --- a/packages/base/src/Data/Packed/Internal/Numeric.hs +++ b/packages/base/src/Data/Packed/Internal/Numeric.hs @@ -69,7 +69,7 @@ type instance ArgOf Matrix a = a -> a -> a data Extractor = All - | Range Int Int + | Range Int Int Int | Pos (Vector I) | PosCyc (Vector I) | Take Int @@ -89,16 +89,19 @@ infixl 9 ?? extractError m e = error $ printf "can't extract %s from matrix %dx%d" (show e) (rows m) (cols m) -m ?? e@(Range a b,_) | a < 0 || b >= rows m = extractError m e -m ?? e@(_,Range a b) | a < 0 || b >= cols m = extractError m e +m ?? (Range a s b,e) | s /= 1 = m ?? (Pos (idxs [a,a+s .. b]), e) +m ?? (e,Range a s b) | s /= 1 = m ?? (e, Pos (idxs [a,a+s .. b])) + +m ?? e@(Range a _ b,_) | a < 0 || b >= rows m = extractError m e +m ?? e@(_,Range a _ b) | a < 0 || b >= cols m = extractError m e m ?? e@(Pos vs,_) | minElement vs < 0 || maxElement vs >= fromIntegral (rows m) = extractError m e m ?? e@(_,Pos vs) | minElement vs < 0 || maxElement vs >= fromIntegral (cols m) = extractError m e m ?? (All,All) = m -m ?? (Range a b,e) | a > b = m ?? (Take 0,e) -m ?? (e,Range a b) | a > b = m ?? (e,Take 0) +m ?? (Range a _ b,e) | a > b = m ?? (Take 0,e) +m ?? (e,Range a _ b) | a > b = m ?? (e,Take 0) m ?? (Take n,e) | n <= 0 = (0>