Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Fize Jacques
GMatch4py
Commits
d1ddf930
Commit
d1ddf930
authored
Feb 20, 2019
by
Fize Jacques
Browse files
Debug
parent
55ae3496
Changes
1
Hide whitespace changes
Inline
Side-by-side
gmatch4py/graph.pyx
View file @
d1ddf930
...
@@ -22,6 +22,18 @@ cdef class Graph:
...
@@ -22,6 +22,18 @@ cdef class Graph:
self
.
nodes_degree
,
self
.
nodes_degree_in
,
self
.
nodes_degree_out
,
self
.
nodes_degree_weighted
,
self
.
nodes_degree_in_weighted
,
self
.
nodes_degree_out_weighted
=
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
)
self
.
nodes_degree
,
self
.
nodes_degree_in
,
self
.
nodes_degree_out
,
self
.
nodes_degree_weighted
,
self
.
nodes_degree_in_weighted
,
self
.
nodes_degree_out_weighted
=
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
),
np
.
array
([],
dtype
=
np
.
long
)
self
.
nodes_idx
,
self
.
degree_per_attr
,
self
.
degree_per_attr_weighted
=
{},{},{}
self
.
nodes_idx
,
self
.
degree_per_attr
,
self
.
degree_per_attr_weighted
=
{},{},{}
self
.
nodes_hash_set
=
set
([])
self
.
nodes_hash_set
=
set
([])
self
.
number_of_nodes
=
0
self
.
number_of_edges
=
0
self
.
edge_list
=
[]
self
.
edges_attr_list
=
[]
self
.
edges_hash_idx
=
{}
self
.
edges_hash
=
[]
self
.
edges_hash_set
=
set
([])
self
.
edges_weight
=
{}
self
.
edges_hash_map
=
{}
self
.
attr_edges
=
{}
else
:
else
:
a
,
b
=
list
(
zip
(
*
list
(
G
.
nodes
(
data
=
True
))))
a
,
b
=
list
(
zip
(
*
list
(
G
.
nodes
(
data
=
True
))))
...
@@ -165,6 +177,8 @@ cdef class Graph:
...
@@ -165,6 +177,8 @@ cdef class Graph:
return
False
return
False
cpdef
bint
has_edge
(
self
,
str
n_id1
,
str
n_id2
):
cpdef
bint
has_edge
(
self
,
str
n_id1
,
str
n_id2
):
if
self
.
number_of_edges
==
0
:
return
False
if
self
.
is_directed
:
if
self
.
is_directed
:
if
n_id1
in
self
.
edges_hash_map
and
n_id2
in
self
.
edges_hash_map
[
n_id1
]:
if
n_id1
in
self
.
edges_hash_map
and
n_id2
in
self
.
edges_hash_map
[
n_id1
]:
return
True
return
True
...
@@ -177,11 +191,15 @@ cdef class Graph:
...
@@ -177,11 +191,15 @@ cdef class Graph:
## LEN FUNCTION
## LEN FUNCTION
cpdef
int
size_node_intersect
(
self
,
Graph
G
):
cpdef
int
size_node_intersect
(
self
,
Graph
G
):
if
self
.
number_of_nodes
==
0
:
return
0
return
len
(
self
.
nodes_hash_set
.
intersection
(
G
.
nodes_hash_set
))
return
len
(
self
.
nodes_hash_set
.
intersection
(
G
.
nodes_hash_set
))
cpdef
int
size_node_union
(
self
,
Graph
G
):
cpdef
int
size_node_union
(
self
,
Graph
G
):
return
len
(
self
.
nodes_hash_set
.
union
(
G
.
nodes_hash_set
))
return
len
(
self
.
nodes_hash_set
.
union
(
G
.
nodes_hash_set
))
cpdef
int
size_edge_intersect
(
self
,
Graph
G
):
cpdef
int
size_edge_intersect
(
self
,
Graph
G
):
if
self
.
number_of_edges
==
0
:
return
0
return
len
(
self
.
edges_hash_set
.
intersection
(
G
.
edges_hash_set
))
return
len
(
self
.
edges_hash_set
.
intersection
(
G
.
edges_hash_set
))
cpdef
int
size_edge_union
(
self
,
Graph
G
):
cpdef
int
size_edge_union
(
self
,
Graph
G
):
return
len
(
self
.
edges_hash_set
.
union
(
G
.
edges_hash_set
))
return
len
(
self
.
edges_hash_set
.
union
(
G
.
edges_hash_set
))
...
@@ -193,23 +211,31 @@ cdef class Graph:
...
@@ -193,23 +211,31 @@ cdef class Graph:
def
nodes
(
self
,
data
=
False
):
def
nodes
(
self
,
data
=
False
):
if
data
:
if
data
:
if
self
.
number_of_nodes
==
0
:
return
[],[]
return
self
.
nodes_list
,
self
.
attr_nodes
return
self
.
nodes_list
,
self
.
attr_nodes
else
:
return
self
.
nodes_list
if
self
.
number_of_nodes
==
0
:
return
[]
return
self
.
nodes_list
def
edges
(
self
,
data
=
False
):
def
edges
(
self
,
data
=
False
):
if
data
:
if
data
:
if
self
.
number_of_edges
==
0
:
return
[],[]
return
self
.
edges_list
,
self
.
attr_edges
return
self
.
edges_list
,
self
.
attr_edges
else
:
return
self
.
edges_list
if
self
.
number_of_edges
==
0
:
return
[]
return
self
.
edges_list
cpdef
list
get_edges_ed
(
self
,
str
e1
,
str
e2
):
cpdef
list
get_edges_ed
(
self
,
str
e1
,
str
e2
):
if
self
.
is_edge_attr
:
if
self
.
is_edge_attr
:
hashes
=
self
.
edges_hash_map
[
e1
][
e2
]
hashes
=
self
.
edges_hash_map
[
e1
][
e2
]
return
[(
e1
,
e2
,
self
.
edges_attr_list
[
self
.
edges_hash_idx
[
hash_
]])
for
hash_
in
hashes
]
return
[(
e1
,
e2
,
self
.
edges_attr_list
[
self
.
edges_hash_idx
[
hash_
]])
for
hash_
in
hashes
]
else
:
return
[(
e1
,
e2
,
None
)]
return
[(
e1
,
e2
,
None
)]
cpdef
list
get_edges_no
(
self
,
str
n
):
cpdef
list
get_edges_no
(
self
,
str
n
):
return
self
.
edges_of_nodes
[
n
]
return
self
.
edges_of_nodes
[
n
]
...
...
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