diff options
Diffstat (limited to 'packages/base')
-rw-r--r-- | packages/base/src/Data/Packed/Internal/Numeric.hs | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/packages/base/src/Data/Packed/Internal/Numeric.hs b/packages/base/src/Data/Packed/Internal/Numeric.hs index f1b4898..354863f 100644 --- a/packages/base/src/Data/Packed/Internal/Numeric.hs +++ b/packages/base/src/Data/Packed/Internal/Numeric.hs | |||
@@ -117,6 +117,7 @@ m ¿¿ ec = trans (trans m ?? ec) | |||
117 | -- | Basic element-by-element functions for numeric containers | 117 | -- | Basic element-by-element functions for numeric containers |
118 | class Element e => SContainer c e | 118 | class Element e => SContainer c e |
119 | where | 119 | where |
120 | conj' :: c e -> c e | ||
120 | size' :: c e -> IndexOf c | 121 | size' :: c e -> IndexOf c |
121 | scalar' :: e -> c e | 122 | scalar' :: e -> c e |
122 | scale' :: e -> c e -> c e | 123 | scale' :: e -> c e -> c e |
@@ -156,9 +157,8 @@ class Element e => SContainer c e | |||
156 | 157 | ||
157 | 158 | ||
158 | -- | Basic element-by-element functions for numeric containers | 159 | -- | Basic element-by-element functions for numeric containers |
159 | class (Complexable c, Fractional e, SContainer c e) => Container c e | 160 | class (Fractional e, SContainer c e) => Container c e |
160 | where | 161 | where |
161 | conj' :: c e -> c e | ||
162 | -- | scale the element by element reciprocal of the object: | 162 | -- | scale the element by element reciprocal of the object: |
163 | -- | 163 | -- |
164 | -- @scaleRecip 2 (fromList [5,i]) == 2 |> [0.4 :+ 0.0,0.0 :+ (-2.0)]@ | 164 | -- @scaleRecip 2 (fromList [5,i]) == 2 |> [0.4 :+ 0.0,0.0 :+ (-2.0)]@ |
@@ -174,6 +174,7 @@ class (Complexable c, Fractional e, SContainer c e) => Container c e | |||
174 | 174 | ||
175 | instance SContainer Vector CInt | 175 | instance SContainer Vector CInt |
176 | where | 176 | where |
177 | conj' = id | ||
177 | size' = dim | 178 | size' = dim |
178 | -- scale' = vectorMapValF Scale | 179 | -- scale' = vectorMapValF Scale |
179 | -- addConstant = vectorMapValF AddConstant | 180 | -- addConstant = vectorMapValF AddConstant |
@@ -201,6 +202,7 @@ instance SContainer Vector CInt | |||
201 | 202 | ||
202 | instance SContainer Vector Float | 203 | instance SContainer Vector Float |
203 | where | 204 | where |
205 | conj' = id | ||
204 | size' = dim | 206 | size' = dim |
205 | scale' = vectorMapValF Scale | 207 | scale' = vectorMapValF Scale |
206 | addConstant = vectorMapValF AddConstant | 208 | addConstant = vectorMapValF AddConstant |
@@ -230,11 +232,12 @@ instance Container Vector Float | |||
230 | scaleRecip = vectorMapValF Recip | 232 | scaleRecip = vectorMapValF Recip |
231 | divide = vectorZipF Div | 233 | divide = vectorZipF Div |
232 | arctan2' = vectorZipF ATan2 | 234 | arctan2' = vectorZipF ATan2 |
233 | conj' = id | 235 | |
234 | 236 | ||
235 | 237 | ||
236 | instance SContainer Vector Double | 238 | instance SContainer Vector Double |
237 | where | 239 | where |
240 | conj' = id | ||
238 | size' = dim | 241 | size' = dim |
239 | scale' = vectorMapValR Scale | 242 | scale' = vectorMapValR Scale |
240 | addConstant = vectorMapValR AddConstant | 243 | addConstant = vectorMapValR AddConstant |
@@ -264,10 +267,11 @@ instance Container Vector Double | |||
264 | scaleRecip = vectorMapValR Recip | 267 | scaleRecip = vectorMapValR Recip |
265 | divide = vectorZipR Div | 268 | divide = vectorZipR Div |
266 | arctan2' = vectorZipR ATan2 | 269 | arctan2' = vectorZipR ATan2 |
267 | conj' = id | 270 | |
268 | 271 | ||
269 | instance SContainer Vector (Complex Double) | 272 | instance SContainer Vector (Complex Double) |
270 | where | 273 | where |
274 | conj' = conjugateC | ||
271 | size' = dim | 275 | size' = dim |
272 | scale' = vectorMapValC Scale | 276 | scale' = vectorMapValC Scale |
273 | addConstant = vectorMapValC AddConstant | 277 | addConstant = vectorMapValC AddConstant |
@@ -298,11 +302,10 @@ instance Container Vector (Complex Double) | |||
298 | scaleRecip = vectorMapValC Recip | 302 | scaleRecip = vectorMapValC Recip |
299 | divide = vectorZipC Div | 303 | divide = vectorZipC Div |
300 | arctan2' = vectorZipC ATan2 | 304 | arctan2' = vectorZipC ATan2 |
301 | conj' = conjugateC | ||
302 | |||
303 | 305 | ||
304 | instance SContainer Vector (Complex Float) | 306 | instance SContainer Vector (Complex Float) |
305 | where | 307 | where |
308 | conj' = conjugateQ | ||
306 | size' = dim | 309 | size' = dim |
307 | scale' = vectorMapValQ Scale | 310 | scale' = vectorMapValQ Scale |
308 | addConstant = vectorMapValQ AddConstant | 311 | addConstant = vectorMapValQ AddConstant |
@@ -332,13 +335,12 @@ instance Container Vector (Complex Float) | |||
332 | scaleRecip = vectorMapValQ Recip | 335 | scaleRecip = vectorMapValQ Recip |
333 | divide = vectorZipQ Div | 336 | divide = vectorZipQ Div |
334 | arctan2' = vectorZipQ ATan2 | 337 | arctan2' = vectorZipQ ATan2 |
335 | conj' = conjugateQ | ||
336 | |||
337 | 338 | ||
338 | --------------------------------------------------------------- | 339 | --------------------------------------------------------------- |
339 | 340 | ||
340 | instance (Num a, Element a, SContainer Vector a) => SContainer Matrix a | 341 | instance (Num a, Element a, SContainer Vector a) => SContainer Matrix a |
341 | where | 342 | where |
343 | conj' = liftMatrix conj' | ||
342 | size' = size | 344 | size' = size |
343 | scale' x = liftMatrix (scale' x) | 345 | scale' x = liftMatrix (scale' x) |
344 | addConstant x = liftMatrix (addConstant x) | 346 | addConstant x = liftMatrix (addConstant x) |
@@ -371,7 +373,6 @@ instance (Fractional a, Container Vector a) => Container Matrix a | |||
371 | scaleRecip x = liftMatrix (scaleRecip x) | 373 | scaleRecip x = liftMatrix (scaleRecip x) |
372 | divide = liftMatrix2 divide | 374 | divide = liftMatrix2 divide |
373 | arctan2' = liftMatrix2 arctan2' | 375 | arctan2' = liftMatrix2 arctan2' |
374 | conj' = liftMatrix conj' | ||
375 | 376 | ||
376 | 377 | ||
377 | emptyErrorV msg f v = | 378 | emptyErrorV msg f v = |
@@ -655,12 +656,12 @@ kronecker a b = fromBlocks | |||
655 | 656 | ||
656 | 657 | ||
657 | class Convert t where | 658 | class Convert t where |
658 | real :: Container c t => c (RealOf t) -> c t | 659 | real :: Complexable c => c (RealOf t) -> c t |
659 | complex :: Container c t => c t -> c (ComplexOf t) | 660 | complex :: Complexable c => c t -> c (ComplexOf t) |
660 | single :: Container c t => c t -> c (SingleOf t) | 661 | single :: Complexable c => c t -> c (SingleOf t) |
661 | double :: Container c t => c t -> c (DoubleOf t) | 662 | double :: Complexable c => c t -> c (DoubleOf t) |
662 | toComplex :: (Container c t, RealElement t) => (c t, c t) -> c (Complex t) | 663 | toComplex :: (Complexable c, RealElement t) => (c t, c t) -> c (Complex t) |
663 | fromComplex :: (Container c t, RealElement t) => c (Complex t) -> (c t, c t) | 664 | fromComplex :: (Complexable c, RealElement t) => c (Complex t) -> (c t, c t) |
664 | 665 | ||
665 | 666 | ||
666 | instance Convert Double where | 667 | instance Convert Double where |
@@ -743,7 +744,7 @@ buildV n f = fromList [f k | k <- ks] | |||
743 | 744 | ||
744 | -------------------------------------------------------- | 745 | -------------------------------------------------------- |
745 | -- | conjugate transpose | 746 | -- | conjugate transpose |
746 | ctrans :: (Container Vector e, Element e) => Matrix e -> Matrix e | 747 | ctrans :: (SContainer Vector e, Element e) => Matrix e -> Matrix e |
747 | ctrans = liftMatrix conj' . trans | 748 | ctrans = liftMatrix conj' . trans |
748 | 749 | ||
749 | -- | Creates a square matrix with a given diagonal. | 750 | -- | Creates a square matrix with a given diagonal. |
@@ -799,7 +800,7 @@ class Transposable m mt | m -> mt, mt -> m | |||
799 | -- | (conjugate) transpose | 800 | -- | (conjugate) transpose |
800 | tr :: m -> mt | 801 | tr :: m -> mt |
801 | 802 | ||
802 | instance (Container Vector t) => Transposable (Matrix t) (Matrix t) | 803 | instance (SContainer Vector t) => Transposable (Matrix t) (Matrix t) |
803 | where | 804 | where |
804 | tr = ctrans | 805 | tr = ctrans |
805 | 806 | ||