All Projects → petgraph → Petgraph

petgraph / Petgraph

Licence: other
Graph data structure library for Rust.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Petgraph

Advanced Algorithms
100+ algorithms & data structures generically implemented in C#.
Stars: ✭ 752 (-37.07%)
Mutual labels:  graph-algorithms
Ugfraud
An Unsupervised Graph-based Toolbox for Fraud Detection
Stars: ✭ 38 (-96.82%)
Mutual labels:  graph-algorithms
Competitive Programming
Repository of all my submissions to some competitive programming website (Online Judges), as well as, the implementation of some data structures and algorithms.
Stars: ✭ 53 (-95.56%)
Mutual labels:  graph-algorithms
Mazegenerator
Generate mazes of different shapes and arbitrary sizes using graph theory
Stars: ✭ 905 (-24.27%)
Mutual labels:  graph-algorithms
Pepper Robot Programming
Pepper Programs : Object Detection Real Time without ROS
Stars: ✭ 29 (-97.57%)
Mutual labels:  graph-algorithms
Graph Theory
Graph algorithms implementation
Stars: ✭ 42 (-96.49%)
Mutual labels:  graph-algorithms
Lightgraphs.jl
An optimized graphs package for the Julia programming language
Stars: ✭ 611 (-48.87%)
Mutual labels:  graph-algorithms
Libmaths
A Python library created to assist programmers with complex mathematical functions
Stars: ✭ 72 (-93.97%)
Mutual labels:  graph-algorithms
Cracking The Coding Interview
Solutions for Cracking the Coding Interview - 6th Edition
Stars: ✭ 35 (-97.07%)
Mutual labels:  graph-algorithms
Pydata Networkx
A short tutorial on network analysis using Game of Thrones, US Airports and Python!
Stars: ✭ 50 (-95.82%)
Mutual labels:  graph-algorithms
Fxgraphalgorithmsimulator
Visualizes specific Graph Algorithms like BFS, DFS, MST etc. on interactive user input graphs.
Stars: ✭ 22 (-98.16%)
Mutual labels:  graph-algorithms
Leaderboardx
A tool for building graphs quickly
Stars: ✭ 13 (-98.91%)
Mutual labels:  graph-algorithms
Algorithm Notes
Comprehensive algorithms solution to help engineers prepare their interviews and future study
Stars: ✭ 44 (-96.32%)
Mutual labels:  graph-algorithms
Modal logic
Final Year Masters Project: modal logic solver tableaux
Stars: ✭ 16 (-98.66%)
Mutual labels:  graph-algorithms
Evalne
Source code for EvalNE, a Python library for evaluating Network Embedding methods.
Stars: ✭ 67 (-94.39%)
Mutual labels:  graph-algorithms
Neo4j Graph Algorithms
Efficient Graph Algorithms for Neo4j
Stars: ✭ 713 (-40.33%)
Mutual labels:  graph-algorithms
Learn some algorithm and data structure
从零开始回顾一下最简单最基础的算法与数据结构
Stars: ✭ 38 (-96.82%)
Mutual labels:  graph-algorithms
Sibeliaz
A fast whole-genome aligner based on de Bruijn graphs
Stars: ✭ 76 (-93.64%)
Mutual labels:  graph-algorithms
Igraph
Library for the analysis of networks
Stars: ✭ 1,145 (-4.18%)
Mutual labels:  graph-algorithms
Sentiment Analysis Twitter Microservices Example
A sample application that demonstrates how to build a graph processing platform to analyze sources of emotional influence on Twitter.
Stars: ✭ 45 (-96.23%)
Mutual labels:  graph-algorithms

petgraph

Graph data structure library. Known to support Rust 1.37 and later.

Please read the API documentation here__

__ https://docs.rs/petgraph/

|build_status|_ |crates|_

.. |build_status| image:: https://github.com/petgraph/petgraph/workflows/Continuous%20integration/badge.svg?branch=master .. _build_status: https://github.com/petgraph/petgraph/actions

.. |crates| image:: http://meritbadge.herokuapp.com/petgraph .. _crates: https://crates.io/crates/petgraph

Crate feature flags:

  • graphmap (default) enable GraphMap.
  • stable_graph (default) enable StableGraph.
  • matrix_graph (default) enable MatrixGraph.
  • serde-1 (optional) enable serialization for Graph, StableGraph using serde 1.0. Requires Rust version as required by serde.

Recent Changes

  • 0.5.1

    • Implement Default for traversals.
    • Export EdgesConnecting publicly.
    • Implement is_bipartite_graph.
    • Add FilterNode implementation for FixedBitSet and HashSet.
    • Implement node_weights_mut and edge_weights_mut for StableGraph.
    • Add configurable functions for adding attributes to dotfile features.
  • 0.5.0

    • Breaking changes:

      • The iterative DFS implementation, Dfs, now marks nodes visited when they are pushed onto the stack, not when they're popped off. This may require changes to callers that use Dfs::from_parts or manipulate its internals.
      • The IntoEdgesDirected trait now has a stricter contract for undirected graphs. Custom implementations of this trait may have to be updated. See the trait documentation__ for more.
    • Other changes:

      • Upgrade to Rust 2018 edition
      • Fix clippy warnings and unify code formatting
      • Improved and enhanced documentation
      • Update dependencies including modern quickcheck
      • Numerous bugfixes and refactorings
      • Added MatrixGraph implementation

