Commit 1c65bec6 authored by Alexandre Delanoë's avatar Alexandre Delanoë

[FEAT] Distributional, work with David

parent f455b5b4
...@@ -49,56 +49,32 @@ import Data.Array.Accelerate ...@@ -49,56 +49,32 @@ import Data.Array.Accelerate
import Data.Array.Accelerate.Interpreter (run) import Data.Array.Accelerate.Interpreter (run)
import Gargantext.Core.Methods.Matrix.Accelerate.Utils import Gargantext.Core.Methods.Matrix.Accelerate.Utils
import qualified Gargantext.Prelude as P import qualified Gargantext.Prelude as P
-- import Data.Array.Accelerate.LinearAlgebra (identity) TODO
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- * Distributional Distance -- * Distributional Distance
distributional'' :: ( P.Num (Exp a) distributional :: Matrix Int -> Matrix Double
, P.Fractional (Exp a) distributional m' = run z
, P.Ord (Exp a)
, Ord a
)
=> Matrix a -> Matrix a
distributional'' m' = run mi_d_mi
where where
m = use m' m = map fromIntegral $ use m'
n = dim m' n = dim m'
d_m = (.*) (matrixIdentity n) m d_m = (.*) (matrixIdentity n) m
o_d_m = (#*#) (matrixOne n) d_m o_d_m = (#*#) (matrixOne n) d_m
d_m_o = (#*#) d_m (matrixOne n) d_m_o = transpose o_d_m
mi = (.*) ((./) m o_d_m) ((./) m d_m_o) mi = (.*) ((./) m o_d_m) ((./) m d_m_o)
d_mi = (.*) (matrixIdentity n) mi d_mi = (.*) (matrixIdentity n) mi
mi_d_mi = (.-) mi d_mi
-- WIP (specs describe iteration on vectors, using full matrix version here)
d_mi_d_mi = (.*) (matrixIdentity n) mi_d_mi
min_mi_mj = zipWith min d_mi_d_mi d_mj_d_mj
where
-- not sure about transpose here
-- maybe backpermute j to i cells ?
d_mj_d_mj = transpose d_mi_d_mi
sum_min_mi_mj = matSumCol n min_mi_mj
sum_mi = matSumCol n d_mi_d_mi
result = zipWith (/) sum_min_mi_mj sum_mi
w = (.-) mi d_mi
z = (#*#) w (matrixOne n)
z' = transpose z
min_z_z' = zipWith min z z'
result = (./) min_z_z' z
...@@ -124,8 +100,8 @@ distributional'' m' = run mi_d_mi ...@@ -124,8 +100,8 @@ distributional'' m' = run mi_d_mi
-- \[N_{m} = \sum_{i,i \neq i}^{m} \sum_{j, j \neq j}^{m} S_{ij}\] -- \[N_{m} = \sum_{i,i \neq i}^{m} \sum_{j, j \neq j}^{m} S_{ij}\]
-- --
distributional :: Matrix Int -> Matrix Double distributional'' :: Matrix Int -> Matrix Double
distributional m = -- run {- $ matMiniMax -} distributional'' m = -- run {- $ matMiniMax -}
run $ diagNull n run $ diagNull n
$ rIJ n $ rIJ n
$ filterWith 0 100 $ filterWith 0 100
......
...@@ -33,8 +33,6 @@ module Gargantext.Core.Methods.Matrix.Accelerate.Utils ...@@ -33,8 +33,6 @@ module Gargantext.Core.Methods.Matrix.Accelerate.Utils
import qualified Data.Foldable as P (foldl1) import qualified Data.Foldable as P (foldl1)
import Debug.Trace (trace) import Debug.Trace (trace)
import Data.Array.Accelerate import Data.Array.Accelerate
import Data.Array.Accelerate.Array.Sugar (Elt(..), Shape(..), Slice(..), (:.))
import Data.Array.Accelerate.Smart (Exp(..))
import Data.Array.Accelerate.Interpreter (run) import Data.Array.Accelerate.Interpreter (run)
import qualified Gargantext.Prelude as P import qualified Gargantext.Prelude as P
import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector) import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector)
...@@ -64,15 +62,6 @@ import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector) ...@@ -64,15 +62,6 @@ import Data.Array.Accelerate.LinearAlgebra hiding (Matrix, transpose, Vector)
-> Acc (Array ((ix :. Int) :. Int) a) -> Acc (Array ((ix :. Int) :. Int) a)
(.*) = zipWith (*) (.*) = zipWith (*)
(.**) :: ( Shape ix
, Slice ix
, Elt a
, P.Num (Exp a)
)
=> Acc (Array ((ix :. Int) :. Int) a)
-> Acc (Array ((ix :. Int) :. Int) a)
(.**) m = (.*) m m
(./) :: ( Shape ix (./) :: ( Shape ix
, Slice ix , Slice ix
...@@ -406,14 +395,14 @@ theMatrixInt n = matrix n (dataMatrix n) ...@@ -406,14 +395,14 @@ theMatrixInt n = matrix n (dataMatrix n)
, 1, 2 , 1, 2
] ]
| (P.==) x 3 = [ 1, 1, 2 | (P.==) x 3 = [ 7, 4, 0
, 1, 2, 3 , 4, 5, 3
, 2, 3, 4 , 0, 3, 4
] ]
| (P.==) x 4 = [ 1, 1, 2, 3 | (P.==) x 4 = [ 4, 4, 0, 0
, 1, 2, 3, 4 , 4, 4, 0, 0
, 2, 3, 4, 5 , 0, 0, 3, 3
, 3, 4, 5, 6 , 0, 0, 3, 3
] ]
| P.otherwise = P.undefined | P.otherwise = P.undefined
......
...@@ -93,7 +93,8 @@ getGraph _uId nId = do ...@@ -93,7 +93,8 @@ getGraph _uId nId = do
-- TODO Distance in Graph params -- TODO Distance in Graph params
case graph of case graph of
Nothing -> do Nothing -> do
graph' <- computeGraph cId Conditional NgramsTerms repo graph' <- computeGraph cId Distributional NgramsTerms repo
-- graph' <- computeGraph cId Conditional NgramsTerms repo
mt <- defaultGraphMetadata cId "Title" repo mt <- defaultGraphMetadata cId "Title" repo
let graph'' = set graph_metadata (Just mt) graph' let graph'' = set graph_metadata (Just mt) graph'
let hg = HyperdataGraphAPI graph'' camera let hg = HyperdataGraphAPI graph'' camera
...@@ -206,7 +207,7 @@ graphRecompute u n logStatus = do ...@@ -206,7 +207,7 @@ graphRecompute u n logStatus = do
, _scst_remaining = Just 1 , _scst_remaining = Just 1
, _scst_events = Just [] , _scst_events = Just []
} }
_g <- trace (show u) $ recomputeGraph u n Conditional _g <- trace (show u) $ recomputeGraph u n Distributional -- Conditional
pure JobLog { _scst_succeeded = Just 1 pure JobLog { _scst_succeeded = Just 1
, _scst_failed = Just 0 , _scst_failed = Just 0
, _scst_remaining = Just 0 , _scst_remaining = Just 0
...@@ -241,7 +242,7 @@ graphVersions nId = do ...@@ -241,7 +242,7 @@ graphVersions nId = do
, gv_repo = v } , gv_repo = v }
recomputeVersions :: UserId -> NodeId -> GargNoServer Graph recomputeVersions :: UserId -> NodeId -> GargNoServer Graph
recomputeVersions uId nId = recomputeGraph uId nId Conditional recomputeVersions uId nId = recomputeGraph uId nId Distributional -- Conditional
------------------------------------------------------------ ------------------------------------------------------------
graphClone :: UserId graphClone :: UserId
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment