aplbrain/dotmotif

Non-string ids not supported by Neo4jExecutor

jtpdowns opened this issue · 2 comments

Ingesting a NetworkX graph with integer ids results in an error: ValueError: Could not export graph: unsupported operand type(s) for +: 'int' and 'str'. It should be straightforward to handle integers, though A node can be any hashable Python object except None. Maybe just cast with repr.

I think I want the user to explicitly perform the rename, since they'll have to know what these node IDs are later in order to index the results back into the starting graph.

For example, this is weird:

>>> E = Executor(graph=G)
>>> results = E.find(motif, cursor=False)
>>> results[0][0] in G
False

Granted, str(results[0][0]) in GTrue, but I'm not sure that'd be obvious if this happens silently. Thoughts?

This is resolved in #40.

To make your int-ID'd graph compatible with dotmotif, one can rename the IDs in a NetworkX graph:

Given a networkx.Graph called G:

import networkx as nx

G = nx.relabel_nodes(G, lambda x: str(x))