Mark,

Between Sage 3.1.1 and 3.2.3, the background implementation of graph
isomorphism was completely switched over. The old implementation
simply computed canonical labels, but it always constructed a C graph
first. Now, it actually uses an algorithm specifically designed to
test for isomorphism between two inputs, but it uses the underlying
implementation of the input graph. Therefore, if the input graphs are
based on NetworkX graphs, it will go much more slowly than it used to.
For maximum speed in is_isomorphic, you should construct c_graphs. If
G is a graph, you can do

sage: H = G.copy(implementation='c_graph')

Here are some benchmarks:

sage: G = graphs.PetersenGraph()
sage: S = SymmetricGroup(10)
sage: H = G.relabel(S.random_element(), inplace=False)
sage: G_C = G.copy(implementation='c_graph', sparse=False)
sage: H_C = H.copy(implementation='c_graph', sparse=False)
sage: G_C_S = G.copy(implementation='c_graph', sparse=True)
sage: H_C_S = H.copy(implementation='c_graph', sparse=True)

sage: timeit('G.is_isomorphic(H)')
625 loops, best of 3: 1.2 ms per loop
sage: timeit('G_C.is_isomorphic(H_C)')
625 loops, best of 3: 206 µs per loop
sage: timeit('G_C_S.is_isomorphic(H_C_S)')
625 loops, best of 3: 208 µs per loop

sage: D = graphs.DodecahedralGraph()
sage: S = SymmetricGroup(20)
sage: H = D.relabel(S.random_element(), inplace=False)
sage: D_C = D.copy(implementation='c_graph', sparse=False)
sage: H_C = H.copy(implementation='c_graph', sparse=False)
sage: D_C_S = D.copy(implementation='c_graph', sparse=True)
sage: H_C_S = H.copy(implementation='c_graph', sparse=True)

sage: timeit('D.is_isomorphic(H)')
125 loops, best of 3: 2.06 ms per loop
sage: timeit('D_C.is_isomorphic(H_C)')
625 loops, best of 3: 305 µs per loop
sage: timeit('D_C_S.is_isomorphic(H_C_S)')
625 loops, best of 3: 312 µs per loop


Does this modification bring you back up to old speed, or hopefully,
even better?


RLM
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to