diff options
Diffstat (limited to 'packages/base')
-rw-r--r-- | packages/base/src/Internal/Numeric.hs | 23 | ||||
-rw-r--r-- | packages/base/src/Internal/Vectorized.hs | 9 | ||||
-rw-r--r-- | packages/base/src/Numeric/LinearAlgebra/Data.hs | 2 |
3 files changed, 31 insertions, 3 deletions
diff --git a/packages/base/src/Internal/Numeric.hs b/packages/base/src/Internal/Numeric.hs index 85594cc..eb744d1 100644 --- a/packages/base/src/Internal/Numeric.hs +++ b/packages/base/src/Internal/Numeric.hs | |||
@@ -89,7 +89,8 @@ class Element e => Container c e | |||
89 | cmod' :: Integral e => e -> c e -> c e | 89 | cmod' :: Integral e => e -> c e -> c e |
90 | fromInt' :: c I -> c e | 90 | fromInt' :: c I -> c e |
91 | toInt' :: c e -> c I | 91 | toInt' :: c e -> c I |
92 | 92 | fromZ' :: c Z -> c e | |
93 | toZ' :: c e -> c Z | ||
93 | 94 | ||
94 | -------------------------------------------------------------------------- | 95 | -------------------------------------------------------------------------- |
95 | 96 | ||
@@ -128,6 +129,8 @@ instance Container Vector I | |||
128 | | otherwise = error $ "cmod 0 on vector of size "++(show $ dim x) | 129 | | otherwise = error $ "cmod 0 on vector of size "++(show $ dim x) |
129 | fromInt' = id | 130 | fromInt' = id |
130 | toInt' = id | 131 | toInt' = id |
132 | fromZ' = long2intV | ||
133 | toZ' = int2longV | ||
131 | 134 | ||
132 | 135 | ||
133 | instance Container Vector Z | 136 | instance Container Vector Z |
@@ -165,6 +168,8 @@ instance Container Vector Z | |||
165 | | otherwise = error $ "cmod 0 on vector of size "++(show $ dim x) | 168 | | otherwise = error $ "cmod 0 on vector of size "++(show $ dim x) |
166 | fromInt' = int2longV | 169 | fromInt' = int2longV |
167 | toInt' = long2intV | 170 | toInt' = long2intV |
171 | fromZ' = id | ||
172 | toZ' = id | ||
168 | 173 | ||
169 | 174 | ||
170 | 175 | ||
@@ -201,7 +206,8 @@ instance Container Vector Float | |||
201 | cmod' = undefined | 206 | cmod' = undefined |
202 | fromInt' = int2floatV | 207 | fromInt' = int2floatV |
203 | toInt' = float2IntV | 208 | toInt' = float2IntV |
204 | 209 | fromZ' = (single :: Vector R-> Vector Float) . fromZ' | |
210 | toZ' = toZ' . double | ||
205 | 211 | ||
206 | 212 | ||
207 | instance Container Vector Double | 213 | instance Container Vector Double |
@@ -237,6 +243,8 @@ instance Container Vector Double | |||
237 | cmod' = undefined | 243 | cmod' = undefined |
238 | fromInt' = int2DoubleV | 244 | fromInt' = int2DoubleV |
239 | toInt' = double2IntV | 245 | toInt' = double2IntV |
246 | fromZ' = long2DoubleV | ||
247 | toZ' = double2longV | ||
240 | 248 | ||
241 | 249 | ||
242 | instance Container Vector (Complex Double) | 250 | instance Container Vector (Complex Double) |
@@ -272,6 +280,8 @@ instance Container Vector (Complex Double) | |||
272 | cmod' = undefined | 280 | cmod' = undefined |
273 | fromInt' = complex . int2DoubleV | 281 | fromInt' = complex . int2DoubleV |
274 | toInt' = toInt' . fst . fromComplex | 282 | toInt' = toInt' . fst . fromComplex |
283 | fromZ' = complex . long2DoubleV | ||
284 | toZ' = toZ' . fst . fromComplex | ||
275 | 285 | ||
276 | instance Container Vector (Complex Float) | 286 | instance Container Vector (Complex Float) |
277 | where | 287 | where |
@@ -306,6 +316,8 @@ instance Container Vector (Complex Float) | |||
306 | cmod' = undefined | 316 | cmod' = undefined |
307 | fromInt' = complex . int2floatV | 317 | fromInt' = complex . int2floatV |
308 | toInt' = toInt' . fst . fromComplex | 318 | toInt' = toInt' . fst . fromComplex |
319 | fromZ' = complex . single . long2DoubleV | ||
320 | toZ' = toZ' . double . fst . fromComplex | ||
309 | 321 | ||
310 | --------------------------------------------------------------- | 322 | --------------------------------------------------------------- |
311 | 323 | ||
@@ -346,6 +358,8 @@ instance (Num a, Element a, Container Vector a) => Container Matrix a | |||
346 | | otherwise = error $ "cmod 0 on matrix "++shSize x | 358 | | otherwise = error $ "cmod 0 on matrix "++shSize x |
347 | fromInt' = liftMatrix fromInt' | 359 | fromInt' = liftMatrix fromInt' |
348 | toInt' = liftMatrix toInt' | 360 | toInt' = liftMatrix toInt' |
361 | fromZ' = liftMatrix fromZ' | ||
362 | toZ' = liftMatrix toZ' | ||
349 | 363 | ||
350 | 364 | ||
351 | emptyErrorV msg f v = | 365 | emptyErrorV msg f v = |
@@ -399,6 +413,11 @@ fromInt = fromInt' | |||
399 | toInt :: (Container c e) => c e -> c I | 413 | toInt :: (Container c e) => c e -> c I |
400 | toInt = toInt' | 414 | toInt = toInt' |
401 | 415 | ||
416 | fromZ :: (Container c e) => c Z -> c e | ||
417 | fromZ = fromZ' | ||
418 | |||
419 | toZ :: (Container c e) => c e -> c Z | ||
420 | toZ = toZ' | ||
402 | 421 | ||
403 | -- | like 'fmap' (cannot implement instance Functor because of Element class constraint) | 422 | -- | like 'fmap' (cannot implement instance Functor because of Element class constraint) |
404 | cmap :: (Element b, Container c e) => (e -> b) -> c e -> c b | 423 | cmap :: (Element b, Container c e) => (e -> b) -> c e -> c b |
diff --git a/packages/base/src/Internal/Vectorized.hs b/packages/base/src/Internal/Vectorized.hs index b1ad424..ff51494 100644 --- a/packages/base/src/Internal/Vectorized.hs +++ b/packages/base/src/Internal/Vectorized.hs | |||
@@ -408,6 +408,13 @@ double2IntV = tog c_double2int | |||
408 | int2DoubleV :: Vector CInt -> Vector Double | 408 | int2DoubleV :: Vector CInt -> Vector Double |
409 | int2DoubleV = tog c_int2double | 409 | int2DoubleV = tog c_int2double |
410 | 410 | ||
411 | double2longV :: Vector Double -> Vector Z | ||
412 | double2longV = tog c_double2long | ||
413 | |||
414 | long2DoubleV :: Vector Z -> Vector Double | ||
415 | long2DoubleV = tog c_long2double | ||
416 | |||
417 | |||
411 | float2IntV :: Vector Float -> Vector CInt | 418 | float2IntV :: Vector Float -> Vector CInt |
412 | float2IntV = tog c_float2int | 419 | float2IntV = tog c_float2int |
413 | 420 | ||
@@ -430,6 +437,8 @@ foreign import ccall unsafe "float2double" c_float2double :: Float :> Double :> | |||
430 | foreign import ccall unsafe "double2float" c_double2float :: Double :> Float :> Ok | 437 | foreign import ccall unsafe "double2float" c_double2float :: Double :> Float :> Ok |
431 | foreign import ccall unsafe "int2double" c_int2double :: CInt :> Double :> Ok | 438 | foreign import ccall unsafe "int2double" c_int2double :: CInt :> Double :> Ok |
432 | foreign import ccall unsafe "double2int" c_double2int :: Double :> CInt :> Ok | 439 | foreign import ccall unsafe "double2int" c_double2int :: Double :> CInt :> Ok |
440 | foreign import ccall unsafe "long2double" c_long2double :: Z :> Double :> Ok | ||
441 | foreign import ccall unsafe "double2long" c_double2long :: Double :> Z :> Ok | ||
433 | foreign import ccall unsafe "int2float" c_int2float :: CInt :> Float :> Ok | 442 | foreign import ccall unsafe "int2float" c_int2float :: CInt :> Float :> Ok |
434 | foreign import ccall unsafe "float2int" c_float2int :: Float :> CInt :> Ok | 443 | foreign import ccall unsafe "float2int" c_float2int :: Float :> CInt :> Ok |
435 | foreign import ccall unsafe "int2long" c_int2long :: I :> Z :> Ok | 444 | foreign import ccall unsafe "int2long" c_int2long :: I :> Z :> Ok |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Data.hs b/packages/base/src/Numeric/LinearAlgebra/Data.hs index 06485e6..c3e0c1d 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Data.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Data.hs | |||
@@ -82,7 +82,7 @@ module Numeric.LinearAlgebra.Data( | |||
82 | -- * Element conversion | 82 | -- * Element conversion |
83 | Convert(..), | 83 | Convert(..), |
84 | roundVector, | 84 | roundVector, |
85 | fromInt,toInt, | 85 | fromInt,toInt,fromZ,toZ, |
86 | -- * Misc | 86 | -- * Misc |
87 | arctan2, | 87 | arctan2, |
88 | separable, | 88 | separable, |