- 10 Feb, 2008 1 commit
-
-
Tiago Peixoto authored
This is a huge commit which completely refactors the metaprogramming engine which generates and selects (at run time) the graph view type and the desired algorithm implementation (template instantiation) that runs on it. Things are laid out now as following. There exists a main underlying graph type (GraphInterface::multigraph_t) and several other template classes that mask it some way or another, in a hierarchic fashion: multigraph_t -> filtered_graph (edges only, vertices only, both) | | | | | | | | |-------(reversed_graph)--------|-----------|-----------| | | | | \------(UndirectedAdaptor)------------------------------/ The filtered_graph filters out edges and/or vertices from the graph based on some scalar boolean property. The reversed_graph reversed the direction of the edges and, finally, the UndirectedAdaptor treats the original directed graphs as undirected, transversing the in- and out-edges of each vertex indifferently. Thus, the total number of graph view types is 12. (The option --disable-graph-filtering can be passed to the configure script, which will disable graph filtering altogether and bring the total number down to 3, to reduce compile time and memory usage) In general, some specific algorithm, implemented as a template function object, needs to be instantiated for each of those types. Furthermore, the algorithm may also depend on other types, such as specific property_maps. Thus, the following scheme is used: struct my_algorithm // algorithm to be implemented { template <class Graph, class PropertyMap> void operator()(Graph *g, PropertyMap p, double& result) const { // ... } }; // in order for the above code to be instantiated at compile time // and selected at run time, the run_action template function object // is used from a member function of the GraphInterface class: double GraphInterface::MyAlgorithm(string prop_name) { double result; boost::any vprop = prop(property, _vertex_index, _properties); run_action<>()(*this, bind<void>(my_algorithm(), _1, _2, var(result)), vertex_scalar_properties())(vprop); return result; } The whole code was changed to reflect this scheme, but now things are more centralized and less ad-hoc code needed to be written. Unfortunately, due to GCC's high memory usage during template instantiations, some of the code (namely all the degree correlation things) had to be split in multiple compilation units... Maybe this will change in the future if GCC gets optimized. This commit also touches other parts of code. More specifically, the way filtering gets done is very different. Now we only filter on boolean properties, and with the above scheme, the desired implementation runs with the correct chosen type, and no implicit type conversions should ever happen, which would have a bad impact on performance.
-
- 21 Dec, 2007 1 commit
-
-
Tiago Peixoto authored
Everything was moved into the graph_tool directory, which should have, after installation, the following structure: graph_tool/ Top-level package __init__.py Initialize the graph_tool package libgraph_tool.so libgraph_tool submodule libgraph_tool.la libtool file for libgraph_tool include/ C++ include files for dynamically compiled code
-
- 17 Dec, 2007 1 commit
-
-
Tiago Peixoto authored
Some visibility voodoo is necessary to ensure that RTTI work properly across DSO boundaries, which is necessary to properly handle dynamic property maps and such. Additionally, the action template must have a different name each time the action code changes, to avoid additional weirdness. This also adds some other utility functions/typedefs to make writing "inline" c++ code easier.
-
- 14 Dec, 2007 1 commit
-
-
Tiago Peixoto authored
It is now possible to run arbitrary "inline" C++ code from python, using scipy.weave, as such: g = graph_tool.Graph() g.load("foo.xml") value = 2.0 g.run_action('cout << num_vertices(g) << " " << value << endl;', ["value"]); The code gets compiled the first time, and is reused after that. Python local and global variables can be passed to C++, as shown above, by specifying a list of passed variables as the second argument.
-
- 26 Nov, 2007 1 commit
-
-
Tiago Peixoto authored
Vertices and edges can be accessed from the graph class, as such: import graph_tool g = graph_tool.Graph() for v in g.vertices(): for e in v.out_edges(): # do something... Additionally, the --edit-{vertex|edge|graph}-property was ported to the new interface, and is working again, as it used to. The Vertex and Edge class no longer have the 'get_property' and 'set_property' method. They'll be replaced by a new method of accessing property maps.
-
- 23 Oct, 2007 1 commit
-
- 07 Oct, 2007 1 commit
-
-
Tiago Peixoto authored
Remove graph rewiring for now, since it's quite buggy. It will be re-commited when ready.
-
- 04 Oct, 2007 1 commit
-
-
Tiago Peixoto authored
Simplify range filtering, and definitely remove python filtering Simplify range filtering of vertices and edges, by always filtering both at once, even if all vertices or edges are being considered. This severely reduces compilation time and memory, at a small potential cost in run-time speed, which will probably be overshadowed by other things, such as dynamic_map look-ups ("premature optimization is the root of all evil"). Also, remove python-filtering, since, in the end, it is just code bloat, since it is quite slow for most uses and can be replaced, generally, by python property editing + range filtering.
-
- 09 Aug, 2007 1 commit
-
-
Tiago Peixoto authored
* src/boost-workaround/boost/graph/kamada_kawai_spring_layout.hpp: annotated code with openmp constructs. * src/graph/graph_adaptor.hh: graph_type should be a typedef to the original graph. * src/graph/graph_properties.hh, src/graph/graph_properties.cc: added pos_t type. * src/boost-workaround/boost/graph/fruchterman_reingold.hpp: annotated code with openmp constructs. * src/graph/graph_layout.cc: new file with graph layout routines. * src/graph/graph.cc: removed graph layout routines. * src/graph/graph_community_network.cc (struct get_community_network): fixed inversion of directedness test. * src/graph/graph.cc (GraphInterface::LabelComponents): use vector_property_map instead of HashedDescriptor. Don't use a static map! * src/graph/graph_adaptor.hh: fixed edge descriptor equality comparison, which must rely on underlying edge, regardless of whether it's inverted or not. git-svn-id: https://svn.forked.de/graph-tool/trunk@121 d4600afd-f417-0410-95de-beed9576f240
-
- 30 Jul, 2007 1 commit
-
-
Tiago Peixoto authored
* src/Makefile.am: removed 'boost_workaround' dist files * src/graph/graph_rewiring.cc: deleted blank lines. git-svn-id: https://svn.forked.de/graph-tool/trunk@116 d4600afd-f417-0410-95de-beed9576f240
-
- 11 Jul, 2007 1 commit
-
-
Tiago Peixoto authored
* ChangeLog: updated ChangeLog file with svn history * src/graph/graph_filtering.hh: added add_edge() and remove_edge() functions for filtered graphs * src/graph/shared_map.hh: included SharedContainer * src/graph/graph_rewiring.cc: initial support for random graph rewiring git-svn-id: https://svn.forked.de/graph-tool/trunk@114 d4600afd-f417-0410-95de-beed9576f240
-
- 30 Jun, 2007 1 commit
-
-
Tiago Peixoto authored
* change from HashedDescriptorMap to vector_property_map in several algorithms to save memory and increase speed in the most common case, where the graph is unfiltered. git-svn-id: https://svn.forked.de/graph-tool/trunk@102 d4600afd-f417-0410-95de-beed9576f240
-
- 15 Jun, 2007 1 commit
-
-
Tiago Peixoto authored
* further code parellelization with openmp (vertex and edge histograms, correlations, and reciprocity) git-svn-id: https://svn.forked.de/graph-tool/trunk@99 d4600afd-f417-0410-95de-beed9576f240
-
- 18 May, 2007 1 commit
-
-
Tiago Peixoto authored
* src/graph/graph_clustering.cc * src/graph/graph_distance.cc * src/graph/graph_extended_clustering.cc * src/graph/graph_distance_sampled.cc * fixed "jacknife" variance bug in src/graph/graph_clustering.cc git-svn-id: https://svn.forked.de/graph-tool/trunk@97 d4600afd-f417-0410-95de-beed9576f240
-
- 12 Apr, 2007 1 commit
-
-
Tiago Peixoto authored
git-svn-id: https://svn.forked.de/graph-tool/trunk@78 d4600afd-f417-0410-95de-beed9576f240
-
- 12 Jan, 2007 1 commit
-
-
Tiago Peixoto authored
git-svn-id: https://svn.forked.de/graph-tool/trunk@63 d4600afd-f417-0410-95de-beed9576f240
-
- 12 Nov, 2006 1 commit
-
-
Tiago Peixoto authored
* Added line graph generation * src/graph-tool: some code de-uglification * src/graph-tool: terminal output format changes git-svn-id: https://svn.forked.de/graph-tool/trunk@56 d4600afd-f417-0410-95de-beed9576f240
-
- 24 Sep, 2006 1 commit
-
-
Tiago Peixoto authored
* fix ticket [9] * fix --for bug with multiple options with different parameters * Add initial support for community detection (ticket [6]) git-svn-id: https://svn.forked.de/graph-tool/trunk@47 d4600afd-f417-0410-95de-beed9576f240
-
- 04 Sep, 2006 1 commit
-
-
Tiago Peixoto authored
* Range filters now support all kinds of scalar properties without falling back to python code git-svn-id: https://svn.forked.de/graph-tool/trunk@46 d4600afd-f417-0410-95de-beed9576f240
-
- 03 Sep, 2006 1 commit
-
-
Tiago Peixoto authored
* python_filtering: added n_parallel() function git-svn-id: https://svn.forked.de/graph-tool/trunk@45 d4600afd-f417-0410-95de-beed9576f240
-
- 16 Aug, 2006 1 commit
-
-
Tiago Peixoto authored
* add GetSampledDistanceHistogram (in src/graph/graph_distance_sampled.cc) * fix BFS initialization bug in src/graph/graph_extended_clustering.cc git-svn-id: https://svn.forked.de/graph-tool/trunk@38 d4600afd-f417-0410-95de-beed9576f240
-
- 15 Aug, 2006 1 commit
-
-
Tiago Peixoto authored
* separated graphml code into graphml.hpp and graphml.cpp, and added support for default property values * added HashedDescriptorMap with automatic memory management git-svn-id: https://svn.forked.de/graph-tool/trunk@36 d4600afd-f417-0410-95de-beed9576f240
-
- 13 Aug, 2006 1 commit
-
-
Tiago Peixoto authored
* definition of HashedDescriptorMap git-svn-id: https://svn.forked.de/graph-tool/trunk@34 d4600afd-f417-0410-95de-beed9576f240
-
- 09 Aug, 2006 1 commit
-
-
Tiago Peixoto authored
* put combined degree correlation stuff in src/graph/graph_correlations_combined.cc * some code cleanups in src/graph-tool git-svn-id: https://svn.forked.de/graph-tool/trunk@29 d4600afd-f417-0410-95de-beed9576f240
-
- 01 Aug, 2006 1 commit
-
-
Tiago Peixoto authored
* average distances now accept weights * added DynamicPropertyMapWrap git-svn-id: https://svn.forked.de/graph-tool/trunk@17 d4600afd-f417-0410-95de-beed9576f240
-
- 10 Jul, 2006 1 commit
-
-
Tiago Peixoto authored
git-svn-id: https://svn.forked.de/graph-tool/trunk@1 d4600afd-f417-0410-95de-beed9576f240
-