easytensor-0.1.0.0: app/Main.hs
{-# LANGUAGE DataKinds #-}
module Main where
--import qualified Numeric.Tensor as T
import Numeric.Commons
-- import Numeric.Vector ((<:>))
-- import qualified Numeric.Vector as V
-- import qualified Numeric.Matrix as M
import Numeric.EasyTensor
import Foreign.Storable
import Foreign.Ptr
import Foreign.Marshal
main :: IO ()
main = do
putStrLn "Hello world!"
print (two + vec2 3 4)
print (two + vec2 3 4 + 5)
print (two <:> two == two <:> x)
print (two <:> two == two <:> two)
print (two <:> x)
print x
print (x < two)
print (fromBytes (toBytes x) + two / 7 + 5)
print ((x <:> two * 3 <:> two) / 4.2 <:> x)
putStrLn "Done pure!"
ptr <- mallocArray 3
poke ptr x
pokeElemOff ptr 1 5
pokeByteOff ptr 16 two
peek ptr >>= print
peekByteOff ptr 8 >>= (print :: Vec2f -> IO ())
peek (plusPtr ptr 8 :: Ptr Vec2f) >>= print
peekElemOff ptr 2 >>= print
peek (plusPtr ptr 16 :: Ptr Vec2f) >>= print
peekByteOff ptr 0 >>= (print :: Vec Float 6 -> IO ())
peekByteOff ptr 4 >>= (print :: Vec Float 3 -> IO ())
putStrLn "Done IO!"
putStrLn "Matrices..."
print $ index 1 2 m1
print m1
putStrLn (show (index 1 1 m1) ++ " " ++ show (index 1 2 m1) )
putStrLn (show (index 2 1 m1) ++ " " ++ show (index 2 2 m1) )
print (indexCol 1 m1)
print (indexCol 2 m1)
print (indexRow 1 m1)
print (indexRow 2 m1)
print (indexRow 3 m1)
-- print (M.indexMat 2 4 m1)
-- print (M.indexCol 4 m1 :: V.Vec2f)
putStrLn "Matrix products"
print y2
putStrLn "EasyTensor"
-- print a
-- print b
-- print c
-- print d
-- print (a %* c)
print (two <:> x <:> 7 / x)
print m32
print m33
-- print x3
-- print v3
-- print (v3 // 4)
-- print (10 \\ 4 :: Tensor Double 1 1)
-- print $ a %* c
-- print $ transpose x3 %* m32
putStrLn "m33"
print m33
putStrLn "determinants"
print (2 * eye :: Tensor Float 5 5)
print $ det (2 * eye :: Tensor Float 5 5)
print m33
print $ det m33
print $ two <:> x
print $ det (two <:> x)
print (x3 <:> (m33 %* x3) <:> (m33 %* x3))
print $ det (x3 <:> (m33 %* x3) <:> (m33 %* x3))
putStrLn "Inverse"
print m33
print (inverse m33)
print $ inverse m33 %* m33
print $ m33 %* inverse m33
print (2 * eye :: Tensor Float 5 5)
print $ inverse (2 * eye :: Tensor Float 5 5)
print $ (2 * eye :: Tensor Float 5 5) * inverse (2 * eye :: Tensor Float 5 5)
print (x3 <:> v3 <:> v3)
print $ inverse (x3 <:> v3 <:> v3)
print $ (x3 <:> v3 <:> v3) %* inverse (x3 <:> v3 <:> v3)
where
two = vec2 2 2.001 :: Vec2f
x = two / vec2 3.2 (-2)
m1 = fromBytes (toBytes (two <:> x <:> 7 / x)) :: Mat Float 3 2
m32 = m1
x2 = 7 :: Vec2f
x3 = 9 :: Vec3f
y2 = m32 %* x2
m33 = m32 <:> 17
v3 = m33 %* x3
-- a = 1 :: Tensor Float 2 2
-- b = 3 :: Tensor Float 1 1
-- c = 4 :: Tensor Float 2 1
-- d = 5 :: Tensor Float 1 2