2 Module : Gargantext.Core.Viz.Graph.Tools.IGraph
3 Description : Tools to build Graph
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
11 * Gábor Csárdi, Tamás Nepusz: The igraph software package for complex network research. InterJournal Complex Systems, 1695, 2006.
15 module Gargantext.Core.Viz.Graph.Tools.IGraph
19 import Data.Singletons (SingI)
20 import IGraph hiding (mkGraph, neighbors, edges, nodes, Node, Graph)
22 import qualified Data.List as List
23 import qualified IGraph as IG
24 import qualified IGraph.Algorithms.Clique as IG
25 import qualified IGraph.Algorithms.Community as IG
26 import qualified IGraph.Random as IG
28 ------------------------------------------------------------------
30 type Graph_Undirected = IG.Graph 'U () ()
31 type Graph_Directed = IG.Graph 'D () ()
36 ------------------------------------------------------------------
37 -- | Main Graph management Functions
38 neighbors :: IG.Graph d v e -> IG.Node -> [IG.Node]
39 neighbors = IG.neighbors
41 edges :: IG.Graph d v e -> [Edge]
44 nodes :: IG.Graph d v e -> [IG.Node]
47 ------------------------------------------------------------------
49 maximalCliques :: IG.Graph d v e -> [[Int]]
50 maximalCliques g = IG.maximalCliques g (min',max')
55 ------------------------------------------------------------------
58 -- | Tools to analyze graphs
59 partitions_spinglass :: (Serialize v, Serialize e)
60 => Seed -> IG.Graph 'U v e -> IO [[Int]]
61 partitions_spinglass s g = do
62 gen <- IG.withSeed s pure
63 pure $ IG.findCommunity g Nothing Nothing IG.spinglass gen
65 ------------------------------------------------------------------
67 mkGraph :: (SingI d, Ord v,
68 Serialize v, Serialize e) =>
69 [v] -> [LEdge e] -> IG.Graph d v e
73 ------------------------------------------------------------------
74 mkGraphUfromEdges :: [(Int, Int)] -> Graph_Undirected
75 mkGraphUfromEdges es = mkGraph (List.replicate n ()) $ zip es $ repeat ()
78 n = List.length (List.nub $ a <> b)
81 mkGraphDfromEdges :: [(Int, Int)] -> Graph_Directed
82 mkGraphDfromEdges = undefined