diff options
Diffstat (limited to 'packages/base/src/Data/Packed/Internal/Matrix.hs')
-rw-r--r-- | packages/base/src/Data/Packed/Internal/Matrix.hs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/packages/base/src/Data/Packed/Internal/Matrix.hs b/packages/base/src/Data/Packed/Internal/Matrix.hs index be5fb03..1aee7d3 100644 --- a/packages/base/src/Data/Packed/Internal/Matrix.hs +++ b/packages/base/src/Data/Packed/Internal/Matrix.hs | |||
@@ -265,7 +265,7 @@ class (Storable a) => Element a where | |||
265 | transdata = transdataP -- transdata' | 265 | transdata = transdataP -- transdata' |
266 | constantD :: a -> Int -> Vector a | 266 | constantD :: a -> Int -> Vector a |
267 | constantD = constantP -- constant' | 267 | constantD = constantP -- constant' |
268 | extractR :: Matrix a -> Idxs -> Matrix a | 268 | extractR :: Matrix a -> CInt -> Idxs -> Matrix a |
269 | 269 | ||
270 | instance Element Float where | 270 | instance Element Float where |
271 | transdata = transdataAux ctransF | 271 | transdata = transdataAux ctransF |
@@ -444,23 +444,25 @@ tt x@Matrix{order = ColumnMajor} = trans x | |||
444 | tt x@Matrix{order = RowMajor} = x | 444 | tt x@Matrix{order = RowMajor} = x |
445 | 445 | ||
446 | --extractAux :: Matrix Double -> Idxs -> Matrix Double | 446 | --extractAux :: Matrix Double -> Idxs -> Matrix Double |
447 | extractAux f m v = unsafePerformIO $ do | 447 | extractAux f m mode v = unsafePerformIO $ do |
448 | r <- createMatrix RowMajor (dim v) (cols m) | 448 | let nr | mode == 0 = fromIntegral $ max 0 (v@>1 - v@>0 + 1) |
449 | app3 (f (isT m)) vec v mat (tt m) mat r "extractAux" | 449 | | otherwise = dim v |
450 | r <- createMatrix RowMajor nr (cols m) | ||
451 | app3 (f mode (isT m)) vec v mat (tt m) mat r "extractAux" | ||
450 | return r | 452 | return r |
451 | 453 | ||
452 | foreign import ccall unsafe "extractRD" c_extractRD | 454 | foreign import ccall unsafe "extractRD" c_extractRD |
453 | :: CInt -> CIdxs (CM Double (CM Double (IO CInt))) | 455 | :: CInt -> CInt -> CIdxs (CM Double (CM Double (IO CInt))) |
454 | 456 | ||
455 | foreign import ccall unsafe "extractRF" c_extractRF | 457 | foreign import ccall unsafe "extractRF" c_extractRF |
456 | :: CInt -> CIdxs (CM Float (CM Float (IO CInt))) | 458 | :: CInt -> CInt -> CIdxs (CM Float (CM Float (IO CInt))) |
457 | 459 | ||
458 | foreign import ccall unsafe "extractRC" c_extractRC | 460 | foreign import ccall unsafe "extractRC" c_extractRC |
459 | :: CInt -> CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt))) | 461 | :: CInt -> CInt -> CIdxs (CM (Complex Double) (CM (Complex Double) (IO CInt))) |
460 | 462 | ||
461 | foreign import ccall unsafe "extractRQ" c_extractRQ | 463 | foreign import ccall unsafe "extractRQ" c_extractRQ |
462 | :: CInt -> CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt))) | 464 | :: CInt -> CInt -> CIdxs (CM (Complex Float) (CM (Complex Float) (IO CInt))) |
463 | 465 | ||
464 | foreign import ccall unsafe "extractRI" c_extractRI | 466 | foreign import ccall unsafe "extractRI" c_extractRI |
465 | :: CInt -> CIdxs (CM CInt (CM CInt (IO CInt))) | 467 | :: CInt -> CInt -> CIdxs (CM CInt (CM CInt (IO CInt))) |
466 | 468 | ||