Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Przemyslaw Kaminski
haskell-gargantext
Commits
c776b0ec
Commit
c776b0ec
authored
Jun 18, 2019
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[GRAPH] With FGL without IGraph, runTest is OK.
parent
7c2cdbd2
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
131 additions
and
15 deletions
+131
-15
package.yaml
package.yaml
+1
-0
FGL.hs
src/Gargantext/Viz/Graph/FGL.hs
+57
-0
IGraph.hs
src/Gargantext/Viz/Graph/IGraph.hs
+62
-0
Proxemy.hs
src/Gargantext/Viz/Graph/Proxemy.hs
+10
-14
Tools.hs
src/Gargantext/Viz/Graph/Tools.hs
+1
-1
No files found.
package.yaml
View file @
c776b0ec
...
...
@@ -110,6 +110,7 @@ library:
-
filepath
-
fullstop
-
fclabels
-
fgl
-
fast-logger
-
filelock
-
full-text-search
...
...
src/Gargantext/Viz/Graph/FGL.hs
0 → 100644
View file @
c776b0ec
{-| Module : Gargantext.Viz.Graph.FGL
Description : FGL main functions used in Garg
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
Main FGL funs/types to ease portability with IGraph.
-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ConstraintKinds #-}
module
Gargantext.Viz.Graph.FGL
where
import
Gargantext.Prelude
import
qualified
Data.Graph.Inductive
as
FGL
import
Data.List
as
List
------------------------------------------------------------------
-- | Main Types
type
Graph_Undirected
=
FGL
.
Gr
()
()
type
Graph_Directed
=
FGL
.
Gr
()
()
type
Graph
=
FGL
.
Graph
type
Node
=
FGL
.
Node
type
Edge
=
FGL
.
Edge
------------------------------------------------------------------
-- | Main Functions
mkGraph
::
[
Node
]
->
[
Edge
]
->
Graph_Undirected
mkGraph
=
FGL
.
mkUGraph
neighbors
::
Graph
gr
=>
gr
a
b
->
Node
->
[
Node
]
neighbors
=
FGL
.
neighbors
-- | TODO bug: if graph is undirected, we need to filter
-- nub . (map (\(n1,n2) -> if n1 < n2 then (n1,n2) else (n2,n1))) . FGL.edges
edges
::
Graph
gr
=>
gr
a
b
->
[
Edge
]
edges
=
FGL
.
edges
nodes
::
Graph
gr
=>
gr
a
b
->
[
Node
]
nodes
=
FGL
.
nodes
------------------------------------------------------------------
-- | Main sugared functions
mkGraphUfromEdges
::
[(
Int
,
Int
)]
->
Graph_Undirected
mkGraphUfromEdges
es
=
mkGraph
ns
es
where
ns
=
List
.
nub
(
a
<>
b
)
where
(
a
,
b
)
=
List
.
unzip
es
src/Gargantext/Viz/Graph/IGraph.hs
0 → 100644
View file @
c776b0ec
{-| Module : Gargantext.Viz.Graph.IGraph
Description : IGraph main functions used in Garg
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
Main IGraph funs/types to ease portability with FGL.
-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DataKinds #-}
module
Gargantext.Viz.Graph.IGraph
where
import
Data.Serialize
(
Serialize
)
import
Data.Singletons
(
SingI
)
import
Gargantext.Prelude
import
IGraph
hiding
(
mkGraph
,
neighbors
,
edges
,
nodes
,
Node
,
Graph
)
import
qualified
IGraph
as
IG
import
qualified
Data.List
as
List
------------------------------------------------------------------
-- | Main Types
type
Graph_Undirected
=
IG
.
Graph
'U
()
()
type
Graph_Directed
=
IG
.
Graph
'D
()
()
type
Node
=
IG
.
Node
type
Graph
=
IG
.
Graph
------------------------------------------------------------------
-- | Main Functions
mkGraph
::
(
SingI
d
,
Ord
v
,
Serialize
v
,
Serialize
e
)
=>
[
v
]
->
[
LEdge
e
]
->
IG
.
Graph
d
v
e
mkGraph
=
IG
.
mkGraph
neighbors
::
IG
.
Graph
d
v
e
->
IG
.
Node
->
[
Node
]
neighbors
=
IG
.
neighbors
edges
::
IG
.
Graph
d
v
e
->
[
Edge
]
edges
=
IG
.
edges
nodes
::
IG
.
Graph
d
v
e
->
[
Node
]
nodes
=
IG
.
nodes
------------------------------------------------------------------
-- | Main sugared functions
mkGraphUfromEdges
::
[(
Int
,
Int
)]
->
Graph_Undirected
mkGraphUfromEdges
es
=
mkGraph
(
List
.
replicate
n
()
)
$
zip
es
$
repeat
()
where
(
a
,
b
)
=
List
.
unzip
es
n
=
List
.
length
(
List
.
nub
$
a
<>
b
)
mkGraphDfromEdges
::
[(
Int
,
Int
)]
->
Graph_Directed
mkGraphDfromEdges
=
undefined
src/Gargantext/Viz/Graph/Proxemy.hs
View file @
c776b0ec
...
...
@@ -19,18 +19,19 @@ Références:
module
Gargantext.Viz.Graph.Proxemy
where
--import Debug.SimpleReflect
import
Gargantext.Prelude
import
Data.Map
(
Map
)
import
qualified
Data.Map
as
Map
import
qualified
Data.List
as
List
import
Gargantext.Viz.Graph.IGraph
--import Gargantext.Viz.Graph.IGraph
import
Gargantext.Viz.Graph.FGL
type
Length
=
Int
type
FalseReflexive
=
Bool
type
NeighborsFilter
=
Graph_Undirected
->
Node
->
[
Node
]
type
We
=
Bool
similarity_conf_x_y
::
Graph_Undirected
->
(
Node
,
Node
)
->
Length
->
FalseReflexive
->
We
->
Double
similarity_conf_x_y
g
(
x
,
y
)
l
r
we
=
similarity
where
...
...
@@ -102,15 +103,6 @@ spreading g ms r nf = Map.fromListWith (+) $ List.concat $ map pvalue (Map.keys
------------------------------------------------------------------------
-- | Graph Tools
mkGraphUfromEdges
::
[(
Int
,
Int
)]
->
Graph_Undirected
mkGraphUfromEdges
es
=
mkGraph
(
List
.
replicate
n
()
)
$
zip
es
$
repeat
()
where
(
a
,
b
)
=
List
.
unzip
es
n
=
List
.
length
(
List
.
nub
$
a
<>
b
)
mkGraphDfromEdges
::
[(
Int
,
Int
)]
->
Graph_Directed
mkGraphDfromEdges
=
undefined
filterNeighbors
::
Graph_Undirected
->
Node
->
[
Node
]
filterNeighbors
g
n
=
List
.
nub
$
neighbors
g
n
...
...
@@ -128,7 +120,13 @@ ecount = fromIntegral . List.length . List.nub . edges
-- | Behavior tests
graphTest
::
Graph_Undirected
graphTest
=
mkGraphUfromEdges
[(
0
,
1
),(
0
,
2
),(
0
,
4
),(
0
,
5
),(
1
,
0
),(
1
,
3
),(
1
,
8
),(
2
,
0
),(
2
,
3
),(
2
,
4
),(
2
,
5
),(
2
,
6
),(
2
,
16
),(
3
,
1
),(
3
,
2
),(
3
,
4
),(
3
,
5
),(
3
,
6
),(
3
,
18
),(
4
,
0
),(
4
,
2
),(
4
,
3
),(
4
,
6
),(
5
,
0
),(
5
,
2
),(
5
,
3
),(
5
,
8
),(
6
,
2
),(
6
,
3
),(
6
,
4
),(
7
,
8
),(
7
,
9
),(
7
,
10
),(
7
,
13
),(
8
,
1
),(
8
,
5
),(
8
,
7
),(
8
,
9
),(
8
,
10
),(
8
,
11
),(
8
,
12
),(
8
,
13
),(
9
,
7
),(
9
,
8
),(
9
,
12
),(
9
,
13
),(
10
,
7
),(
10
,
8
),(
10
,
11
),(
10
,
17
),(
11
,
8
),(
11
,
10
),(
11
,
12
),(
12
,
8
),(
12
,
9
),(
12
,
11
),(
13
,
7
),(
13
,
8
),(
13
,
9
),(
13
,
20
),(
14
,
16
),(
14
,
17
),(
14
,
18
),(
14
,
20
),(
15
,
16
),(
15
,
17
),(
15
,
18
),(
15
,
20
),(
16
,
2
),(
16
,
14
),(
16
,
15
),(
16
,
18
),(
16
,
20
),(
17
,
10
),(
17
,
14
),(
17
,
15
),(
17
,
18
),(
17
,
20
),(
18
,
3
),(
18
,
14
),(
18
,
15
),(
18
,
16
),(
18
,
17
),(
18
,
19
),(
18
,
20
),(
19
,
18
),(
19
,
20
),(
20
,
13
),(
20
,
14
),(
20
,
15
),(
20
,
16
),(
20
,
17
),(
20
,
18
),(
20
,
19
)]
graphTest
=
mkGraphUfromEdges
graphTest_data
graphTest_data
::
[(
Int
,
Int
)]
graphTest_data
=
[(
0
,
1
),(
0
,
2
),(
0
,
4
),(
0
,
5
),(
1
,
3
),(
1
,
8
),(
2
,
3
),(
2
,
4
),(
2
,
5
),(
2
,
6
),(
2
,
16
),(
3
,
4
),(
3
,
5
),(
3
,
6
),(
3
,
18
),(
4
,
6
),(
5
,
8
),(
7
,
8
),(
7
,
9
),(
7
,
10
),(
7
,
13
),(
8
,
9
),(
8
,
10
),(
8
,
11
),(
8
,
12
),(
8
,
13
),(
9
,
12
),(
9
,
13
),(
10
,
11
),(
10
,
17
),(
11
,
12
),(
13
,
20
),(
14
,
16
),(
14
,
17
),(
14
,
18
),(
14
,
20
),(
15
,
16
),(
15
,
17
),(
15
,
18
),(
15
,
20
),(
16
,
18
),(
16
,
20
),(
17
,
18
),(
17
,
20
),(
18
,
19
),(
18
,
20
),(
19
,
20
)]
graphTest_data'
::
[(
Int
,
Int
)]
graphTest_data'
=
[(
0
,
1
),(
0
,
2
),(
0
,
4
),(
0
,
5
),(
1
,
0
),(
1
,
3
),(
1
,
8
),(
2
,
0
),(
2
,
3
),(
2
,
4
),(
2
,
5
),(
2
,
6
),(
2
,
16
),(
3
,
1
),(
3
,
2
),(
3
,
4
),(
3
,
5
),(
3
,
6
),(
3
,
18
),(
4
,
0
),(
4
,
2
),(
4
,
3
),(
4
,
6
),(
5
,
0
),(
5
,
2
),(
5
,
3
),(
5
,
8
),(
6
,
2
),(
6
,
3
),(
6
,
4
),(
7
,
8
),(
7
,
9
),(
7
,
10
),(
7
,
13
),(
8
,
1
),(
8
,
5
),(
8
,
7
),(
8
,
9
),(
8
,
10
),(
8
,
11
),(
8
,
12
),(
8
,
13
),(
9
,
7
),(
9
,
8
),(
9
,
12
),(
9
,
13
),(
10
,
7
),(
10
,
8
),(
10
,
11
),(
10
,
17
),(
11
,
8
),(
11
,
10
),(
11
,
12
),(
12
,
8
),(
12
,
9
),(
12
,
11
),(
13
,
7
),(
13
,
8
),(
13
,
9
),(
13
,
20
),(
14
,
16
),(
14
,
17
),(
14
,
18
),(
14
,
20
),(
15
,
16
),(
15
,
17
),(
15
,
18
),(
15
,
20
),(
16
,
2
),(
16
,
14
),(
16
,
15
),(
16
,
18
),(
16
,
20
),(
17
,
10
),(
17
,
14
),(
17
,
15
),(
17
,
18
),(
17
,
20
),(
18
,
3
),(
18
,
14
),(
18
,
15
),(
18
,
16
),(
18
,
17
),(
18
,
19
),(
18
,
20
),(
19
,
18
),(
19
,
20
),(
20
,
13
),(
20
,
14
),(
20
,
15
),(
20
,
16
),(
20
,
17
),(
20
,
18
),(
20
,
19
)]
-- | Tests
-- >>> runTest_Confluence_Proxemy
...
...
@@ -178,8 +176,6 @@ runTest_Confluence_Proxemy = (runTest_conf_is_ok, runTest_prox_is_ok)
where
look'
x'
m'
=
maybe
(
panic
"nokey"
)
identity
$
Map
.
lookup
x'
m'
--prox : longueur balade = 0
test_prox
::
Node
->
[(
Node
,
[(
Node
,
Double
)])]
test_prox
0
=
[
(
0
,[(
0
,
1.0000
),(
1
,
0.0000
),(
2
,
0.0000
),(
3
,
0.0000
),(
4
,
0.0000
),(
5
,
0.0000
),(
6
,
0.0000
),(
7
,
0.0000
),(
8
,
0.0000
),(
9
,
0.0000
),(
10
,
0.0000
),(
11
,
0.0000
),(
12
,
0.0000
),(
13
,
0.0000
),(
14
,
0.0000
),(
15
,
0.0000
),(
16
,
0.0000
),(
17
,
0.0000
),(
18
,
0.0000
),(
19
,
0.0000
),(
20
,
0.0000
)])
...
...
src/Gargantext/Viz/Graph/Tools.hs
View file @
c776b0ec
...
...
@@ -26,7 +26,7 @@ import Gargantext.Viz.Graph
--import Gargantext.Viz.Graph.Bridgeness (bridgeness)
import
Gargantext.Viz.Graph.Distances.Matrice
(
measureConditional
)
import
Gargantext.Viz.Graph.Index
(
createIndices
,
toIndex
,
map2mat
,
mat2map
)
import
Gargantext.Viz.Graph.
Proxemy
(
mkGraphUfromEdges
)
import
Gargantext.Viz.Graph.
IGraph
(
mkGraphUfromEdges
)
import
GHC.Float
(
sin
,
cos
)
import
qualified
IGraph
as
Igraph
import
qualified
IGraph.Algorithms.Layout
as
Layout
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment