]> Git — Sourcephile - gargantext.git/blob - src/Gargantext/Viz/Phylo/Aggregates/Cluster.hs
[Phylo][Merge] Fix warnings and adding Eq instance to Phylo for Behavior test.
[gargantext.git] / src / Gargantext / Viz / Phylo / Aggregates / Cluster.hs
1 {-|
2 Module : Gargantext.Viz.Phylo.Tools
3 Description : Phylomemy Tools to build/manage it
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
8 Portability : POSIX
9
10
11 -}
12
13 {-# LANGUAGE NoImplicitPrelude #-}
14 {-# LANGUAGE FlexibleContexts #-}
15 {-# LANGUAGE OverloadedStrings #-}
16
17 module Gargantext.Viz.Phylo.Aggregates.Cluster
18 where
19
20 import Data.List (head,null,tail)
21 import Data.Map (Map)
22 import Data.Tuple (fst)
23 import Gargantext.Prelude hiding (head)
24 import Gargantext.Viz.Phylo
25 import Gargantext.Viz.Phylo.Tools
26 import Gargantext.Viz.Phylo.BranchMaker
27 import Gargantext.Viz.Phylo.Metrics.Clustering
28 import qualified Data.Map as Map
29
30
31 -- | To apply a Clustering method to a PhyloGraph
32 graphToClusters :: (Clustering,[Double]) -> PhyloGraph -> [[PhyloGroup]]
33 graphToClusters (clust,_param) (nodes,edges) = case clust of
34 Louvain -> undefined -- louvain (nodes,edges)
35 RelatedComponents -> relatedComp 0 (head nodes) (tail nodes,edges) [] []
36
37
38 -- | To transform a Phylo into Clusters of PhyloGroups at a given level
39 phyloToClusters :: Level -> (Proximity,[Double]) -> (Clustering,[Double]) -> Phylo -> Map (Date,Date) [[PhyloGroup]]
40 phyloToClusters lvl (prox,param) (clus,param') p = Map.fromList
41 $ zip (getPhyloPeriods p)
42 (map (\prd -> let graph = groupsToGraph (prox,param) (getGroupsWithFilters lvl prd p) p
43 in if null (fst graph)
44 then []
45 else graphToClusters (clus,param') graph)
46 (getPhyloPeriods p))