__ https://docs.rs/petgraph/0.5/petgraph/visit/trait.IntoEdgesDirected.html

  • 0.4.13

    • Fix clippy warnings by @jonasbb
    • Add docs for Csr by @ksadorf
    • Fix conflict with new stable method find_map in new Rust
  • 0.4.12

    • Newtype Time now also implements Hash
    • Documentation updates for Frozen.
  • 0.4.11

    • Fix petgraph::graph::NodeReferences to be publicly visible
    • Small doc typo and code style files by @shepmaster and @waywardmonkeys
    • Fix a future compat warning with pointer casts
  • 0.4.10

    • Add graph trait IntoEdgesDirected
    • Update dependencies
  • 0.4.9

    • Fix bellman_ford to work correctly with undirected graphs (#152) by @carrutstick
    • Performance improvements for Graph, Stablegraph's .map().
  • 0.4.8

    • StableGraph learned new methods nearing parity with Graph. Note that the StableGraph methods preserve index stability even in the batch removal methods like filter_map and retain_edges.

      • Added .filter_map(), which maps associated node and edge data
      • Added .retain_edges(), .edge_indices() and .clear_edges()
    • Existing Graph iterators gained some trait impls:

      • .node_indices(), .edge_indices() are ExactSizeIterator
      • .node_references() is now DoubleEndedIterator + ExactSizeIterator.
      • .edge_references() is now ExactSizeIterator.
    • Implemented From<StableGraph> for Graph.

  • 0.4.7

    • New algorithm by @jmcomets: A* search algorithm in petgraph::algo::astar

    • One StableGraph bug fix whose patch was supposed to be in the previous version:

      • add_edge(m, n, _) now properly always panics if nodes m or n don't exist in the graph.
  • 0.4.6

    • New optional crate feature: "serde-1", which enables serialization for Graph and StableGraph using serde.

    • Add methods new, add_node to Csr by @jmcomets

    • Add indexing with [] by node index, NodeCompactIndexable for Csr by @jmcomets

    • Amend doc for GraphMap::into_graph (it has a case where it can panic)

    • Add implementation of From<Graph> for StableGraph.

    • Add implementation of IntoNodeReferences for &StableGraph.

    • Add method StableGraph::map that maps associated data

    • Add method StableGraph::find_edge_undirected

    • Many StableGraph bug fixes involving node vacancies (holes left by deletions):

      • neighbors(n) and similar neighbor and edge iterator methods now handle n being a vacancy properly. (This produces an empty iterator.)
      • find_edge(m, n) now handles m being a vacancy correctly too
      • StableGraph::node_bound was fixed for empty graphs and returns 0
    • Add implementation of DoubleEndedIterator to Graph, StableGraph's edge references iterators.

    • Debug output for Graph now shows node and edge count. Graph, StableGraph show nothing for the edges list if it's empty (no label).

    • Arbitrary implementation for StableGraph now can produce graphs with vacancies (used by quickcheck)

  • 0.4.5

    • Fix max ambiguity error with current rust nightly by @daboross (#153)
  • 0.4.4

    • Add GraphMap::all_edges_mut() iterator by @Binero
    • Add StableGraph::retain_nodes by @Rupsbant
    • Add StableGraph::index_twice_mut by @christolliday
  • 0.4.3

    • Add crate categories
  • 0.4.2

    • Move the visit.rs file due to changed rules for a module’s directory ownership in Rust, resolving a future compat warning.
    • The error types Cycle, NegativeCycle now implement PartialEq.
  • 0.4.1

    • Add new algorithm simple_fast for computing dominators in a control-flow graph.
  • 0.4.0

    • Breaking changes in Graph:

      • Graph::edges and the other edges methods now return an iterator of edge references
    • Other breaking changes:

      • toposort now returns an error if the graph had a cycle.
      • is_cyclic_directed no longer takes a dfs space argument. It is now recursive.
      • scc was renamed to kosaraju_scc.
      • min_spanning_tree now returns an iterator that needs to be made into a specific graph type deliberately.
      • dijkstra now uses the IntoEdges trait.
      • NodeIndexable changed its method signatures.
      • IntoExternals was removed, and many other smaller adjustments in graph traits. NodeId must now implement PartialEq, for example.
      • DfsIter, BfsIter were removed in favour of a more general approach with the Walker trait and its iterator conversion.
    • New features:

      • New graph traits, for example IntoEdges which returns an iterator of edge references. Everything implements the graph traits much more consistently.
      • Traits for associated data access and building graphs: DataMap, Build, Create, FromElements.
      • Graph adaptors: EdgeFiltered. Filtered was renamed to NodeFiltered.
      • New algorithms: bellman-ford
      • New graph: compressed sparse row (Csr).
      • GraphMap implements NodeIndexable.
      • Dot was generalized
  • 0.3.2

    • Add depth_first_search, a recursive dfs visitor that emits discovery, finishing and edge classification events.
    • Add graph adaptor Filtered.
    • impl Debug, NodeIndexable for Reversed.
  • 0.3.1

    • Add .edges(), .edges_directed() to StableGraph. Note that these differ from Graph, because this is the signature they will all use in the future.
    • Add .update_edge() to StableGraph.
    • Add reexports of common items in stable_graph module (for example NodeIndex).
    • Minor performance improvements to graph iteration
    • Improved docs for visit module.
  • 0.3.0

    • Overhaul all graph visitor traits so that they use the IntoIterator style. This makes them composable.

      • Multiple graph algorithms use new visitor traits.
      • Help is welcome to port more algorithms (and create new graph traits in the process)!
    • GraphMap can now have directed edges. GraphMap::new is now generic in the edge type. DiGraphMap and UnGraphMap are new type aliases.

    • Add type aliases DiGraph, UnGraph, StableDiGraph, StableUnGraph

    • GraphMap is based on the indexmap crate. Deterministic iteration order, faster iteration, no side tables needed to convert to Graph.

    • Improved docs for a lot of types and functions.

    • Add graph visitor DfsPostOrder

    • Dfs gained new methods from_parts and reset.

    • New algo has_path_connecting.

    • New algo tarjan_scc, a second scc implementation.

    • Document traversal order in Dfs, DfsPostOrder, scc, tarjan_scc.

    • Optional graph visitor workspace reuse in has_path_connecting, is_cyclic_directed, toposort.

    • Improved Debug formatting for Graph, StableGraph.

    • Add a prelude module

    • GraphMap now has a method .into_graph() that makes a Graph.

    • Graph::retain_nodes, retain_edges now expose the self graph only as wrapped in Frozen, so that weights can be mutated but the graph structure not.

    • Enable StableGraph by default

    • Add method Graph::contains_edge.

    • Renamed EdgeDirectionDirection.

    • Remove SubTopo.

    • Require Rust 1.12 or later

  • 0.2.10

    • Fix compilation with rust nightly
  • 0.2.9

    • Fix a bug in SubTopo (#81)
  • 0.2.8

    • Add Graph methods reserve_nodes, reserve_edges, reserve_exact_nodes, reserve_exact_edges, shrink_to_fit_edges, shrink_to_fit_nodes, shrink_to_fit
  • 0.2.7

    • Update URLs
  • 0.2.6

    • Fix warning about type parameter defaults (no functional change)
  • 0.2.5

    • Add SubTopo, a topo walker for the subgraph reachable from a starting point.
    • Add condensation, which forms the graph of a graph’s strongly connected components.
  • 0.2.4

    • Fix an algorithm error in scc (#61). This time we have a test that crosschecks the result of the algorithm vs another implementation, for greater confidence in its correctness.
  • 0.2.3

    • Require Rust 1.6: Due to changes in how rust uses type parameter defaults.
    • Implement Graph::clone_from.
  • 0.2.2

    • Require Rust 1.5
    • Dot passes on the alternate flag to node and edge label formatting
    • Add Clone impl for some iterators
    • Document edge iteration order for Graph::neighbors
    • Add experimental feature StableGraph, using feature flag stable_graph
  • 0.2.1

    • Add algorithm is_isomorphic_matching
  • 0.2.0

    • New Features

      • Add Graph::neighbors().detach() to step edges without borrowing. This is more general than, and replaces now deprecated walk_edges_directed. (#39)
      • Implement Default for Graph, GraphMap
      • Add method EdgeDirection::opposite()
    • Breaking changes

      • Graph::neighbors() for undirected graphs and Graph::neighbors_undirected for any graph now visit self loop edges once, not twice. (#31)
      • Renamed Graph::without_edges to Graph::externals
      • Removed Graph::edges_both
      • GraphMap::add_edge now returns Option<E>
      • Element type of GraphMap<N, E>::all_edges() changed to (N, N, &E)
    • Minor breaking changes

      • IntoWeightedEdge changed a type parameter to associated type
      • IndexType is now an unsafe trait
      • Removed IndexType::{one, zero}, use method new instead.
      • Removed MinScored
      • Ptr moved to the graphmap module.
      • Directed, Undirected are now void enums.
      • Fields of graphmap::Edges are now private (#19)
  • 0.1.18

    • Fix bug on calling GraphMap::add_edge with existing edge (#35)
  • 0.1.17

    • Add Graph::capacity(), GraphMap::capacity()
    • Fix bug in Graph::reverse()
    • Graph and GraphMap have quickcheck::Arbitrary implementations, if optional feature check is enabled.
  • 0.1.16

    • Add Graph::node_indices(), Graph::edge_indices()
    • Add Graph::retain_nodes(), Graph::retain_edges()
    • Add Graph::extend_with_edges(), Graph::from_edges()
    • Add functions petgraph::graph::{edge_index, node_index};
    • Add GraphMap::extend(), GraphMap::from_edges()
    • Add petgraph::dot::Dot for simple graphviz dot output
  • 0.1.15

    • Add Graph::clear_edges()
    • Add Graph::edge_endpoints()
    • Add Graph::map() and Graph::filter_map()
  • 0.1.14

    • Add new topological order visitor Topo
    • New graph traits NeighborsDirected, Externals, Revisitable
  • 0.1.13

    • Add iterator GraphMap::all_edges
  • 0.1.12

    • Fix an algorithm error in scc (#14)
  • 0.1.11

    • Update for well-formedness warnings (Rust RFC 1214), adding new lifetime bounds on NeighborIter and Dfs, impact should be minimal.
  • 0.1.10

    • Fix bug in WalkEdges::next_neighbor()
  • 0.1.9

    • Fix Dfs/Bfs for a rustc bugfix that disallowed them
    • Add method next_neighbor() to WalkEdges
  • 0.1.8

    • Add Graph::walk_edges_directed()
    • Add Graph::index_twice_mut()
  • 0.1.7

    • Add Graph::edges_directed()
  • 0.1.6

    • Add Graph::node_weights_mut and Graph::edge_weights_mut
  • 0.1.4

    • Add back DfsIter, BfsIter

License

Dual-licensed to be compatible with the Rust project.

Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].