Skip to content

retworkx 0.6.0

Compare
Choose a tag to compare
@mtreinish mtreinish released this 12 Nov 12:49
0.6.0
635bf2e

This release includes a number of new features and bug fixes. The main focus of this release was to expand the retworkx API functionality to include some commonly needed functions that were missing.

This release is also the first release to provide full support for running with Python 3.9. On previous releases Python 3.9 would likely work, but it would require building retworkx from source. Also this will likely be the final release that supports Python 3.5.

Added

  • Two new functions, digraph_k_shortest_path() and graph_k_shortest_path(), for finding the k shortest path lengths from a node in a PyDiGraph and PyGraph.
  • A new method, is_symmetric(), to the PyDiGraph class. This method will check whether the graph is symmetric or not
  • A new kwarg, as_undirected, was added to the digraph_floyd_warshall_numpy() function. This can be used to treat the input PyDiGraph object as if it was undirected for the generated output matrix.
  • A new function, digraph_find_cycle(), which will return the first cycle during a depth first search of a PyDiGraph object.
  • Two new functions, directed_gnm_random_graph() and undirected_gnm_random_graph(), for generating random G(n, m) graphs.
  • A new method, remove_edges_from(), was added to PyDiGraph and PyGraph. This can be used to remove multiple edges from a graph object in a single call.
  • A new method, subgraph(), was added to PyDiGraph and PyGraph which takes in a list of node indices and will return a new object of the same type representing a subgraph containing the node indices in that list.
  • Added support for running with Python 3.9
  • A new method, to_undirected(), was added to PyDiGraph. This method will generate an undirected PyGraphobject from thePyDiGraph` object.
  • A new kwarg, bidirectional, was added to the directed generator functions directed_cycle_graph(), directed_path_graph(), and directed_star_graph(). When set to True the directed graphs generated by these functions will add edges in both directions.
  • Added two new functions, is_weakly_connected() and weakly_connected_components(), which will either check if a PyDiGraph object is weakly connected or return the list of the weakly connected components of an input PyDiGraph.
  • The weight_fn kwarg for graph_adjacency_matrix(), digraph_adjacency_matrix(), graph_floyd_warshall_numpy(), and digraph_floyd_warshall_numpy() is now optional. Previously it always had to be specified when calling these function. But instead you can now rely on a default weight float (which defaults to 1.0) to be used for all the edges in the graph.
  • Add a neighbors() method to PyGraph and PyDiGraph. This function will return the node indices of the neighbor nodes for a given input node.
  • Two new methods, successor_indices() and predecessor_indices(), were added to PyDiGraph. These methods will return the node indices for the successor and predecessor nodes of a given input node.
  • Two new functions, graph_distance_matrix() and digraph_distance_matrix(), were added for generating a distance matrix from an input PyGraph and PyDiGraph.
  • Two new functions, digraph_dijkstra_shortest_paths() and graph_dijkstra_shortest_path(), were added for returning the shortest
    paths from a node in a PyDiGraph and a PyGraph object.
  • Two new methods, insert_node_on_in_edges() and insert_node_on_out_edges(), were added to PyDiGraph. These functions
    are used to insert an existing node in between an reference node and all it's predecessors or successors.
  • Two new functions, graph_dfs_edges() and digraph_dfs_edges(), were added to get an edge list in depth first order from a PyGraph and
    PyDiGraph.

Upgrade

  • The numpy arrays returned by graph_floyd_warshall_numpy(), digraph_floyd_warshall_numpy(), digraph_adjacency_matrix(), and graph_adjacency_matrix() will now be in a contiguous C array memory layout. Previously they would return arrays in a column-major fortran layout. This was change was made to make it easier to interface the arrays returned by these functions with other C Python extensions. There should be no change when interacting with the numpy arrays via numpy's API.
  • The bfs_successors() method now returns an object of a custom type BFSSuccessors instead of a list. The BFSSuccessors type implements the Python sequence protocol so it can be used in place like a list (except for where explicit type checking is used). This was done to defer the type conversion between Rust and Python since doing it all at once can be a performance bottleneck especially for large graphs. The BFSSuccessors class will only do the type conversion when an element is accessed.

Fixes

  • When pickling PyDiGraph objects the original node indices will be preserved across the pickle.
  • The random gnp functions, directed_gnp_random_graph() and undirected_gnp_random_graph(), will now also handle exact 0 or 1
    probabilities. Previously it would fail in these cases. Fixes #172