BGL python: dijkstra_shortest_paths
* pr edecessor_map=None, class boost::vector_property_map
{lvalu e} weight_map, class boost::python::api::object visitor=None, class boost::vecto r_property_map
Hi,
I can't seem to use dijkstra_shortest_paths as I think I should via the
python bindings. It works fine when I pass a weight_map and
predecessor_map. What I want to do is to pass a predecessor_map and a
distance_map. Unfortunately boost.python can't convert the arguments.
I'm using a bgl that says bgl.__version__ = '1.0' although I haven't
updated it from SVN recently.
This works:
import boost.graph as bgl
graph = bgl.Graph()
a = graph.add_vertex()
b = graph.add_vertex()
e = graph.add_edge(a, b)
weights = graph.add_edge_property('integer')
weights[e] = 5
predecessors = graph.add_vertex_property('vertex')
bgl.dijkstra_shortest_paths(
graph,
a,
predecessor_map = predecessors,
weight_map = weights
)
This doesn't work:
import boost.graph as bgl
graph = bgl.Graph()
a = graph.add_vertex()
b = graph.add_vertex()
e = graph.add_edge(a, b)
distances = graph.add_edge_property('float')
predecessors = graph.add_vertex_property('vertex')
bgl.dijkstra_shortest_paths(
graph,
a,
predecessor_map = predecessors,
distance_map = distances
)
This is the error I get:
ping This looks like a bug in the BGL python bindings. John. John Reid wrote:
Hi,
I can't seem to use dijkstra_shortest_paths as I think I should via the python bindings. It works fine when I pass a weight_map and predecessor_map. What I want to do is to pass a predecessor_map and a distance_map. Unfortunately boost.python can't convert the arguments.
I'm using a bgl that says bgl.__version__ = '1.0' although I haven't updated it from SVN recently.
This works: import boost.graph as bgl graph = bgl.Graph() a = graph.add_vertex() b = graph.add_vertex() e = graph.add_edge(a, b) weights = graph.add_edge_property('integer') weights[e] = 5 predecessors = graph.add_vertex_property('vertex') bgl.dijkstra_shortest_paths( graph, a, predecessor_map = predecessors, weight_map = weights )
This doesn't work: import boost.graph as bgl graph = bgl.Graph() a = graph.add_vertex() b = graph.add_vertex() e = graph.add_edge(a, b) distances = graph.add_edge_property('float') predecessors = graph.add_vertex_property('vertex') bgl.dijkstra_shortest_paths( graph, a, predecessor_map = predecessors, distance_map = distances )
* pr edecessor_map=None, class boost::vector_property_map
{lvalu e} weight_map, class boost::python::api::object visitor=None, class boost::vecto r_property_map
This is the error I get:
: Python argument types in boost.graph._graph.dijkstra_shortest_paths(Graph, Vertex) did not match C++ signature: dijkstra_shortest_paths(class boost::graph::python::basic_graph<struct boost ::bidirectionalS> graph, struct boost::graph::python::basic_descriptor root_vertex, class boost::vector_property_map ,str uct boost::graph::python::basic_index_map ,struct boost::adj_list_vertex_prope rty_map ,struct boost::property ,struct boost::no_property,struct boos t::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> python::basic_index_map ,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> > > * distance_map=None, c lass boost::vector_property_map ,struct boost::bidirectionalS>,struc t boost::adj_list_edge_property_map const ,enum boost::edge_index_t> > directionalS>,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> > > * color_map=None) dijkstra_shortest_paths(class boost::graph::python::basic_graph<struct boost ::undirectedS> graph, struct boost::graph::python::basic_descriptor root_vertex, class boost::vector_property_map ,struct boost ::graph::python::basic_index_map ,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsig ned int,unsigned int const &,enum boost::vertex_index_t> > > * predecessor_map=N one, class boost::vector_property_map ,struct boost::adj_list_vertex_property_map ,stru ct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int con st &,enum boost::vertex_index_t> > > * distance_map=None, class boost::vector_pr operty_map ,struct boost::undirectedS>,struct boost::adj_list_edge_prop erty_map const ,enum boost::edge_index_t> > > {lvalue} weight_map, class boost::py thon::api::object visitor=None, class boost::vector_property_map ,struct boost::adj_l ist_vertex_property_map ,struct boost::property ,struct boost::no_propert y,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_inde x_t> > > * color_map=None) For reference here is the docstring bgl gives me: Type: function Base Class:
String Form: Namespace: Interactive Docstring: dijkstra_shortest_paths(graph, root_vertex, predecessor_map = None, distance_map = None, weight_map = None, visitor = None) Computes the shortest paths from the root vertex to every other vertex in a graph.
Parameters: graph the graph on which to compute shortest paths will run. It may be either a directed or undirected graph.
root_vertex the starting vertex for the shortest-path search.
predecessor_map a vertex -> vertex map that stores the predecessor of each vertex in the shortest paths tree. From a given vertex, one can follow the predecessor_map back to the root_vertex to reconstruct the shortest path.
distance_map a vertex -> float map that stores the distance from the root_vertex to each vertex in the tree. A distance of infinity in this property map indicates that the vertex is unreachable from the root_vertex.
weight_map an edge -> float map that stores the weight of each edge in the graph. Negative edge weights are not permitted. If no weight map is provided, each edge will be assumed to have a weight of 1.0.
visitor a visitor that will receive events as the shortest-paths computation progresses. Typically this visitor should be derived from boost.graph.dijkstra_visitor.
See also: bellman_ford_shortest_paths dag_shortest_paths dijkstra_visitor
Complete C++ documentation is available at: http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html
Any help appreciated, John.
ping - is absolutely no one interested in this problem? John. John Reid wrote:
ping
This looks like a bug in the BGL python bindings.
John.
John Reid wrote:
Hi,
I can't seem to use dijkstra_shortest_paths as I think I should via the python bindings. It works fine when I pass a weight_map and predecessor_map. What I want to do is to pass a predecessor_map and a distance_map. Unfortunately boost.python can't convert the arguments.
I'm using a bgl that says bgl.__version__ = '1.0' although I haven't updated it from SVN recently.
This works: import boost.graph as bgl graph = bgl.Graph() a = graph.add_vertex() b = graph.add_vertex() e = graph.add_edge(a, b) weights = graph.add_edge_property('integer') weights[e] = 5 predecessors = graph.add_vertex_property('vertex') bgl.dijkstra_shortest_paths( graph, a, predecessor_map = predecessors, weight_map = weights )
This doesn't work: import boost.graph as bgl graph = bgl.Graph() a = graph.add_vertex() b = graph.add_vertex() e = graph.add_edge(a, b) distances = graph.add_edge_property('float') predecessors = graph.add_vertex_property('vertex') bgl.dijkstra_shortest_paths( graph, a, predecessor_map = predecessors, distance_map = distances )
* pr edecessor_map=None, class boost::vector_property_map
{lvalu e} weight_map, class boost::python::api::object visitor=None, class boost::vecto r_property_map
This is the error I get:
: Python argument types in boost.graph._graph.dijkstra_shortest_paths(Graph, Vertex) did not match C++ signature: dijkstra_shortest_paths(class boost::graph::python::basic_graph<struct boost ::bidirectionalS> graph, struct boost::graph::python::basic_descriptor root_vertex, class boost::vector_property_map ,str uct boost::graph::python::basic_index_map ,struct boost::adj_list_vertex_prope rty_map ,struct boost::property ,struct boost::no_property,struct boos t::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> python::basic_index_map ,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> > > * distance_map=None, c lass boost::vector_property_map ,struct boost::bidirectionalS>,struc t boost::adj_list_edge_property_map const ,enum boost::edge_index_t> > directionalS>,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_index_t> > > * color_map=None) dijkstra_shortest_paths(class boost::graph::python::basic_graph<struct boost ::undirectedS> graph, struct boost::graph::python::basic_descriptor root_vertex, class boost::vector_property_map ,struct boost ::graph::python::basic_index_map ,struct boost::adj_list_vertex_property_map ,struct boost::property ,struct boost::no_property,struct boost::listS>,unsig ned int,unsigned int const &,enum boost::vertex_index_t> > > * predecessor_map=N one, class boost::vector_property_map ,struct boost::adj_list_vertex_property_map ,stru ct boost::property ,struct boost::no_property,struct boost::listS>,unsigned int,unsigned int con st &,enum boost::vertex_index_t> > > * distance_map=None, class boost::vector_pr operty_map ,struct boost::undirectedS>,struct boost::adj_list_edge_prop erty_map const ,enum boost::edge_index_t> > > {lvalue} weight_map, class boost::py thon::api::object visitor=None, class boost::vector_property_map ,struct boost::adj_l ist_vertex_property_map ,struct boost::property ,struct boost::no_propert y,struct boost::listS>,unsigned int,unsigned int const &,enum boost::vertex_inde x_t> > > * color_map=None) For reference here is the docstring bgl gives me: Type: function Base Class:
String Form: Namespace: Interactive Docstring: dijkstra_shortest_paths(graph, root_vertex, predecessor_map = None, distance_map = None, weight_map = None, visitor = None) Computes the shortest paths from the root vertex to every other vertex in a graph.
Parameters: graph the graph on which to compute shortest paths will run. It may be either a directed or undirected graph.
root_vertex the starting vertex for the shortest-path search.
predecessor_map a vertex -> vertex map that stores the predecessor of each vertex in the shortest paths tree. From a given vertex, one can follow the predecessor_map back to the root_vertex to reconstruct the shortest path.
distance_map a vertex -> float map that stores the distance from the root_vertex to each vertex in the tree. A distance of infinity in this property map indicates that the vertex is unreachable from the root_vertex.
weight_map an edge -> float map that stores the weight of each edge in the graph. Negative edge weights are not permitted. If no weight map is provided, each edge will be assumed to have a weight of 1.0.
visitor a visitor that will receive events as the shortest-paths computation progresses. Typically this visitor should be derived from boost.graph.dijkstra_visitor.
See also: bellman_ford_shortest_paths dag_shortest_paths dijkstra_visitor
Complete C++ documentation is available at: http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.html
Any help appreciated, John.
Hi All,
I have defined the following predicate
boost::function
ping - is absolutely no one interested in this problem?
Interesting, but swamped by everything that is not BGL. I'll take a look as soon as possible... sorry. - Doug _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On Apr 13, 2007, at 12:09 PM, John Reid wrote:
I can't seem to use dijkstra_shortest_paths as I think I should via the python bindings. It works fine when I pass a weight_map and predecessor_map. What I want to do is to pass a predecessor_map and a distance_map. Unfortunately boost.python can't convert the arguments.
I'm using a bgl that says bgl.__version__ = '1.0' although I haven't updated it from SVN recently.
I see what's going on. The documentation says that weight_map is optional (defaults to all weights = 1.0), but the code didn't agree. I've just committed a fix to the SVN repository that makes weight_map optional for dijkstra_shortest_paths... your example code works fine for me, now. Again, my apologies for the abysmal response time :( - Doug
Doug Gregor wrote:
I see what's going on. The documentation says that weight_map is optional (defaults to all weights = 1.0), but the code didn't agree. I've just committed a fix to the SVN repository that makes weight_map optional for dijkstra_shortest_paths... your example code works fine for me, now.
Great
Again, my apologies for the abysmal response time :(
- Doug
No worries - I'm just pleased I get to use the BGL from python. Cheers, John.
A quick note to say my original code was wrong in another way: distances = graph.add_edge_property('float') should be: distances = graph.add_vertex_property('float') Thanks again, John.
participants (4)
-
Doug Gregor
-
Doug Gregor
-
John Reid
-
Sean Kelly