packages feed

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