Opened 4 years ago
Last modified 4 years ago
#18346 closed enhancement
Easier handling of vertex labels in graph backends — at Version 2
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: | public/18346 (Commits) | Commit: | 25765bb3c4cb4c5f49e5078d7e6e3968c62310e1 |
Dependencies: | Stopgaps: |
Description (last modified by )
This ticket addresses the following problem:
In the
CGraph
backends, threecdef
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
andStaticSparseGraph
) andGenericGraphBackend
are turned into cdef classes.
- The three functions
get_vertex
,vertex_label
,check_vertex
become methods ofCGraphBackend
- 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 directlyG._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 inGenericGraphBackend
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
P.S.: The branch is built to be reviewed commit by commit. In particular, the renamed file appears as trivial when looking at the first commit, but as a lot of + and - when looking at the branch's diff
Change History (2)
comment:1 Changed 4 years ago by
- Branch set to public/18346
- Commit set to 25765bb3c4cb4c5f49e5078d7e6e3968c62310e1
- Component changed from PLEASE CHANGE to graph theory
- Status changed from new to needs_review
comment:2 Changed 4 years ago by
- Description modified (diff)
New commits:
trac #18346: Make graph_backends.py into a .pyx
trac #18346: Move and indent three functions (nothing else is changed)
trac #18346: Rename calls to [get_vertex, vertex_label, check_vertex] into self.method calls
trac #18346: Turn the backends into cdef classes
trac #18346: New pickling function for GraphBackend
trac #18346: Remove old __reduce__ functions and move useful doctests
trac #18346: Some python code accesses G._backend._cg directly
trac #18346: A 'cdef class' is a 'type', not a 'class'