lapack 0.5.1.1 → 0.5.2
raw patch · 41 files changed
+309/−277 lines, 41 filesdep +containersdep ~comfort-blasdep ~netlib-ffidep ~random
Dependencies added: containers
Dependency ranges changed: comfort-blas, netlib-ffi, random
Files
- Makefile +5/−2
- lapack.cabal +6/−5
- src/Numeric/LAPACK/Format.hs +1/−1
- src/Numeric/LAPACK/Linear/LowerUpper.hs +1/−1
- src/Numeric/LAPACK/Linear/Plain.hs +2/−2
- src/Numeric/LAPACK/Matrix.hs +42/−1
- src/Numeric/LAPACK/Matrix/Array/Multiply.hs +1/−1
- src/Numeric/LAPACK/Matrix/Banded/Basic.hs +2/−2
- src/Numeric/LAPACK/Matrix/BandedHermitian.hs +1/−1
- src/Numeric/LAPACK/Matrix/BandedHermitian/Basic.hs +7/−6
- src/Numeric/LAPACK/Matrix/BandedHermitian/Eigen.hs +2/−2
- src/Numeric/LAPACK/Matrix/BandedHermitianPositiveDefinite/Linear.hs +1/−1
- src/Numeric/LAPACK/Matrix/Basic.hs +50/−39
- src/Numeric/LAPACK/Matrix/Divide.hs +1/−1
- src/Numeric/LAPACK/Matrix/Extent/Private.hs +8/−0
- src/Numeric/LAPACK/Matrix/Hermitian.hs +1/−1
- src/Numeric/LAPACK/Matrix/Hermitian/Basic.hs +3/−4
- src/Numeric/LAPACK/Matrix/Hermitian/Eigen.hs +2/−2
- src/Numeric/LAPACK/Matrix/HermitianPositiveDefinite/Linear.hs +1/−1
- src/Numeric/LAPACK/Matrix/Layout.hs +1/−1
- src/Numeric/LAPACK/Matrix/Layout/Basic.hs +32/−0
- src/Numeric/LAPACK/Matrix/Layout/Private.hs +9/−18
- src/Numeric/LAPACK/Matrix/ModifierTyped.hs +1/−1
- src/Numeric/LAPACK/Matrix/Mosaic/Private.hs +1/−1
- src/Numeric/LAPACK/Matrix/Multiply.hs +2/−2
- src/Numeric/LAPACK/Matrix/Permutation.hs +1/−1
- src/Numeric/LAPACK/Matrix/Plain.hs +79/−12
- src/Numeric/LAPACK/Matrix/RowMajor.hs +0/−80
- src/Numeric/LAPACK/Matrix/Square/Basic.hs +12/−26
- src/Numeric/LAPACK/Matrix/Symmetric/Basic.hs +1/−1
- src/Numeric/LAPACK/Matrix/Symmetric/Unified.hs +4/−3
- src/Numeric/LAPACK/Matrix/Type/Private.hs +1/−1
- src/Numeric/LAPACK/Orthogonal/Householder.hs +2/−2
- src/Numeric/LAPACK/Orthogonal/Plain.hs +1/−1
- src/Numeric/LAPACK/Permutation.hs +1/−1
- src/Numeric/LAPACK/Permutation/Private.hs +5/−4
- src/Numeric/LAPACK/Private.hs +1/−31
- src/Numeric/LAPACK/Split.hs +1/−1
- test-module.list +2/−2
- test/DocTest/Main.hs +4/−4
- test/DocTest/Numeric/LAPACK/Permutation/Private.hs +11/−11
Makefile view
@@ -9,8 +9,11 @@ run-test-cabal: update-test cabal test --show-details=streaming -update-test:- doctest-extract-0.1 -i src/ -o test/ --module-prefix DocTest --library-main=Main $$(cat test-module.list)+update-test: test-module.list+ doctest-extract-0.1 -i src/ -o test/ --module-prefix DocTest --library-main=Main $$(cat $<)++test-module.list: lapack.cabal+ grep '^ \+DocTest\.Numeric\.LAPACK\.' $< | cut -d. -f2- >$@ %.html: %.md pandoc --standalone --metadata pagetitle="$*" --output=$@ $<
lapack.cabal view
@@ -1,6 +1,6 @@ Cabal-Version: 2.2 Name: lapack-Version: 0.5.1.1+Version: 0.5.2 License: BSD-3-Clause License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -57,7 +57,7 @@ test-module.list Source-Repository this- Tag: 0.5.1.1+ Tag: 0.5.2 Type: darcs Location: https://hub.darcs.net/thielema/lapack/ @@ -71,10 +71,10 @@ Library Build-Depends:- comfort-blas >=0.0 && <0.1,+ comfort-blas >=0.0.3 && <0.1, lapack-ffi >=0.0.3 && <0.1, blas-ffi >=0.0 && <0.2,- netlib-ffi >=0.1.1 && <0.2,+ netlib-ffi >=0.1.2 && <0.2, comfort-array-shape >=0.0 && <0.1, comfort-array >=0.5.2 && <0.6, guarded-allocation >=0.0 && <0.1,@@ -86,6 +86,7 @@ lazyio >=0.1 && <0.2, transformers >=0.4 && <0.7, tfp >=1.0.2 && <1.1,+ containers >=0.4 && <0.8, semigroups >=0.18.3 && <1.0, non-empty >=0.3 && <0.4, Stream >=0.4.7 && <0.5,@@ -166,6 +167,7 @@ Numeric.LAPACK.Matrix.BandedHermitian.Basic Numeric.LAPACK.Matrix.BandedHermitian.Eigen Numeric.LAPACK.Matrix.BandedHermitianPositiveDefinite.Linear+ Numeric.LAPACK.Matrix.Layout.Basic Numeric.LAPACK.Matrix.Layout.Private Numeric.LAPACK.Matrix.Extent.Private Numeric.LAPACK.Matrix.Extent.Strict@@ -191,7 +193,6 @@ Numeric.LAPACK.Matrix.Array.Private Numeric.LAPACK.Matrix.Lazy.UpperTriangular Numeric.LAPACK.Matrix.ModifierTyped- Numeric.LAPACK.Matrix.RowMajor Numeric.LAPACK.Matrix.Private Numeric.LAPACK.Vector.Private Numeric.LAPACK.Private
src/Numeric/LAPACK/Format.hs view
@@ -79,7 +79,7 @@ format cfg (a,b,c) = format cfg a /+/ format cfg b /+/ format cfg c instance (Shape.C sh) => Format (Perm.Permutation sh) where- format _cfg = Perm.format+ format = Perm.format instance (FormatArray sh, Class.Floating a) => Format (Array sh a) where format = formatArray
src/Numeric/LAPACK/Linear/LowerUpper.hs view
@@ -43,7 +43,7 @@ import qualified Numeric.LAPACK.Matrix as Matrix import qualified Numeric.LAPACK.Shape as ExtShape import Numeric.LAPACK.Matrix.Array.Private (Full)-import Numeric.BLAS.Matrix.Modifier (Transposition, Conjugation, Inversion)+import Numeric.Netlib.Modifier (Transposition, Conjugation, Inversion) import qualified Numeric.Netlib.Class as Class
src/Numeric/LAPACK/Linear/Plain.hs view
@@ -57,7 +57,7 @@ import Numeric.LAPACK.Matrix.Triangular.Basic (Lower, Upper) import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor), Triangle(Triangle))-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition(NonTransposed, Transposed), Conjugation(NonConjugated, Conjugated), Inversion(NonInverted, Inverted))@@ -127,7 +127,7 @@ instance Matrix.Format LU where type FormatExtra LU extra = extra ~ () format fmt lu@(LowerUpper _ipiv m) =- Perm.format (extractP NonInverted lu)+ Perm.format fmt (extractP NonInverted lu) /+/ formatArray fmt m
src/Numeric/LAPACK/Matrix.hs view
@@ -59,6 +59,8 @@ takeTop, takeBottom, takeLeft, takeRight, takeRowArray, takeColumnArray,+ takeRowSet, takeColumnSet,+ takeRowIntSet, takeColumnIntSet, swapRows, swapColumns, reverseRows, reverseColumns, fromRowMajor, toRowMajor,@@ -136,7 +138,7 @@ import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix import qualified Numeric.LAPACK.Matrix.Type.Private as Matrix import qualified Numeric.LAPACK.Matrix.Plain as Plain-import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Matrix.Divide as Divide import qualified Numeric.LAPACK.Matrix.Multiply as Multiply import qualified Numeric.LAPACK.Matrix.Shape.Omni as Omni@@ -165,6 +167,8 @@ import qualified Data.NonEmpty as NonEmpty import qualified Data.Either.HT as EitherHT import Data.Function.HT (Id)+import Data.IntSet (IntSet)+import Data.Set (Set) import Prelude hiding (map) @@ -497,11 +501,48 @@ General height width a -> General sh width a takeRowArray = ArrMatrix.lift1 . Plain.takeRowArray +takeRowSet ::+ (Extent.C vert,+ Shape.Indexed height, Shape.Index height ~ ix, Ord ix,+ Shape.C width, Class.Floating a) =>+ Set ix ->+ Full Extent.Size vert Extent.Big height width a ->+ Full Extent.Size vert Extent.Big (Set ix) width a+takeRowSet = ArrMatrix.lift1 . Plain.takeRowSet++takeRowIntSet ::+ (Extent.C vert,+ Shape.Indexed height, Shape.Index height ~ Int,+ Shape.C width, Class.Floating a) =>+ IntSet ->+ Full Extent.Size vert Extent.Big height width a ->+ Full Extent.Size vert Extent.Big IntSet width a+takeRowIntSet = ArrMatrix.lift1 . Plain.takeRowIntSet++ takeColumnArray :: (Shape.C height, Shape.Indexed width, Shape.C sh, Class.Floating a) => BoxedArray.Array sh (Shape.Index width) -> General height width a -> General height sh a takeColumnArray = ArrMatrix.lift1 . Plain.takeColumnArray++takeColumnSet ::+ (Extent.C horiz,+ Shape.Indexed width, Shape.Index width ~ ix, Ord ix,+ Shape.C height, Class.Floating a) =>+ Set ix ->+ Full Extent.Size Extent.Big horiz height width a ->+ Full Extent.Size Extent.Big horiz height (Set ix) a+takeColumnSet = ArrMatrix.lift1 . Plain.takeColumnSet++takeColumnIntSet ::+ (Extent.C horiz,+ Shape.Indexed width, Shape.Index width ~ Int,+ Shape.C height, Class.Floating a) =>+ IntSet ->+ Full Extent.Size Extent.Big horiz height width a ->+ Full Extent.Size Extent.Big horiz height IntSet a+takeColumnIntSet = ArrMatrix.lift1 . Plain.takeColumnIntSet
src/Numeric/LAPACK/Matrix/Array/Multiply.hs view
@@ -32,7 +32,7 @@ import Numeric.LAPACK.Matrix.Array.Banded (Banded) import Numeric.LAPACK.Matrix.Array.Private (ArrayMatrix, diagTag) import Numeric.LAPACK.Matrix.Type.Private (Matrix)-import Numeric.BLAS.Matrix.Modifier (Transposition(NonTransposed,Transposed))+import Numeric.Netlib.Modifier (Transposition(NonTransposed,Transposed)) import Numeric.LAPACK.Matrix.Shape.Omni (StripSingleton(StripBands, StripFilled)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Shape.Private (Unchecked(Unchecked, deconsUnchecked))
src/Numeric/LAPACK/Matrix/Banded/Basic.hs view
@@ -38,15 +38,15 @@ import qualified Numeric.LAPACK.Matrix.Triangular.Basic as Triangular import qualified Numeric.LAPACK.Matrix.Mosaic.Generic as Mosaic import qualified Numeric.LAPACK.Matrix.Mosaic.Private as Mos-import qualified Numeric.LAPACK.Matrix.RowMajor as RowMajor import qualified Numeric.LAPACK.Matrix.Private as Matrix import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.Private as Private+import qualified Numeric.BLAS.Matrix.RowMajor as RowMajor import qualified Data.Array.Comfort.Shape.Static as ShapeStatic import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor,ColumnMajor), transposeFromOrder, swapOnRowMajor, UnaryProxy, addOffDiagonals)-import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated))+import Numeric.Netlib.Modifier (Conjugation(NonConjugated)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (zero, one) import Numeric.LAPACK.Matrix.Extent.Private (Extent)
src/Numeric/LAPACK/Matrix/BandedHermitian.hs view
@@ -47,7 +47,7 @@ import Numeric.LAPACK.Matrix.Array.Mosaic (FlexHermitian) import Numeric.LAPACK.Matrix.Array.Private (Full) import Numeric.LAPACK.Matrix.Layout.Private (Order, UnaryProxy, natFromProxy)-import Numeric.BLAS.Matrix.Modifier (Transposition(NonTransposed, Transposed))+import Numeric.Netlib.Modifier (Transposition(NonTransposed, Transposed)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf)
src/Numeric/LAPACK/Matrix/BandedHermitian/Basic.hs view
@@ -27,19 +27,19 @@ import qualified Numeric.LAPACK.Matrix.Extent as Extent import qualified Numeric.LAPACK.Matrix.Banded.Basic as Banded import qualified Numeric.LAPACK.Matrix.Mosaic.Private as Mos-import qualified Numeric.LAPACK.Matrix.RowMajor as RowMajor import qualified Numeric.LAPACK.Matrix.Private as Matrix import qualified Numeric.LAPACK.Vector.Private as VectorPriv import qualified Numeric.LAPACK.Vector as Vector+import qualified Numeric.BLAS.Matrix.RowMajor as RowMajor import qualified Data.Array.Comfort.Shape.Static as ShapeStatic import Numeric.LAPACK.Matrix.Hermitian.Private (TakeDiagonal(..)) import Numeric.LAPACK.Matrix.Hermitian.Basic (Hermitian) import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor,ColumnMajor), uploFromOrder,+ (Order(RowMajor,ColumnMajor), uploFromOrder, conjugatedOnRowMajor, UnaryProxy, natFromProxy)-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition(NonTransposed, Transposed), transposeOrder,- Conjugation(NonConjugated), conjugatedOnRowMajor)+ Conjugation(NonConjugated)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf, zero, one) import Numeric.LAPACK.Private@@ -74,6 +74,7 @@ import Control.Monad.Trans.Cont (ContT(ContT), evalContT) import Control.Monad.IO.Class (liftIO)+import Control.Monad (when) import Data.Foldable (for_) import Data.Tuple.HT (mapPair)@@ -192,10 +193,10 @@ (n-1) k lda (advancePtr aPtr (k+1)) ldb (advancePtr bPtr (k+1))- fill zero k (advancePtr bPtr (ldb*n-k))+ when (n>0) $ fill zero k (advancePtr bPtr (ldb*n-k)) RowMajor -> do copySubMatrix lda n lda aPtr ldb (advancePtr bPtr k)- fill zero k bPtr+ when (n>0) $ fill zero k bPtr rowToColumnMajor copyConjugate (n-1) k lda (advancePtr aPtr 1)
src/Numeric/LAPACK/Matrix/BandedHermitian/Eigen.hs view
@@ -11,8 +11,8 @@ import qualified Numeric.LAPACK.Matrix.Private as Matrix import qualified Numeric.LAPACK.Shape as ExtShape import Numeric.LAPACK.Matrix.Hermitian.Private (TakeDiagonal(..))-import Numeric.LAPACK.Matrix.Layout.Private (uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (conjugatedOnRowMajor)+import Numeric.LAPACK.Matrix.Layout.Private+ (uploFromOrder, conjugatedOnRowMajor) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf) import Numeric.LAPACK.Private
src/Numeric/LAPACK/Matrix/BandedHermitianPositiveDefinite/Linear.hs view
@@ -16,7 +16,7 @@ import Numeric.LAPACK.Matrix.Hermitian.Private (Determinant(..)) import Numeric.LAPACK.Matrix.Mosaic.Private (copyTriangleToTemp) import Numeric.LAPACK.Matrix.Layout.Private (uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (Conjugation(Conjugated))+import Numeric.Netlib.Modifier (Conjugation(Conjugated)) import Numeric.LAPACK.Matrix.Private (Full) import Numeric.LAPACK.Scalar (RealOf, realPart) import Numeric.LAPACK.Private (copyBlock, withInfo, rankMsg, definiteMsg)
src/Numeric/LAPACK/Matrix/Basic.hs view
@@ -4,12 +4,12 @@ import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent-import qualified Numeric.LAPACK.Matrix.RowMajor as RowMajor import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.Private as Private+import qualified Numeric.BLAS.Matrix.RowMajor as RowMajor import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor, ColumnMajor), transposeFromOrder, flipOrder)-import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated))+ (Order(RowMajor, ColumnMajor), transposeFromOrder)+import Numeric.Netlib.Modifier (Conjugation(NonConjugated)) import Numeric.LAPACK.Matrix.Private (Full, Tall, Wide, Square, General, fromFull, ShapeInt, revealOrder) import Numeric.LAPACK.Vector (Vector)@@ -37,6 +37,11 @@ import Data.Complex (Complex) ++fullExtent ::+ Full meas vert horiz height width a -> Extent meas vert horiz height width+fullExtent = Layout.fullExtent . Array.shape+ caseTallWide :: (Extent.Measure meas, Extent.C vert, Extent.C horiz, Shape.C height, Shape.C width) =>@@ -366,11 +371,7 @@ General heightB widthA a -> Full meas vert horiz heightB widthB a -> Full meas vert horiz (heightA::+heightB) (widthA::+widthB) a stackBiased vertBias horizBias a b c d =- mapExtent- (\ _ ->- Extent.stack- (Layout.fullExtent $ Array.shape a)- (Layout.fullExtent $ Array.shape d)) $+ mapExtent (\ _ -> Extent.stack (fullExtent a) (fullExtent d)) $ above vertBias Extent.appendAny (beside horizBias Extent.appendAny (fromFull a) b) (beside horizBias Extent.appendAny c (fromFull d))@@ -511,37 +512,47 @@ Full meas vert horiz fuse width a -> Full meas vert horiz height width a -- preserve order of the right factor-multiply- (Array (Layout.Full orderA extentA) a)- (Array (Layout.Full orderB extentB) b) =- case Extent.fuse extentA extentB of- Nothing -> error "multiply: fuse shapes mismatch"- Just extent ->- Array.unsafeCreate (Layout.Full orderB extent) $ \cPtr -> do-- let (height,fuse) = Extent.dimensions extentA- let width = Extent.width extentB- let m = Shape.size height- let n = Shape.size width- let k = Shape.size fuse- case orderB of- RowMajor ->- Private.multiplyMatrix (flipOrder orderB) (flipOrder orderA)- n k m b a cPtr- ColumnMajor -> Private.multiplyMatrix orderA orderB m k n a b cPtr+multiply a b =+ fullFromTransposable (Extent.fuseUnchecked (fullExtent a) (fullExtent b)) $+ let at = transposableFromFull a in+ let bt = transposableFromFull b in+ case bt of+ RowMajor.NonTransposed _ ->+ RowMajor.NonTransposed $+ RowMajor.multiplyTransposable at bt+ RowMajor.Transposed _ ->+ RowMajor.Transposed $+ RowMajor.multiplyTransposable+ (RowMajor.transposeTransposable bt)+ (RowMajor.transposeTransposable at) -- always return ColumnMajor-multiplyColumnMajor- (Array (Layout.Full orderA extentA) a)- (Array (Layout.Full orderB extentB) b) =- case Extent.fuse extentA extentB of- Nothing -> error "multiply: fuse shapes mismatch"- Just extent ->- Array.unsafeCreate (Layout.Full ColumnMajor extent) $ \cPtr -> do+multiplyColumnMajor a b =+ fullFromTransposable (Extent.fuseUnchecked (fullExtent a) (fullExtent b)) $+ RowMajor.Transposed $+ RowMajor.multiplyTransposable+ (RowMajor.transposeTransposable $ transposableFromFull b)+ (RowMajor.transposeTransposable $ transposableFromFull a) - let (height,fuse) = Extent.dimensions extentA- let width = Extent.width extentB- let m = Shape.size height- let n = Shape.size width- let k = Shape.size fuse- Private.multiplyMatrix orderA orderB m k n a b cPtr++transposableFromFull ::+ (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>+ Full meas vert horiz height width a ->+ RowMajor.Transposable height width a+transposableFromFull (Array (Layout.Full order extent) a) =+ let (height,width) = Extent.dimensions extent in+ case order of+ RowMajor -> RowMajor.NonTransposed $ Array (height,width) a+ ColumnMajor -> RowMajor.Transposed $ Array (width,height) a++fullFromTransposable ::+ (Extent.Measure meas, Extent.C vert, Extent.C horiz) =>+ Extent meas vert horiz height width ->+ RowMajor.Transposable height width a ->+ Full meas vert horiz height width a+fullFromTransposable extent at =+ case at of+ RowMajor.NonTransposed a ->+ Array.reshape (Layout.Full RowMajor extent) a+ RowMajor.Transposed a ->+ Array.reshape (Layout.Full ColumnMajor extent) a
src/Numeric/LAPACK/Matrix/Divide.hs view
@@ -20,7 +20,7 @@ import qualified Numeric.LAPACK.Vector as Vector import Numeric.LAPACK.Matrix.Array.Private (Full) import Numeric.LAPACK.Matrix.Type.Private (scaleWithCheck)-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition(NonTransposed,Transposed), Inversion(Inverted)) import Numeric.LAPACK.Vector (Vector)
src/Numeric/LAPACK/Matrix/Extent/Private.hs view
@@ -482,6 +482,14 @@ fuse (Square s0) (Square s1) = toMaybe (s0==s1) $ Square s0 fuse (Separate h f0) (Separate f1 w) = toMaybe (f0==f1) $ Separate h w +fuseUnchecked ::+ (Measure meas, C vert, C horiz) =>+ Extent meas vert horiz height fuse ->+ Extent meas vert horiz fuse width ->+ Extent meas vert horiz height width+fuseUnchecked (Square s0) (Square _s1) = Square s0+fuseUnchecked (Separate h _f0) (Separate _f1 w) = Separate h w+ relaxMeasureWith :: (Measure measA, Measure measB, MultiplyMeasure measA measB ~ measC,
src/Numeric/LAPACK/Matrix/Hermitian.hs view
@@ -87,7 +87,7 @@ SymmetricP) import Numeric.LAPACK.Matrix.Array.Private (Full, General, Square, packTag) import Numeric.LAPACK.Matrix.Layout.Private (Order)-import Numeric.BLAS.Matrix.Modifier (Transposition(NonTransposed, Transposed))+import Numeric.Netlib.Modifier (Transposition(NonTransposed, Transposed)) import Numeric.LAPACK.Matrix.Private (ShapeInt) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf, one)
src/Numeric/LAPACK/Matrix/Hermitian/Basic.hs view
@@ -21,10 +21,9 @@ rowMajorPointers, columnMajorPointers, withPacking, noLabel, applyFuncPair, triArg) import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor,ColumnMajor), uploFromOrder)-import Numeric.BLAS.Matrix.Modifier- (Transposition(NonTransposed, Transposed),- Conjugation(Conjugated), conjugatedOnRowMajor)+ (Order(RowMajor,ColumnMajor), uploFromOrder, conjugatedOnRowMajor)+import Numeric.Netlib.Modifier+ (Transposition(NonTransposed, Transposed), Conjugation(Conjugated)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf, zero) import Numeric.LAPACK.Private (fill, realPtr, condConjugate)
src/Numeric/LAPACK/Matrix/Hermitian/Eigen.hs view
@@ -11,8 +11,8 @@ import qualified Numeric.LAPACK.Shape as ExtShape import Numeric.LAPACK.Matrix.Hermitian.Basic (Hermitian, HermitianP) import Numeric.LAPACK.Matrix.Square.Basic (Square)-import Numeric.LAPACK.Matrix.Layout.Private (Order(ColumnMajor), uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (conjugatedOnRowMajor)+import Numeric.LAPACK.Matrix.Layout.Private+ (Order(ColumnMajor), uploFromOrder, conjugatedOnRowMajor) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (RealOf) import Numeric.LAPACK.Private
src/Numeric/LAPACK/Matrix/HermitianPositiveDefinite/Linear.hs view
@@ -18,7 +18,7 @@ (withPackingLinear, label, applyFuncPair, triArg, copyTriangleToTemp) import Numeric.LAPACK.Matrix.Mosaic.Basic (takeDiagonal) import Numeric.LAPACK.Matrix.Layout.Private (uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (Conjugation(Conjugated))+import Numeric.Netlib.Modifier (Conjugation(Conjugated)) import Numeric.LAPACK.Matrix.Private (Full) import Numeric.LAPACK.Linear.Private (solver) import Numeric.LAPACK.Scalar (RealOf, realPart, zero)
src/Numeric/LAPACK/Matrix/Layout.hs view
@@ -2,7 +2,7 @@ General, Tall, Wide,- Square,+ Square, squareSize, Full(..), fullHeight, fullWidth, Order(..), flipOrder, general,
+ src/Numeric/LAPACK/Matrix/Layout/Basic.hs view
@@ -0,0 +1,32 @@+module Numeric.LAPACK.Matrix.Layout.Basic where++import qualified Numeric.Netlib.Modifier as Modi+import Numeric.Netlib.Layout (Order(RowMajor,ColumnMajor))++import Data.Tuple.HT (swap)+++transposeFromOrder :: Order -> Char+transposeFromOrder RowMajor = 'T'+transposeFromOrder ColumnMajor = 'N'++swapOnRowMajor :: Order -> (a,a) -> (a,a)+swapOnRowMajor order =+ case order of+ RowMajor -> swap+ ColumnMajor -> id++sideSwapFromOrder :: Order -> (a,a) -> (Char, (a,a))+sideSwapFromOrder order (m0,n0) =+ let ((side,m), (_,n)) = swapOnRowMajor order (('L', m0), ('R', n0))+ in (side,(m,n))+++conjugatedOnRowMajor :: Order -> Modi.Conjugation+conjugatedOnRowMajor RowMajor = Modi.Conjugated+conjugatedOnRowMajor ColumnMajor = Modi.NonConjugated+++uploFromOrder :: Order -> Char+uploFromOrder RowMajor = 'L'+uploFromOrder ColumnMajor = 'U'
src/Numeric/LAPACK/Matrix/Layout/Private.hs view
@@ -5,12 +5,16 @@ {-# LANGUAGE GADTs #-} module Numeric.LAPACK.Matrix.Layout.Private ( module Numeric.LAPACK.Matrix.Layout.Private,- module Numeric.BLAS.Matrix.Layout,+ module Numeric.LAPACK.Matrix.Layout.Basic,+ Order(..), flipOrder, ) where import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import Numeric.LAPACK.Matrix.Extent.Private (Extent)-import Numeric.BLAS.Matrix.Layout (Order(..), flipOrder, transposeFromOrder)+import Numeric.LAPACK.Matrix.Layout.Basic+ (transposeFromOrder, swapOnRowMajor, uploFromOrder,+ sideSwapFromOrder, conjugatedOnRowMajor)+import Numeric.Netlib.Layout (Order(..), flipOrder) import qualified Type.Data.Num.Unary.Literal as TypeNum import qualified Type.Data.Num.Unary.Proof as Proof@@ -30,18 +34,6 @@ import Data.Bool.HT (if') -swapOnRowMajor :: Order -> (a,a) -> (a,a)-swapOnRowMajor order =- case order of- RowMajor -> swap- ColumnMajor -> id--sideSwapFromOrder :: Order -> (a,a) -> (Char, (a,a))-sideSwapFromOrder order (m0,n0) =- let ((side,m), (_,n)) = swapOnRowMajor order (('L', m0), ('R', n0))- in (side,(m,n))-- mapChecked :: (Shape.C sha, Shape.C shb) => String -> (sha -> shb) -> sha -> shb@@ -131,7 +123,10 @@ Full meas vert horiz height width -> width fullWidth = Extent.width . fullExtent +squareSize :: Square sh -> sh+squareSize = Extent.squareSize . fullExtent + fullIndices :: (Extent.Measure meas, Extent.C vert, Extent.C horiz, Shape.Indexed a, Shape.Indexed b) =>@@ -455,10 +450,6 @@ hermitianFromSymmetric :: SymmetricP pack size -> HermitianP pack size hermitianFromSymmetric (Mosaic pack SimpleMirror upper order size) = Mosaic pack ConjugateMirror upper order size--uploFromOrder :: Order -> Char-uploFromOrder RowMajor = 'L'-uploFromOrder ColumnMajor = 'U'
src/Numeric/LAPACK/Matrix/ModifierTyped.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE GADTs #-} module Numeric.LAPACK.Matrix.ModifierTyped where -import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import Numeric.LAPACK.Matrix.Extent.Private (Extent, Small)
src/Numeric/LAPACK/Matrix/Mosaic/Private.hs view
@@ -9,7 +9,7 @@ import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor,ColumnMajor), flipOrder, uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated))+import Numeric.Netlib.Modifier (Conjugation(NonConjugated)) import Numeric.LAPACK.Matrix.Private (Full) import Numeric.LAPACK.Scalar (zero) import Numeric.LAPACK.Shape.Private (Unchecked(Unchecked))
src/Numeric/LAPACK/Matrix/Multiply.hs view
@@ -14,7 +14,7 @@ import qualified Numeric.LAPACK.Matrix.Class as MatrixClass import qualified Numeric.LAPACK.Matrix.Type.Private as Matrix import qualified Numeric.LAPACK.Matrix.Basic as FullBasic-import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Matrix.Shape.Omni as Omni import qualified Numeric.LAPACK.Matrix.Shape as MatrixShape import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout@@ -24,7 +24,7 @@ import qualified Numeric.LAPACK.Vector as Vector import Numeric.LAPACK.Matrix.Array.Private (Full) import Numeric.LAPACK.Matrix.Type.Private (Matrix, scaleWithCheck)-import Numeric.BLAS.Matrix.Modifier (Transposition(NonTransposed,Transposed))+import Numeric.Netlib.Modifier (Transposition(NonTransposed,Transposed)) import Numeric.LAPACK.Vector (Vector) import qualified Numeric.Netlib.Class as Class
src/Numeric/LAPACK/Matrix/Permutation.hs view
@@ -20,7 +20,7 @@ import qualified Numeric.LAPACK.Matrix.Shape.Omni as Omni import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent-import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Permutation.Private as Plain import qualified Numeric.LAPACK.Permutation as Perm import Numeric.LAPACK.Matrix.Type.Private (Matrix(Permutation))
src/Numeric/LAPACK/Matrix/Plain.hs view
@@ -31,6 +31,8 @@ Basic.takeTop, Basic.takeBottom, Basic.takeLeft, Basic.takeRight, takeRowArray, takeColumnArray,+ takeRowSet, takeColumnSet,+ takeRowIntSet, takeColumnIntSet, swapRows, swapColumns, reverseRows, reverseColumns, fromRowMajor, toRowMajor,@@ -54,11 +56,11 @@ import qualified Numeric.LAPACK.Matrix.Square.Basic as Square import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import qualified Numeric.LAPACK.Matrix.Basic as Basic-import qualified Numeric.LAPACK.Matrix.RowMajor as RowMajor import qualified Numeric.LAPACK.Matrix.Private as Matrix import qualified Numeric.LAPACK.Vector.Private as VectorPriv import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.Shape as ExtShape+import qualified Numeric.BLAS.Matrix.RowMajor as RowMajor import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor), transposeFromOrder) import Numeric.LAPACK.Matrix.Basic@@ -66,7 +68,7 @@ import Numeric.LAPACK.Matrix.Private (Full, Tall, Wide, General, ShapeInt, shapeInt, mapExtent, fromFull, generalizeTall, generalizeWide)-import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated,Conjugated))+import Numeric.Netlib.Modifier (Conjugation(NonConjugated,Conjugated)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (zero, one) import Numeric.LAPACK.Private (pointerSeq, fill, copySubMatrix, copyBlock)@@ -96,6 +98,10 @@ import qualified Data.NonEmpty.Mixed as NonEmptyM import qualified Data.NonEmpty as NonEmpty import qualified Data.Foldable as Fold+import qualified Data.IntSet as IntSet+import qualified Data.Set as Set+import Data.IntSet (IntSet)+import Data.Set (Set) import Data.Foldable (forM_) import Data.Maybe (listToMaybe) import Data.Bool.HT (if')@@ -393,19 +399,25 @@ For scattered rows in column major order the function has quite ugly memory access patterns. -}-takeRowArray ::- (Shape.Indexed height, Shape.C width, Shape.C sh, Class.Floating a) =>- BoxedArray.Array sh (Shape.Index height) ->- General height width a -> General sh width a-takeRowArray ixs (Array (Layout.Full order extent) a) =+takeSelectedRows ::+ (Shape.Indexed heightA, Shape.Index heightA ~ ix,+ Shape.C heightB, Shape.C width, Class.Floating a,+ Extent.C vert, Extent.C horiz) =>+ (Extent.Extent Extent.Size vert horiz heightA width ->+ Extent.Extent Extent.Size vert horiz heightB width) ->+ [ix] ->+ Full Extent.Size vert horiz heightA width a ->+ Full Extent.Size vert horiz heightB width a+takeSelectedRows makeExtent ixs (Array (Layout.Full order extent) a) = let (heightA, width) = Extent.dimensions extent- heightB = BoxedArray.shape ixs- offsets = map (Shape.offset heightA) $ BoxedArray.toList ixs+ newExtent = makeExtent extent+ heightB = Extent.height newExtent+ offsets = map (Shape.offset heightA) ixs startBlocks blocks = zip (scanl (+) 0 $ map fst blocks) blocks ma = Shape.size heightA mb = Shape.size heightB n = Shape.size width- in Array.unsafeCreate (Layout.general order heightB width) $ \bPtr ->+ in Array.unsafeCreate (Layout.Full order newExtent) $ \bPtr -> withForeignPtr a $ \aPtr -> case order of RowMajor -> do@@ -439,14 +451,66 @@ NonEmptyM.groupBy (\i j -> i+1 == j) +takeRowArray ::+ (Shape.Indexed heightA, Shape.C width, Shape.C heightB, Class.Floating a) =>+ BoxedArray.Array heightB (Shape.Index heightA) ->+ General heightA width a -> General heightB width a+takeRowArray ixs =+ takeSelectedRows+ (\extent -> Extent.general (BoxedArray.shape ixs) (Extent.width extent))+ (BoxedArray.toList ixs)++takeRowSet ::+ (Extent.C vert,+ Shape.Indexed height, Shape.Index height ~ ix, Ord ix,+ Shape.C width, Class.Floating a) =>+ Set ix ->+ Full Extent.Size vert Extent.Big height width a ->+ Full Extent.Size vert Extent.Big (Set ix) width a+takeRowSet ixs =+ takeSelectedRows+ (Extent.reduceWideHeight ixs)+ (Set.toAscList ixs)++takeRowIntSet ::+ (Extent.C vert,+ Shape.Indexed height, Shape.Index height ~ Int,+ Shape.C width, Class.Floating a) =>+ IntSet ->+ Full Extent.Size vert Extent.Big height width a ->+ Full Extent.Size vert Extent.Big IntSet width a+takeRowIntSet ixs =+ takeSelectedRows+ (Extent.reduceWideHeight ixs)+ (IntSet.toAscList ixs)++ takeColumnArray :: (Shape.C height, Shape.Indexed width, Shape.C sh, Class.Floating a) => BoxedArray.Array sh (Shape.Index width) -> General height width a -> General height sh a takeColumnArray ixs = transpose . takeRowArray ixs . transpose +takeColumnSet ::+ (Extent.C horiz,+ Shape.Indexed width, Shape.Index width ~ ix, Ord ix,+ Shape.C height, Class.Floating a) =>+ Set ix ->+ Full Extent.Size Extent.Big horiz height width a ->+ Full Extent.Size Extent.Big horiz height (Set ix) a+takeColumnSet ixs = transpose . takeRowSet ixs . transpose +takeColumnIntSet ::+ (Extent.C horiz,+ Shape.Indexed width, Shape.Index width ~ Int,+ Shape.C height, Class.Floating a) =>+ IntSet ->+ Full Extent.Size Extent.Big horiz height width a ->+ Full Extent.Size Extent.Big horiz height IntSet a+takeColumnIntSet ixs = transpose . takeRowIntSet ixs . transpose ++ fromRowMajor :: (Shape.C height, Shape.C width, Storable a) => Array (height,width) a -> General height width a@@ -600,9 +664,12 @@ shc = Layout.Full orderB $ Extent.kronecker (Layout.fullExtent $ Array.shape a) extentB+ at = Basic.transposableFromFull a in either- (Array.reshape shc . RowMajor.kronecker a)- (Array.reshape shc . RowMajor.kronecker (transpose a)) $+ (Array.reshape shc . RowMajor.kroneckerLeftTransposable at)+ (Array.reshape shc .+ RowMajor.kroneckerLeftTransposable+ (RowMajor.transposeTransposable at)) $ Matrix.revealOrder b
− src/Numeric/LAPACK/Matrix/RowMajor.hs
@@ -1,80 +0,0 @@-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}-module Numeric.LAPACK.Matrix.RowMajor (- Matrix,- Matrix.takeRow,- Matrix.takeColumn,- Matrix.fromRows,- Matrix.tensorProduct,- Matrix.decomplex,- Matrix.recomplex,- Matrix.scaleRows,- Matrix.scaleColumns,- kronecker,- ) where--import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout-import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent-import Numeric.LAPACK.Matrix.Private (Full)--import qualified Numeric.BLAS.Matrix.RowMajor as Matrix-import Numeric.BLAS.Matrix.RowMajor (Matrix)-import Numeric.BLAS.Matrix.Layout (Order(RowMajor, ColumnMajor))-import Numeric.BLAS.Scalar (zero, one)--import qualified Numeric.BLAS.FFI.Generic as BlasGen-import qualified Numeric.Netlib.Utility as Call-import qualified Numeric.Netlib.Class as Class--import Foreign.Marshal.Array (advancePtr)-import Foreign.ForeignPtr (withForeignPtr)--import Control.Monad.Trans.Cont (ContT(ContT), evalContT)-import Control.Monad.IO.Class (liftIO)-import Control.Applicative (liftA2)--import qualified Data.Array.Comfort.Storable.Unchecked as Array-import qualified Data.Array.Comfort.Shape as Shape-import Data.Array.Comfort.Storable.Unchecked (Array(Array))--import Data.Foldable (forM_)---kronecker ::- (Extent.Measure meas, Extent.C vert, Extent.C horiz,- Shape.C heightA, Shape.C widthA, Shape.C heightB, Shape.C widthB,- Class.Floating a) =>- Full meas vert horiz heightA widthA a ->- Matrix heightB widthB a ->- Matrix (heightA,heightB) (widthA,widthB) a-kronecker- (Array (Layout.Full orderA extentA) a) (Array (heightB,widthB) b) =- let (heightA,widthA) = Extent.dimensions extentA- in Array.unsafeCreate ((heightA,heightB), (widthA,widthB)) $ \cPtr ->- evalContT $ do- let (ma,na) = (Shape.size heightA, Shape.size widthA)- let (mb,nb) = (Shape.size heightB, Shape.size widthB)- let (lda,istep) =- case orderA of- RowMajor -> (1,na)- ColumnMajor -> (ma,1)- transaPtr <- Call.char 'N'- transbPtr <- Call.char 'T'- mPtr <- Call.cint na- nPtr <- Call.cint nb- kPtr <- Call.cint 1- alphaPtr <- Call.number one- aPtr <- ContT $ withForeignPtr a- ldaPtr <- Call.leadingDim lda- bPtr <- ContT $ withForeignPtr b- ldbPtr <- Call.leadingDim 1- betaPtr <- Call.number zero- ldcPtr <- Call.leadingDim nb- liftIO $- forM_ (liftA2 (,) (take ma [0..]) (take mb [0..])) $ \(i,j) -> do- let aiPtr = advancePtr aPtr (istep*i)- let bjPtr = advancePtr bPtr (nb*j)- let cijPtr = advancePtr cPtr (na*nb*(j+mb*i))- BlasGen.gemm- transbPtr transaPtr nPtr mPtr kPtr alphaPtr- bjPtr ldbPtr aiPtr ldaPtr betaPtr cijPtr ldcPtr
src/Numeric/LAPACK/Matrix/Square/Basic.hs view
@@ -41,8 +41,8 @@ import qualified Numeric.LAPACK.Matrix.Private as Matrix import qualified Numeric.LAPACK.Vector as Vector import qualified Numeric.LAPACK.Private as Private-import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor, ColumnMajor), swapOnRowMajor)+import qualified Numeric.BLAS.Matrix.RowMajor as RowMajor+import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor)) import Numeric.LAPACK.Matrix.Private (General, argGeneral, LiberalSquare, Square, argSquare, Full, mapExtent, ShapeInt, shapeInt)@@ -71,6 +71,7 @@ import Control.Monad.IO.Class (liftIO) import Data.Function.HT (powerAssociative)+import Data.Tuple.HT (double) mapSize :: (sh0 -> sh1) -> Square sh0 a -> Square sh1 a@@ -145,7 +146,7 @@ identityFromHeight = argGeneral $ \order height _ _ -> identityOrder order height -identityOrder, _identityOrder ::+identityOrder :: (Shape.C sh, Class.Floating a) => Order -> sh -> Square sh a identityOrder order sh = Array.unsafeCreate (Layout.square order sh) $ \aPtr ->@@ -156,22 +157,6 @@ betaPtr <- Call.number one liftIO $ LapackGen.laset uploPtr nPtr nPtr alphaPtr betaPtr aPtr nPtr -_identityOrder order sh =- Array.unsafeCreateWithSize (Layout.square order sh) $ \blockSize yPtr ->- evalContT $ do- nPtr <- Call.alloca- xPtr <- Call.number zero- incxPtr <- Call.cint 0- incyPtr <- Call.cint 1- liftIO $ do- pokeCInt nPtr blockSize- BlasGen.copy nPtr xPtr incxPtr yPtr incyPtr- let n = fromIntegral $ Shape.size sh- poke nPtr n- poke xPtr one- poke incyPtr (n+1)- BlasGen.copy nPtr xPtr incxPtr yPtr incyPtr- diagonal :: (Shape.C sh, Class.Floating a) => Vector sh a -> Square sh a diagonal (Array sh x) = Array.unsafeCreateWithSize (Layout.square ColumnMajor sh) $@@ -252,10 +237,11 @@ multiplyCommutativeUnchecked :: (Shape.C sh, Class.Floating a) => Square sh a -> Square sh a -> Square sh a-multiplyCommutativeUnchecked- (Array shape@(Layout.Full order extent) a)- (Array _ b) =- Array.unsafeCreate shape $ \cPtr ->- let n = Shape.size $ Extent.height extent- (at,bt) = swapOnRowMajor order (a,b)- in Private.multiplyMatrix ColumnMajor ColumnMajor n n n at bt cPtr+multiplyCommutativeUnchecked a b =+ Array.reshape (Array.shape b) $+ RowMajor.multiply+ (array2FromSquare $ Basic.uncheck a)+ (array2FromSquare $ Basic.uncheck b)++array2FromSquare :: Square sh a -> RowMajor.Square sh a+array2FromSquare = Array.mapShape (double . Layout.squareSize)
src/Numeric/LAPACK/Matrix/Symmetric/Basic.hs view
@@ -18,7 +18,7 @@ (withPacking, noLabel, applyFuncPair, triArg) import Numeric.LAPACK.Matrix.Layout.Private (MirrorSingleton(SimpleMirror), Order, uploFromOrder)-import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated))+import Numeric.Netlib.Modifier (Conjugation(NonConjugated)) import Numeric.LAPACK.Vector (Vector) import Numeric.LAPACK.Scalar (zero) import Numeric.LAPACK.Private (fill)
src/Numeric/LAPACK/Matrix/Symmetric/Unified.hs view
@@ -20,9 +20,10 @@ noLabel, label, applyFuncPair, triArg, Labelled(Labelled)) import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor,ColumnMajor), uploFromOrder, uploOrder)-import Numeric.BLAS.Matrix.Modifier- (Conjugation(NonConjugated, Conjugated), conjugatedOnRowMajor,+ (Order(RowMajor,ColumnMajor), uploFromOrder, uploOrder,+ conjugatedOnRowMajor)+import Numeric.Netlib.Modifier+ (Conjugation(NonConjugated, Conjugated), Transposition(NonTransposed, Transposed), transposeOrder) import Numeric.LAPACK.Matrix.Private (Full, General, Square) import Numeric.LAPACK.Linear.Private (solver, withDeterminantInfo, diagonalMsg)
src/Numeric/LAPACK/Matrix/Type/Private.hs view
@@ -191,7 +191,7 @@ instance Format Permutation where type FormatExtra Permutation extra = ()- format _fmt (Permutation perm) = Perm.format perm+ format cfg (Permutation perm) = Perm.format cfg perm {- |
src/Numeric/LAPACK/Orthogonal/Householder.hs view
@@ -31,12 +31,12 @@ import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix import qualified Numeric.LAPACK.Matrix.Extent.Strict as ExtentStrict import qualified Numeric.LAPACK.Matrix.Extent as Extent-import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Shape as ExtShape import Numeric.LAPACK.Orthogonal.Plain (Householder) import Numeric.LAPACK.Matrix.Array.Mosaic (Upper) import Numeric.LAPACK.Matrix.Array.Private (Full, Square)-import Numeric.BLAS.Matrix.Modifier (Transposition, Conjugation)+import Numeric.Netlib.Modifier (Transposition, Conjugation) import qualified Numeric.Netlib.Class as Class
src/Numeric/LAPACK/Orthogonal/Plain.hs view
@@ -29,7 +29,7 @@ import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor), sideSwapFromOrder) import Numeric.LAPACK.Matrix.Extent.Private (Extent)-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition(NonTransposed, Transposed), Conjugation(NonConjugated, Conjugated)) import Numeric.LAPACK.Matrix.Private (Full)
src/Numeric/LAPACK/Permutation.hs view
@@ -18,7 +18,7 @@ import qualified Numeric.LAPACK.Permutation.Private as Plain import qualified Numeric.LAPACK.Matrix.Array.Private as ArrMatrix-import qualified Numeric.BLAS.Matrix.Modifier as Mod+import qualified Numeric.Netlib.Modifier as Mod import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import Numeric.LAPACK.Permutation.Private (Permutation) import Numeric.LAPACK.Matrix.Array.Private (Full, Square)
src/Numeric/LAPACK/Permutation/Private.hs view
@@ -5,9 +5,10 @@ import qualified Numeric.LAPACK.Matrix.Layout.Private as Layout import qualified Numeric.LAPACK.Matrix.Extent.Private as Extent import qualified Numeric.LAPACK.Output as Output+import Numeric.LAPACK.Matrix.Plain.Format (Config(configEmpty)) import Numeric.LAPACK.Output (Output, formatAligned) import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor))-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition(NonTransposed,Transposed), Inversion(NonInverted,Inverted)) import Numeric.LAPACK.Matrix.Private (Full, Square)@@ -68,10 +69,10 @@ newtype Permutation sh = Permutation (Vector (Shape sh) (Element sh)) deriving (Eq, Show) -format :: (Shape.C sh, Output out) => Permutation sh -> out-format (Permutation perm) =+format :: (Shape.C sh, Output out) => Config -> Permutation sh -> out+format cfg (Permutation perm) = let n = Shape.size $ Array.shape perm- s0 = Output.text "."+ s0 = Output.text $ configEmpty cfg s1 = Output.text "1" in formatAligned $ map (\k -> map Identity $ replicate (k-1) s0 ++ s1 : replicate (n-k) s0) $
src/Numeric/LAPACK/Private.hs view
@@ -1,8 +1,7 @@ {-# LANGUAGE TypeFamilies #-} module Numeric.LAPACK.Private where -import Numeric.LAPACK.Matrix.Layout.Private- (Order(RowMajor, ColumnMajor), transposeFromOrder)+import Numeric.LAPACK.Matrix.Layout.Private (Order(RowMajor, ColumnMajor)) import Numeric.LAPACK.Wrapper (Flip(Flip, getFlip)) import qualified Numeric.LAPACK.FFI.Generic as LapackGen@@ -411,35 +410,6 @@ when (n == 0 && isZero beta) $ Marshal.with 0 $ \incbPtr -> BlasGen.copy mtPtr betaPtr incbPtr yPtr incyPtr---multiplyMatrix ::- (Class.Floating a) =>- Order -> Order -> Int -> Int -> Int ->- ForeignPtr a -> ForeignPtr a -> Ptr a -> IO ()-multiplyMatrix orderA orderB m k n a b cPtr = evalContT $ do- let lda = case orderA of RowMajor -> k; ColumnMajor -> m- let ldb = case orderB of RowMajor -> n; ColumnMajor -> k- let ldc = m- if k==0- then liftIO $ fill zero (m*n) cPtr- else do- transaPtr <- Call.char $ transposeFromOrder orderA- transbPtr <- Call.char $ transposeFromOrder orderB- mPtr <- Call.cint m- nPtr <- Call.cint n- kPtr <- Call.cint k- alphaPtr <- Call.number one- aPtr <- ContT $ withForeignPtr a- ldaPtr <- Call.leadingDim lda- bPtr <- ContT $ withForeignPtr b- ldbPtr <- Call.leadingDim ldb- betaPtr <- Call.number zero- ldcPtr <- Call.leadingDim ldc- liftIO $- BlasGen.gemm- transaPtr transbPtr mPtr nPtr kPtr alphaPtr aPtr ldaPtr- bPtr ldbPtr betaPtr cPtr ldcPtr
src/Numeric/LAPACK/Split.hs view
@@ -14,7 +14,7 @@ swapOnRowMajor, sideSwapFromOrder, Triangle, uploFromOrder, flipOrder) import Numeric.LAPACK.Matrix.Extent.Private (Extent)-import Numeric.BLAS.Matrix.Modifier+import Numeric.Netlib.Modifier (Transposition, transposeOrder, Conjugation(NonConjugated, Conjugated)) import Numeric.LAPACK.Matrix.Private (Full)
test-module.list view
@@ -1,3 +1,3 @@-Numeric.LAPACK.Permutation.Private-Numeric.LAPACK.Example.DividedDifference Numeric.LAPACK.Example.EconomicAllocation+Numeric.LAPACK.Example.DividedDifference+Numeric.LAPACK.Permutation.Private
test/DocTest/Main.hs view
@@ -1,14 +1,14 @@ -- Do not edit! Automatically created with doctest-extract. module DocTest.Main where -import qualified DocTest.Numeric.LAPACK.Permutation.Private-import qualified DocTest.Numeric.LAPACK.Example.DividedDifference import qualified DocTest.Numeric.LAPACK.Example.EconomicAllocation+import qualified DocTest.Numeric.LAPACK.Example.DividedDifference+import qualified DocTest.Numeric.LAPACK.Permutation.Private import qualified Test.DocTest.Driver as DocTest main :: DocTest.T () main = do- DocTest.Numeric.LAPACK.Permutation.Private.test- DocTest.Numeric.LAPACK.Example.DividedDifference.test DocTest.Numeric.LAPACK.Example.EconomicAllocation.test+ DocTest.Numeric.LAPACK.Example.DividedDifference.test+ DocTest.Numeric.LAPACK.Permutation.Private.test
test/DocTest/Numeric/LAPACK/Permutation/Private.hs view
@@ -1,11 +1,11 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/LAPACK/Permutation/Private.hs-{-# LINE 48 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+{-# LINE 49 "src/Numeric/LAPACK/Permutation/Private.hs" #-} module DocTest.Numeric.LAPACK.Permutation.Private where import qualified Test.DocTest.Driver as DocTest -{-# LINE 49 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+{-# LINE 50 "src/Numeric/LAPACK/Permutation/Private.hs" #-} import qualified Test.QuickCheck as QC import Test.Permutation (genPerm, genPivots) @@ -25,21 +25,21 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:110: "-{-# LINE 110 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+ DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:111: "+{-# LINE 111 "src/Numeric/LAPACK/Permutation/Private.hs" #-} DocTest.property(-{-# LINE 110 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+{-# LINE 111 "src/Numeric/LAPACK/Permutation/Private.hs" #-} QC.forAll QC.arbitraryBoundedEnum $ \inv -> QC.forAll (QC.arbitrary >>= genPivots) $ \xs -> xs == Perm.toPivots inv (Perm.fromPivots inv xs) )- DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:193: "-{-# LINE 193 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+ DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:194: "+{-# LINE 194 "src/Numeric/LAPACK/Permutation/Private.hs" #-} DocTest.property(-{-# LINE 193 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+{-# LINE 194 "src/Numeric/LAPACK/Permutation/Private.hs" #-} QC.forAll genPerm2 $ \(p0,p1) -> determinant (multiply p0 p1) == determinant p0 <> determinant p1 )- DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:222: "-{-# LINE 222 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+ DocTest.printPrefix "Numeric.LAPACK.Permutation.Private:223: "+{-# LINE 223 "src/Numeric/LAPACK/Permutation/Private.hs" #-} DocTest.property(-{-# LINE 222 "src/Numeric/LAPACK/Permutation/Private.hs" #-}+{-# LINE 223 "src/Numeric/LAPACK/Permutation/Private.hs" #-} QC.forAll genPerm2 $ \(p0,p1) -> transpose (multiply p0 p1) == multiply (transpose p1) (transpose p0) )