1. 11 Apr, 2012 1 commit
  2. 27 May, 2011 1 commit
  3. 10 Feb, 2011 1 commit
  4. 02 Feb, 2011 1 commit
  5. 04 Dec, 2010 1 commit
  6. 24 Nov, 2010 1 commit
  7. 13 Nov, 2010 1 commit
  8. 30 Jul, 2010 1 commit
  9. 28 Jul, 2010 1 commit
  10. 21 May, 2010 1 commit
  11. 07 Mar, 2010 1 commit
  12. 18 Sep, 2009 1 commit
    • Tiago Peixoto's avatar
      Edge and vertex descriptors now carry a weakref to their Graphs · c6c01d62
      Tiago Peixoto authored
      This fixes an obvious problem, where the graph gets deleted, and the
      descriptors are still lying around. Usage of orphaned descriptors will
      now just raise a ValueError.
      
      The __repr__ function of Edge, Vertex, and PropertyMap now give
      something more informative about each object.
      c6c01d62
  13. 03 Sep, 2009 1 commit
  14. 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
  15. 13 Aug, 2009 1 commit
    • Tiago Peixoto's avatar
      Reorganize exceptions thrown · f257d426
      Tiago Peixoto authored
      No longer only thrown GraphError upon any error, but instead throw
      specific exceptions which are more meaninful and are mapped to standard
      python exceptions, such as IOError, ValueError and RuntimeError.
      f257d426
  16. 02 Aug, 2009 1 commit
  17. 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
  18. 06 Feb, 2009 4 commits
    • Tiago Peixoto's avatar
      Improve run_action module · 0c87c492
      Tiago Peixoto authored
      Now inline() automatically converts known variables (such as property
      maps) and defaults to boost::python objects, instead of scxx objects.
      
      The code now is only generated for the current filtered, reversed and/or
      directed status of the graph, reducing compile time and binary size.
      
      Edge modification (remove and add) is now protected by a GraphWrap
      class, which takes care of the edge index housekeeping, which does not
      need to be done by hand anymore.
      
      The function is also no longer bound to one graph, and can take an
      arbitrary number of variables of known or unknown types, including
      graphs.
      0c87c492
    • Tiago Peixoto's avatar
      Fix symbol visibility · d6422b73
      Tiago Peixoto authored
      Now all symbols are exported by default, except those strictly marked
      as hidden.
      d6422b73
    • Tiago Peixoto's avatar
      Add direct support for degree propery map creation · 8ae75c9f
      Tiago Peixoto authored
      i.e. g.degree_property_map("in") will create and return a vertex property map
      which corresponds to the in-degrees of the vertices. This is useful for
      temporarily modifying or getting an array of degrees.
      8ae75c9f
    • Tiago Peixoto's avatar
      Add support for array access to property maps · e84aaf3c
      Tiago Peixoto authored
      A property map object has now a get_array() member which returns an internally
      owned array pointing to the property values.
      e84aaf3c
  19. 02 Dec, 2008 1 commit
  20. 21 Jul, 2008 1 commit
  21. 15 Jul, 2008 1 commit
  22. 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
  23. 06 May, 2008 1 commit
  24. 01 May, 2008 1 commit
  25. 15 Apr, 2008 1 commit
  26. 14 Apr, 2008 1 commit
    • Tiago Peixoto's avatar
      Fix run_action · ee25eabe
      Tiago Peixoto authored
      A couple of bugs fixed. Local frame dict is read-only in python, so the
      updated arguments are returned in a dict instead.
      ee25eabe
  27. 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
  28. 27 Mar, 2008 1 commit
    • Tiago Peixoto's avatar
      Port graph I/O to new filtering engine, enable graph pickling, and fix several issues · 99bf21c8
      Tiago Peixoto authored
      Now graphml files properly contain all the supported value types, which
      are all perfectly preserved when read (floating point data is now saved
      in hexadecimal format). Several other improvements were made, such as
      the ability to read and write to python file-like objects.
      
      It is also now possible to have arbitrary python object properties, and
      store them persistently (which is done internally with the pickling
      interface).
      
      vector<bool> was totally abolished, since its implementation is quite
      broken. See: http://www.gotw.ca/publications/N1211.pdf and
      http://www.gotw.ca/publications/N1185.pdf Now a uint8_t (aka. char) is
      used in graph properties instead of a bool.
      
      Graph types can now be fully pickled (this may not be feasible
      memory-wise if the graph is too large, since the whole XML
      representation is dumped to a string before it is saved on disc).
      99bf21c8
  29. 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
  30. 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
  31. 21 Dec, 2007 1 commit
    • Tiago Peixoto's avatar
      Directory restructuring of graph_tool Python module (now a package) · 4a7da8a9
      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
      4a7da8a9
  32. 13 Dec, 2007 1 commit
  33. 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
  34. 26 Nov, 2007 1 commit
    • Tiago Peixoto's avatar
      Further improvement of python interface · 06358b7c
      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.
      06358b7c
  35. 04 Nov, 2007 1 commit
  36. 23 Oct, 2007 1 commit
  37. 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