|
From: | Konstantin Seiler |
Subject: | [igraph] Less clumsy ways to use the python-igraph API |
Date: | Wed, 17 Feb 2016 12:19:24 +1100 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
Hello, I recently had to switch to python-igraph as a graph processing library. For quite a few standard tasks I was unable to work out a way to use the API efficiently and I'm ending up writing code that feels clumsy. I would really appreciate some pointers as of how to do the following tasks more elegantly and with less lines of code. Throughout the following code, g is an igraph.Graph() object. Task 1: add a vertex I'd like to add a vertex to an existing graph and retrieve the Vertex descriptor object in a variable. My best solution is to generate a unique name and then retrieve the vertex afterwards.
I would expect the API to be a one-liner like vertex = g.add_vertex()but testing this shows that v is None. Task 2: add an edge The problem of retrieving the Edge handle after adding an edge is similar to the issue when adding a vertex. Here I don't even know how to write a version that can handle parallel edges. My code is try: Again, I would expect the API to be as simple as edge = g.add_edge(source_vertex, target_vertex) Nb: It also feels inconsistent that I have to use the index explicitly in order to search for an edge. Task 3: find outbound and inbound edges A standard task for any graph algorithm is getting the outbound and/or inbound edges of a vertex. Thus, I would expect there to be explicit methods for this as part of the Vertex object. However, the best I could do is
I would have expected something as simple as out_edges = vertex.out_edges It is quite tedious to write the "select" statement all the time. And to make it worse, one has to remember to use the "index" of the vertex instead of the Vertex object itself. If the index is forgotten, the returned sequence is empty, but no error is shown. This is very prone to buggy code. I'd really appreciate it if you could point me towards more elegant ways of achieving these very basic tasks. If there really isn't any better way, please consider this email as a feature request to make the API more usable. Thanks, Konstantin |
[Prev in Thread] | Current Thread | [Next in Thread] |