1 2petgraph 3======== 4 5Graph data structure library. Known to support Rust 1.37 and later. 6 7Please read the `API documentation here`__ 8 9__ https://docs.rs/petgraph/ 10 11|build_status|_ |crates|_ 12 13.. |build_status| image:: https://travis-ci.org/petgraph/petgraph.svg?branch=master 14.. _build_status: https://travis-ci.org/petgraph/petgraph 15 16.. |crates| image:: http://meritbadge.herokuapp.com/petgraph 17.. _crates: https://crates.io/crates/petgraph 18 19Crate feature flags: 20 21- ``graphmap`` (default) enable ``GraphMap``. 22- ``stable_graph`` (default) enable ``StableGraph``. 23- ``matrix_graph`` (default) enable ``MatrixGraph``. 24- ``serde-1`` (optional) enable serialization for ``Graph, StableGraph`` using 25 serde 1.0. Requires Rust version as required by serde. 26 27Recent Changes 28-------------- 29 30- 0.5.1 31 32 - Implement ``Default`` for traversals. 33 - Export ``EdgesConnecting`` publicly. 34 - Implement ``is_bipartite_graph``. 35 - Add ``FilterNode`` implementation for ``FixedBitSet`` and ``HashSet``. 36 - Implement ``node_weights_mut`` and ``edge_weights_mut`` for ``StableGraph``. 37 - Add configurable functions for adding attributes to dotfile features. 38 39- 0.5.0 40 41 - Breaking changes: 42 43 - The iterative DFS implementation, ``Dfs``, now marks nodes visited when 44 they are pushed onto the stack, not when they're popped off. This may 45 require changes to callers that use ``Dfs::from_parts`` or manipulate 46 its internals. 47 - The ``IntoEdgesDirected`` trait now has a stricter contract for 48 undirected graphs. Custom implementations of this trait may have to be 49 updated. See the `trait documentation`__ for more. 50 51 - Other changes: 52 53 - Upgrade to Rust 2018 edition 54 - Fix clippy warnings and unify code formatting 55 - Improved and enhanced documentation 56 - Update dependencies including modern quickcheck 57 - Numerous bugfixes and refactorings 58 - Added ``MatrixGraph`` implementation 59 60__ https://docs.rs/petgraph/0.5/petgraph/visit/trait.IntoEdgesDirected.html 61 62- 0.4.13 63 64 - Fix clippy warnings by @jonasbb 65 - Add docs for ``Csr`` by @ksadorf 66 - Fix conflict with new stable method ``find_map`` in new Rust 67 68- 0.4.12 69 70 - Newtype ``Time`` now also implements ``Hash`` 71 - Documentation updates for ``Frozen``. 72 73- 0.4.11 74 75 - Fix ``petgraph::graph::NodeReferences`` to be publicly visible 76 - Small doc typo and code style files by @shepmaster and @waywardmonkeys 77 - Fix a future compat warning with pointer casts 78 79- 0.4.10 80 81 - Add graph trait ``IntoEdgesDirected`` 82 - Update dependencies 83 84- 0.4.9 85 86 - Fix ``bellman_ford`` to work correctly with undirected graphs (#152) by 87 @carrutstick 88 - Performance improvements for ``Graph, Stablegraph``'s ``.map()``. 89 90- 0.4.8 91 92 - ``StableGraph`` learned new methods nearing parity with ``Graph``. Note 93 that the ``StableGraph`` methods preserve index stability even in the batch 94 removal methods like ``filter_map`` and ``retain_edges``. 95 96 + Added ``.filter_map()``, which maps associated node and edge data 97 + Added ``.retain_edges()``, ``.edge_indices()`` and ``.clear_edges()`` 98 99 - Existing ``Graph`` iterators gained some trait impls: 100 101 + ``.node_indices(), .edge_indices()`` are ``ExactSizeIterator`` 102 + ``.node_references()`` is now 103 ``DoubleEndedIterator + ExactSizeIterator``. 104 + ``.edge_references()`` is now ``ExactSizeIterator``. 105 106 - Implemented ``From<StableGraph>`` for ``Graph``. 107 108- 0.4.7 109 110 - New algorithm by @jmcomets: A* search algorithm in ``petgraph::algo::astar`` 111 - One ``StableGraph`` bug fix whose patch was supposed to be in the previous 112 version: 113 114 + ``add_edge(m, n, _)`` now properly always panics if nodes m or n don't 115 exist in the graph. 116 117- 0.4.6 118 119 - New optional crate feature: ``"serde-1"``, which enables serialization 120 for ``Graph`` and ``StableGraph`` using serde. 121 - Add methods ``new``, ``add_node`` to ``Csr`` by @jmcomets 122 - Add indexing with ``[]`` by node index, ``NodeCompactIndexable`` for 123 ``Csr`` by @jmcomets 124 - Amend doc for ``GraphMap::into_graph`` (it has a case where it can panic) 125 - Add implementation of ``From<Graph>`` for ``StableGraph``. 126 - Add implementation of ``IntoNodeReferences`` for ``&StableGraph``. 127 - Add method ``StableGraph::map`` that maps associated data 128 - Add method ``StableGraph::find_edge_undirected`` 129 - Many ``StableGraph`` bug fixes involving node vacancies (holes left by 130 deletions): 131 132 + ``neighbors(n)`` and similar neighbor and edge iterator methods now 133 handle n being a vacancy properly. (This produces an empty iterator.) 134 + ``find_edge(m, n)`` now handles m being a vacancy correctly too 135 + ``StableGraph::node_bound`` was fixed for empty graphs and returns 0 136 137 - Add implementation of ``DoubleEndedIterator`` to ``Graph, StableGraph``'s 138 edge references iterators. 139 - Debug output for ``Graph`` now shows node and edge count. ``Graph, StableGraph`` 140 show nothing for the edges list if it's empty (no label). 141 - ``Arbitrary`` implementation for ``StableGraph`` now can produce graphs with 142 vacancies (used by quickcheck) 143 144- 0.4.5 145 146 - Fix ``max`` ambiguity error with current rust nightly by @daboross (#153) 147 148- 0.4.4 149 150 - Add ``GraphMap::all_edges_mut()`` iterator by @Binero 151 - Add ``StableGraph::retain_nodes`` by @Rupsbant 152 - Add ``StableGraph::index_twice_mut`` by @christolliday 153 154- 0.4.3 155 156 - Add crate categories 157 158- 0.4.2 159 160 - Move the ``visit.rs`` file due to changed rules for a module’s directory 161 ownership in Rust, resolving a future compat warning. 162 - The error types ``Cycle, NegativeCycle`` now implement ``PartialEq``. 163 164- 0.4.1 165 166 - Add new algorithm ``simple_fast`` for computing dominators in a control-flow 167 graph. 168 169- 0.4.0 170 171 - Breaking changes in ``Graph``: 172 173 - ``Graph::edges`` and the other edges methods now return an iterator of 174 edge references 175 176 - Other breaking changes: 177 178 - ``toposort`` now returns an error if the graph had a cycle. 179 - ``is_cyclic_directed`` no longer takes a dfs space argument. It is 180 now recursive. 181 - ``scc`` was renamed to ``kosaraju_scc``. 182 - ``min_spanning_tree`` now returns an iterator that needs to be 183 made into a specific graph type deliberately. 184 - ``dijkstra`` now uses the ``IntoEdges`` trait. 185 - ``NodeIndexable`` changed its method signatures. 186 - ``IntoExternals`` was removed, and many other smaller adjustments 187 in graph traits. ``NodeId`` must now implement ``PartialEq``, for example. 188 - ``DfsIter, BfsIter`` were removed in favour of a more general approach 189 with the ``Walker`` trait and its iterator conversion. 190 191 - New features: 192 193 - New graph traits, for example ``IntoEdges`` which returns 194 an iterator of edge references. Everything implements the graph traits 195 much more consistently. 196 - Traits for associated data access and building graphs: ``DataMap``, 197 ``Build, Create, FromElements``. 198 - Graph adaptors: ``EdgeFiltered``. ``Filtered`` was renamed to ``NodeFiltered``. 199 - New algorithms: bellman-ford 200 - New graph: compressed sparse row (``Csr``). 201 - ``GraphMap`` implements ``NodeIndexable``. 202 - ``Dot`` was generalized 203 204- 0.3.2 205 206 - Add ``depth_first_search``, a recursive dfs visitor that emits discovery, 207 finishing and edge classification events. 208 - Add graph adaptor ``Filtered``. 209 - impl ``Debug, NodeIndexable`` for ``Reversed``. 210 211- 0.3.1 212 213 - Add ``.edges(), .edges_directed()`` to ``StableGraph``. Note that these 214 differ from ``Graph``, because this is the signature they will all use 215 in the future. 216 - Add ``.update_edge()`` to ``StableGraph``. 217 - Add reexports of common items in ``stable_graph`` module (for example 218 ``NodeIndex``). 219 - Minor performance improvements to graph iteration 220 - Improved docs for ``visit`` module. 221 222- 0.3.0 223 224 - Overhaul all graph visitor traits so that they use the ``IntoIterator`` 225 style. This makes them composable. 226 227 - Multiple graph algorithms use new visitor traits. 228 - **Help is welcome to port more algorithms (and create new graph traits in 229 the process)!** 230 231 - ``GraphMap`` can now have directed edges. ``GraphMap::new`` is now generic 232 in the edge type. ``DiGraphMap`` and ``UnGraphMap`` are new type aliases. 233 - Add type aliases ``DiGraph, UnGraph, StableDiGraph, StableUnGraph`` 234 - ``GraphMap`` is based on the indexmap crate. Deterministic iteration 235 order, faster iteration, no side tables needed to convert to ``Graph``. 236 - Improved docs for a lot of types and functions. 237 - Add graph visitor ``DfsPostOrder`` 238 - ``Dfs`` gained new methods ``from_parts`` and ``reset``. 239 - New algo ``has_path_connecting``. 240 - New algo ``tarjan_scc``, a second scc implementation. 241 - Document traversal order in ``Dfs, DfsPostOrder, scc, tarjan_scc``. 242 - Optional graph visitor workspace reuse in ``has_path_connecting``, 243 ``is_cyclic_directed, toposort``. 244 - Improved ``Debug`` formatting for ``Graph, StableGraph``. 245 - Add a prelude module 246 - ``GraphMap`` now has a method ``.into_graph()`` that makes a ``Graph``. 247 - ``Graph::retain_nodes, retain_edges`` now expose the self graph only 248 as wrapped in ``Frozen``, so that weights can be mutated but the 249 graph structure not. 250 - Enable ``StableGraph`` by default 251 - Add method ``Graph::contains_edge``. 252 - Renamed ``EdgeDirection`` → ``Direction``. 253 - Remove ``SubTopo``. 254 - Require Rust 1.12 or later 255 256- 0.2.10 257 258 - Fix compilation with rust nightly 259 260- 0.2.9 261 262 - Fix a bug in SubTopo (#81) 263 264- 0.2.8 265 266 - Add Graph methods reserve_nodes, reserve_edges, reserve_exact_nodes, 267 reserve_exact_edges, shrink_to_fit_edges, shrink_to_fit_nodes, shrink_to_fit 268 269- 0.2.7 270 271 - Update URLs 272 273- 0.2.6 274 275 - Fix warning about type parameter defaults (no functional change) 276 277- 0.2.5 278 279 - Add SubTopo, a topo walker for the subgraph reachable from a starting point. 280 - Add condensation, which forms the graph of a graph’s strongly connected 281 components. 282 283- 0.2.4 284 285 - Fix an algorithm error in scc (#61). This time we have a test that 286 crosschecks the result of the algorithm vs another implementation, for 287 greater confidence in its correctness. 288 289- 0.2.3 290 291 - Require Rust 1.6: Due to changes in how rust uses type parameter defaults. 292 - Implement Graph::clone_from. 293 294- 0.2.2 295 296 - Require Rust 1.5 297 - ``Dot`` passes on the alternate flag to node and edge label formatting 298 - Add ``Clone`` impl for some iterators 299 - Document edge iteration order for ``Graph::neighbors`` 300 - Add *experimental feature* ``StableGraph``, using feature flag ``stable_graph`` 301 302- 0.2.1 303 304 - Add algorithm ``is_isomorphic_matching`` 305 306- 0.2.0 307 308 - New Features 309 310 - Add Graph::neighbors().detach() to step edges without borrowing. 311 This is more general than, and replaces now deprecated 312 walk_edges_directed. (#39) 313 - Implement Default for Graph, GraphMap 314 - Add method EdgeDirection::opposite() 315 316 - Breaking changes 317 318 - Graph::neighbors() for undirected graphs and Graph::neighbors_undirected 319 for any graph now visit self loop edges once, not twice. (#31) 320 - Renamed Graph::without_edges to Graph::externals 321 - Removed Graph::edges_both 322 - GraphMap::add_edge now returns ``Option<E>`` 323 - Element type of ``GraphMap<N, E>::all_edges()`` changed to ``(N, N, &E)`` 324 325 - Minor breaking changes 326 327 - IntoWeightedEdge changed a type parameter to associated type 328 - IndexType is now an unsafe trait 329 - Removed IndexType::{one, zero}, use method new instead. 330 - Removed MinScored 331 - Ptr moved to the graphmap module. 332 - Directed, Undirected are now void enums. 333 - Fields of graphmap::Edges are now private (#19) 334 335- 0.1.18 336 337 - Fix bug on calling GraphMap::add_edge with existing edge (#35) 338 339- 0.1.17 340 341 - Add Graph::capacity(), GraphMap::capacity() 342 - Fix bug in Graph::reverse() 343 - Graph and GraphMap have `quickcheck::Arbitrary` implementations, 344 if optional feature `check` is enabled. 345 346- 0.1.16 347 348 - Add Graph::node_indices(), Graph::edge_indices() 349 - Add Graph::retain_nodes(), Graph::retain_edges() 350 - Add Graph::extend_with_edges(), Graph::from_edges() 351 - Add functions petgraph::graph::{edge_index, node_index}; 352 - Add GraphMap::extend(), GraphMap::from_edges() 353 - Add petgraph::dot::Dot for simple graphviz dot output 354 355- 0.1.15 356 357 - Add Graph::clear_edges() 358 - Add Graph::edge_endpoints() 359 - Add Graph::map() and Graph::filter_map() 360 361- 0.1.14 362 363 - Add new topological order visitor Topo 364 - New graph traits NeighborsDirected, Externals, Revisitable 365 366- 0.1.13 367 368 - Add iterator GraphMap::all_edges 369 370- 0.1.12 371 372 - Fix an algorithm error in scc (#14) 373 374- 0.1.11 375 376 - Update for well-formedness warnings (Rust RFC 1214), adding 377 new lifetime bounds on NeighborIter and Dfs, impact should be minimal. 378 379- 0.1.10 380 381 - Fix bug in WalkEdges::next_neighbor() 382 383- 0.1.9 384 385 - Fix Dfs/Bfs for a rustc bugfix that disallowed them 386 - Add method next_neighbor() to WalkEdges 387 388- 0.1.8 389 390 - Add Graph::walk_edges_directed() 391 - Add Graph::index_twice_mut() 392 393- 0.1.7 394 395 - Add Graph::edges_directed() 396 397- 0.1.6 398 399 - Add Graph::node_weights_mut and Graph::edge_weights_mut 400 401- 0.1.4 402 403 - Add back DfsIter, BfsIter 404 405License 406------- 407 408Dual-licensed to be compatible with the Rust project. 409 410Licensed under the Apache License, Version 2.0 411http://www.apache.org/licenses/LICENSE-2.0 or the MIT license 412http://opensource.org/licenses/MIT, at your 413option. This file may not be copied, modified, or distributed 414except according to those terms. 415 416 417