Describe the bug
When the input graph for the method cdlib.utils.convert_graph_formats() is a networkx graph where the node type is neither a string not an int (but is hashable as networkx expects), if the graph is bipartite, this method fails when converting to igraph format with the following error when attempting to populate the gi.vs["type"] value:
Traceback (most recent call last):
File "/Users/shashankr/projects/cdlib/test.py", line 29, in <module>
convert_graph_formats(G, ig.Graph)
File "/Users/shashankr/projects/cdlib/cdlib/utils.py", line 197, in convert_graph_formats
return __from_nx_to_igraph(graph, directed)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/shashankr/projects/cdlib/cdlib/utils.py", line 141, in __from_nx_to_igraph
if type(name) == int else a_r[int(name.replace("\\", ""))]
^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '<__main__.Node object at 0x100e5b560>'
To Reproduce
Steps to reproduce the behavior:
- CDlib version: 0.4.0
- Operating System: MacOs Sonoma 14.5 (23F79)
- Python version: 3.12
- Version(s) of CDlib required libraries: Not sure
Here's a script (test.py) to repro the issue:
import networkx as nx
import igraph as ig
from cdlib import algorithms
from cdlib.utils import convert_graph_formats
class Node:
def __init__(self, id, type):
self.id = id
self.type = type
def __hash__(self):
return hash(self.id)
def __eq__(self, other):
return self.id == other.id
john = Node('John Travolta', 'actor')
nick = Node('Nick Cage', 'actor')
face_off = Node('Face Off', 'movie')
G = nx.Graph()
G.add_node(john)
G.add_node(nick)
G.add_edge(john, face_off, label='ACTED_IN')
G.add_edge(nick, face_off, label='ACTED_IN')
convert_graph_formats(G, ig.Graph)
Simply run with:
Expected behavior
I'd expect that call to convert_graph_formats() to work.
Screenshots
NA
Additional context
I also have a fix that I'm workin on! I'll produce a PR shortly.
Describe the bug
When the input graph for the method
cdlib.utils.convert_graph_formats()is a networkx graph where the node type is neither astringnot anint(but is hashable as networkx expects), if the graph is bipartite, this method fails when converting to igraph format with the following error when attempting to populate thegi.vs["type"]value:To Reproduce
Steps to reproduce the behavior:
Here's a script (
test.py) to repro the issue:Simply run with:
Expected behavior
I'd expect that call to convert_graph_formats() to work.
Screenshots
NA
Additional context
I also have a fix that I'm workin on! I'll produce a PR shortly.