diff --git a/gmatch4py/graph.pyx b/gmatch4py/graph.pyx index 43fd7204f2b320ce4a07a235a73da5b0ab1335e5..8d52b2bdf46d872d12113fb036511e57f51fe449 100644 --- a/gmatch4py/graph.pyx +++ b/gmatch4py/graph.pyx @@ -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_idx,self.degree_per_attr,self.degree_per_attr_weighted={},{},{} 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: a,b=list(zip(*list(G.nodes(data=True)))) @@ -165,6 +177,8 @@ cdef class Graph: return False cpdef bint has_edge(self,str n_id1,str n_id2): + if self.number_of_edges == 0: + return False if self.is_directed: if n_id1 in self.edges_hash_map and n_id2 in self.edges_hash_map[n_id1]: return True @@ -177,11 +191,15 @@ cdef class Graph: ## LEN FUNCTION 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)) cpdef int size_node_union(self,Graph G): return len(self.nodes_hash_set.union(G.nodes_hash_set)) 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)) cpdef int size_edge_union(self,Graph G): return len(self.edges_hash_set.union(G.edges_hash_set)) @@ -193,23 +211,31 @@ cdef class Graph: def nodes(self,data=False): if data: + if self.number_of_nodes == 0: + return [],[] 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): if data: + if self.number_of_edges == 0: + return [],[] 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): if self.is_edge_attr: hashes=self.edges_hash_map[e1][e2] 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): return self.edges_of_nodes[n]