1. 02 May, 2012 1 commit
  2. 10 Feb, 2011 1 commit
  3. 02 Feb, 2011 1 commit
  4. 13 Nov, 2010 1 commit
  5. 07 Mar, 2010 1 commit
  6. 21 Aug, 2009 1 commit
    • Tiago Peixoto's avatar
      Dump lambda::bind in favor of boost::bind · 7fb5d71d
      Tiago Peixoto authored
      This is a large commit which replaces lambda::bind with boost::bind in
      most parts of the code. This improves compilation time, and slightly
      decreases compilation memory usage in some cases.
      7fb5d71d
  7. 10 Mar, 2009 1 commit
    • Tiago Peixoto's avatar
      Implement optional wrapping of graphs to deal with edge index housekeeping · 684efca7
      Tiago Peixoto authored
      Thins changes the graph filtering code slightly to wrap graph types with
      GraphWrap, which automatically updates the edge index list when edges
      are removed and added to the graph.
      
      This also changes how graphs are passed to algorithms, which is now by
      reference instead of pointer. (hence this touches lots of code, but
      changes are trivial)
      684efca7
  8. 06 Feb, 2009 2 commits
    • Tiago Peixoto's avatar
      Fix edge index housekeeping · ba56ebd9
      Tiago Peixoto authored
      ba56ebd9
    • Tiago Peixoto's avatar
      Disable internal bounds checking in property maps · 0ababf9c
      Tiago Peixoto authored
      This includes a new vector property map type (fast_vector_property_map)
      which has optional disabling of bounds checking, through its associate
      map type (unchecked_fast_vector_property_map). This should improve
      performance on algorithms which depend on tight loops which access
      property maps.
      
      Bounds checking is only disabled locally just before the algorithms run,
      and proper care is taken for bounds checking _beforehand_. The property
      maps exposed to python still have internal bounds checking.
      0ababf9c
  9. 18 Jan, 2009 1 commit
  10. 17 Jun, 2008 1 commit
    • Tiago Peixoto's avatar
      Externalize property maps by default · e984bf8e
      Tiago Peixoto authored
      This commit removes the internal property maps from the GraphInterface
      class, and makes all property maps external by default. The internal
      property maps were moved to the python layer.
      e984bf8e
  11. 10 Apr, 2008 1 commit
    • Tiago Peixoto's avatar
      Correlations algorithms refactoring · 360a3395
      Tiago Peixoto authored
      The whole histogram code has been redone, and the code has been
      simplified. The three-point vertex-edge-vertex correlation has been
      scrapped, since it's not frequently used, and would make compilation
      even more expensive.
      
      This also adds some missing files to the generation routine.
      360a3395
  12. 17 Feb, 2008 1 commit
    • Tiago Peixoto's avatar
      Split libgraph_tool into sub-modules and add test cases · 3cfff0cb
      Tiago Peixoto authored
      This commit splits libraph_tool into different libraries:
       
         - libgraph_tool_core
         - libgraph_tool_clustering (*)
         - libgraph_tool_community (*)
         - libgraph_tool_correlations (*)
         - libgraph_tool_distance (*)
         - libgraph_tool_generation (*)
         - libgraph_tool_layout (*)
         - libgraph_tool_misc (*)
         - libgraph_tool_stats (*)
      
      It also adds the python sub-module 'test', which provides extensive unit
      testing of the core functionality. The core library is fully functional
      and all test pass successfully.
      
      (*) -> module needs to be ported to new refactoring, and does not yet build
      3cfff0cb
  13. 10 Feb, 2008 1 commit
    • Tiago Peixoto's avatar
      Refactor metaprogramming engine · 0b66e272
      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.
      0b66e272
  14. 22 Jan, 2008 1 commit
  15. 13 Dec, 2007 1 commit
  16. 30 Nov, 2007 1 commit
    • Tiago Peixoto's avatar
      Further improvements of the python interface · 1a0e9b5f
      Tiago Peixoto authored
      Property maps can now be obtained as such:
      
               weight = g.edge_properties['weight']
               print weight[v] # v is a Vertex object
               weight[v] = 2.0
               # and so on...
      
      The list of properties is obtained from g.vertex_properties,
      g.edge_properties and g.graph_properties, which can be read as
      dictionaries. The last can be set also, as such:
      
               g.graph_properties = {foo:"bar", baz:42}
      
      Functions to add and remove vertices or adges were also added
      (add_{vertex|edge}, remove_{vertex|edgge}).
      
      Vertex and Edge types can also now be printed for convenience, as such:
      
             for v in g.vertices():
                 print v
             for e in g.edges():
                 print e
      
      which results, for example, in:
      0
      1
      2
      3
      4
      5
      6
      (0,1)
      (1,2)
      (2,6)
      (3,4)
      (4,5)
      (4,2)
      (5,6)
      (6,1)
      
      (this also adds the forgotten graph_tool.py file, which was previously
      on .gitignore)
      1a0e9b5f
  17. 10 Nov, 2007 1 commit
  18. 04 Nov, 2007 2 commits
  19. 24 Oct, 2007 2 commits
    • Tiago Peixoto's avatar
      Fix Set{Vertex|Edge}FilterRange() when boundaries are -inf · 8ed48c65
      Tiago Peixoto authored
      This fixes the same problem as commit 6663be71, but which arises
      when a filter range boundary is -inf (such as "<=100").
      8ed48c65
    • Tiago Peixoto's avatar
      Fix vertex and edge filtering, when only one is active · 300d6f4a
      Tiago Peixoto authored
          
      When only one of vertex or edge filtering was disabled, the allowed
      range of the disabled filter was set to
      ]numeric_limits<double>::min(), numeric_limits<double>::max()[, and
      the selected filtering property was the respective index. But
      according to the STL documentation from GCC,
      numeric_limits<>::min() returns:
          
         "The minimum finite value, or for floating types with
          denormalization, the minimum positive normalized value."
          
      which is always positive for double (!), thus introducing a weird
      regression, where the first vertex (index 0) is always filtered out if
      only the edge filter is active, and vice-versa.
      300d6f4a
  20. 12 Oct, 2007 1 commit
    • Tiago Peixoto's avatar
      Added --purge-edges and --purge-vertices option · 23e319bf
      Tiago Peixoto authored
          
      Filtered vertices and edges can be permanently removed from the graph
      with --purge-vertices and --purge-edges, respectively. The edge or
      vertex filter is automatically removed, afterwards. This is useful if
      maximum speed is necessary, and saving and reloading the graph without
      filtering is not desired.
          
      (this commit also removes some trailing whitespaces)
      23e319bf
  21. 07 Oct, 2007 1 commit
    • Tiago Peixoto's avatar
      Complete overhaul of command line parsing, and support for loading graph-tool... · cb61cc74
      Tiago Peixoto authored
      Complete overhaul of command line parsing, and support for loading graph-tool as whole as a python module
          
      The command line parsing was completely rewritten. It now supports
      better parsing of sub-options, with type checking and grouping
      support. Error reporting was also significantly improved, and it now
      warns of invalid options and option values, before the option is
      executed. Some syntax has changed, such as range filtering:
      --[vertex|edge]-range-filter was replaced by
      --exclude-[vertex|edge]-range and --keep-[vertex|edge]-range, which
      should have a clearer meaning. Ranges can also be specified now by
      comparison operators (>,<,>=,<=,=), such as ">=10", to indicate a
      range of (10, inf). In addition, ranges can now be easily open or
      closed at either end, by suffixing the specific end with '*', to
      indicate it is closed, ex: "10 700*" means (10,700].
          
      The graph-tool script can now be loaded as a python module (it must be
      renamed first to 'something.py'). All the command line options (except
      'for' and 'history' which become irrelevant) are available as
      functions, with full description and optional parameter support. In
      addition, pure function objects can be given as parameters where
      expressions are asked, instead of strings and files, which enables
      convenient extension of graph-tool.
      cb61cc74
  22. 04 Oct, 2007 1 commit
    • Tiago Peixoto's avatar
      · 8e962092
      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.
      8e962092
  23. 09 Aug, 2007 1 commit
    • Tiago Peixoto's avatar
      * src/graph-tool: change layout and community graph options. · c3a6567d
      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
      c3a6567d
  24. 01 Aug, 2007 2 commits
  25. 07 Jul, 2007 1 commit
  26. 30 Jun, 2007 1 commit
  27. 15 Jun, 2007 1 commit
  28. 30 Jan, 2007 1 commit
  29. 29 Jan, 2007 1 commit
  30. 25 Jan, 2007 1 commit
  31. 15 Nov, 2006 1 commit
  32. 14 Nov, 2006 1 commit
  33. 13 Nov, 2006 1 commit
  34. 31 Oct, 2006 1 commit
  35. 05 Oct, 2006 1 commit
  36. 04 Sep, 2006 1 commit