Opened 4 years ago

Last modified 4 years ago

#18346 closed enhancement

Easier handling of vertex labels in graph backends — at Initial Version

Reported by: ncohen Owned by:
Priority: major Milestone: sage-6.7
Component: graph theory Keywords:
Cc: borassi, dcoudert, darij, vdelecroix Merged in:
Authors: Nathann Cohen Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description

This ticket addresses the following problem:

In the CGraph backends, three cdef functions are used all the time to deal with vertex labels, i.e. get_vertex, vertex_label, check_vertex. They are always called with the same arguments, which are all attributes of the backend that calls it. They should be method, so that the arguments are not needlessly repeated.

What this branch does:

  • The CGraph backends (i.e. SparseBackend, DenseBackend and StaticSparseGraph) and GenericGraphBackend are turned into cdef classes.
  • The three functions get_vertex, vertex_label, check_vertex become methods of CGraphBackend
  • It adds a method CGraphBackend.c_graph() to get the two cdef attributes _cg and _cg_rev. Turns out that some code in Sage accesses directly G._backend._cg.

This should have been sufficient, but there were (unexpected) consequences:

  • There is no automatic pickling for cdef classes (as instrospection does not work), and the doctests do not pass if that does not work. Consequently, I implemented a unique __reduce__ function in GenericGraphBackend which handles the pickling for all backends (sparse/dense/static/networkx). It also removes some duplicated code as a result.

This makes the code a bit clearer (and it is needed). Also, moving this pickling function above is good for the future, for there will be many modifications in the future to the data structures in Sage: I plan to merge CGraph and GenericBackend into only one class (but that's for later).

Nathann

Change History (0)

Note: See TracTickets for help on using tickets.