diff options
Diffstat (limited to 'vendor/petgraph-0.6.5/src/lib.rs')
| -rw-r--r-- | vendor/petgraph-0.6.5/src/lib.rs | 291 |
1 files changed, 0 insertions, 291 deletions
diff --git a/vendor/petgraph-0.6.5/src/lib.rs b/vendor/petgraph-0.6.5/src/lib.rs deleted file mode 100644 index c34c4eac..00000000 --- a/vendor/petgraph-0.6.5/src/lib.rs +++ /dev/null @@ -1,291 +0,0 @@ -//! `petgraph` is a graph data structure library. -//! -//! Graphs are collections of nodes, and edges between nodes. `petgraph` -//! provides several [graph types](index.html#graph-types) (each differing in the -//! tradeoffs taken in their internal representation), -//! [algorithms](./algo/index.html#functions) on those graphs, and functionality to -//! [output graphs](./dot/struct.Dot.html) in -//! [`graphviz`](https://www.graphviz.org/) format. Both nodes and edges -//! can have arbitrary associated data, and edges may be either directed or undirected. -//! -//! # Example -//! -//! ```rust -//! use petgraph::graph::{NodeIndex, UnGraph}; -//! use petgraph::algo::{dijkstra, min_spanning_tree}; -//! use petgraph::data::FromElements; -//! use petgraph::dot::{Dot, Config}; -//! -//! // Create an undirected graph with `i32` nodes and edges with `()` associated data. -//! let g = UnGraph::<i32, ()>::from_edges(&[ -//! (1, 2), (2, 3), (3, 4), -//! (1, 4)]); -//! -//! // Find the shortest path from `1` to `4` using `1` as the cost for every edge. -//! let node_map = dijkstra(&g, 1.into(), Some(4.into()), |_| 1); -//! assert_eq!(&1i32, node_map.get(&NodeIndex::new(4)).unwrap()); -//! -//! // Get the minimum spanning tree of the graph as a new graph, and check that -//! // one edge was trimmed. -//! let mst = UnGraph::<_, _>::from_elements(min_spanning_tree(&g)); -//! assert_eq!(g.raw_edges().len() - 1, mst.raw_edges().len()); -//! -//! // Output the tree to `graphviz` `DOT` format -//! println!("{:?}", Dot::with_config(&mst, &[Config::EdgeNoLabel])); -//! // graph { -//! // 0 [label="\"0\""] -//! // 1 [label="\"0\""] -//! // 2 [label="\"0\""] -//! // 3 [label="\"0\""] -//! // 1 -- 2 -//! // 3 -- 4 -//! // 2 -- 3 -//! // } -//! ``` -//! -//! # Graph types -//! -//! * [`Graph`](./graph/struct.Graph.html) - -//! An adjacency list graph with arbitrary associated data. -//! * [`StableGraph`](./stable_graph/struct.StableGraph.html) - -//! Similar to `Graph`, but it keeps indices stable across removals. -//! * [`GraphMap`](./graphmap/struct.GraphMap.html) - -//! An adjacency list graph backed by a hash table. The node identifiers are the keys -//! into the table. -//! * [`MatrixGraph`](./matrix_graph/struct.MatrixGraph.html) - -//! An adjacency matrix graph. -//! * [`CSR`](./csr/struct.Csr.html) - -//! A sparse adjacency matrix graph with arbitrary associated data. -//! -//! ### Generic parameters -//! -//! Each graph type is generic over a handful of parameters. All graphs share 3 common -//! parameters, `N`, `E`, and `Ty`. This is a broad overview of what those are. Each -//! type's documentation will have finer detail on these parameters. -//! -//! `N` & `E` are called *weights* in this implementation, and are associated with -//! nodes and edges respectively. They can generally be of arbitrary type, and don't have to -//! be what you might conventionally consider weight-like. For example, using `&str` for `N` -//! will work. Many algorithms that require costs let you provide a cost function that -//! translates your `N` and `E` weights into costs appropriate to the algorithm. Some graph -//! types and choices do impose bounds on `N` or `E`. -//! [`min_spanning_tree`](./algo/fn.min_spanning_tree.html) for example requires edge weights that -//! implement [`PartialOrd`](https://doc.rust-lang.org/stable/core/cmp/trait.PartialOrd.html). -//! [`GraphMap`](./graphmap/struct.GraphMap.html) requires node weights that can serve as hash -//! map keys, since that graph type does not create standalone node indices. -//! -//! `Ty` controls whether edges are [`Directed`](./enum.Directed.html) or -//! [`Undirected`](./enum.Undirected.html). -//! -//! `Ix` appears on graph types that use indices. It is exposed so you can control -//! the size of node and edge indices, and therefore the memory footprint of your graphs. -//! Allowed values are `u8`, `u16`, `u32`, and `usize`, with `u32` being the default. -//! -//! ### Shorthand types -//! -//! Each graph type vends a few shorthand type definitions that name some specific -//! generic choices. For example, [`DiGraph<_, _>`](./graph/type.DiGraph.html) is shorthand -//! for [`Graph<_, _, Directed>`](graph/struct.Graph.html). -//! [`UnMatrix<_, _>`](./matrix_graph/type.UnMatrix.html) is shorthand for -//! [`MatrixGraph<_, _, Undirected>`](./matrix_graph/struct.MatrixGraph.html). Each graph type's -//! module documentation lists the available shorthand types. -//! -//! # Crate features -//! -//! * **serde-1** - -//! Defaults off. Enables serialization for ``Graph, StableGraph, GraphMap`` using -//! [`serde 1.0`](https://crates.io/crates/serde). May require a more recent version -//! of Rust than petgraph alone. -//! * **graphmap** - -//! Defaults on. Enables [`GraphMap`](./graphmap/struct.GraphMap.html). -//! * **stable_graph** - -//! Defaults on. Enables [`StableGraph`](./stable_graph/struct.StableGraph.html). -//! * **matrix_graph** - -//! Defaults on. Enables [`MatrixGraph`](./matrix_graph/struct.MatrixGraph.html). -//! -#![doc(html_root_url = "https://docs.rs/petgraph/0.4/")] - -extern crate fixedbitset; -#[cfg(feature = "graphmap")] -extern crate indexmap; - -#[cfg(feature = "serde-1")] -extern crate serde; -#[cfg(feature = "serde-1")] -#[macro_use] -extern crate serde_derive; - -#[cfg(all(feature = "serde-1", test))] -extern crate itertools; - -#[doc(no_inline)] -pub use crate::graph::Graph; - -pub use crate::Direction::{Incoming, Outgoing}; - -#[macro_use] -mod macros; -mod scored; - -// these modules define trait-implementing macros -#[macro_use] -pub mod visit; -#[macro_use] -pub mod data; - -pub mod adj; -pub mod algo; -pub mod csr; -pub mod dot; -#[cfg(feature = "generate")] -pub mod generate; -mod graph_impl; -#[cfg(feature = "graphmap")] -pub mod graphmap; -mod iter_format; -mod iter_utils; -#[cfg(feature = "matrix_graph")] -pub mod matrix_graph; -#[cfg(feature = "quickcheck")] -mod quickcheck; -#[cfg(feature = "serde-1")] -mod serde_utils; -mod traits_graph; -pub mod unionfind; -mod util; - -pub mod operator; -pub mod prelude; - -/// `Graph<N, E, Ty, Ix>` is a graph datastructure using an adjacency list representation. -pub mod graph { - pub use crate::graph_impl::{ - edge_index, node_index, DefaultIx, DiGraph, Edge, EdgeIndex, EdgeIndices, EdgeReference, - EdgeReferences, EdgeWeightsMut, Edges, EdgesConnecting, Externals, Frozen, Graph, - GraphIndex, IndexType, Neighbors, Node, NodeIndex, NodeIndices, NodeReferences, - NodeWeightsMut, UnGraph, WalkNeighbors, - }; -} - -#[cfg(feature = "stable_graph")] -pub use crate::graph_impl::stable_graph; - -// Index into the NodeIndex and EdgeIndex arrays -/// Edge direction. -#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, Ord, Eq, Hash)] -#[repr(usize)] -pub enum Direction { - /// An `Outgoing` edge is an outward edge *from* the current node. - Outgoing = 0, - /// An `Incoming` edge is an inbound edge *to* the current node. - Incoming = 1, -} - -impl Direction { - /// Return the opposite `Direction`. - #[inline] - pub fn opposite(self) -> Direction { - match self { - Outgoing => Incoming, - Incoming => Outgoing, - } - } - - /// Return `0` for `Outgoing` and `1` for `Incoming`. - #[inline] - pub fn index(self) -> usize { - (self as usize) & 0x1 - } -} - -#[doc(hidden)] -pub use crate::Direction as EdgeDirection; - -/// Marker type for a directed graph. -#[derive(Clone, Copy, Debug)] -pub enum Directed {} - -/// Marker type for an undirected graph. -#[derive(Clone, Copy, Debug)] -pub enum Undirected {} - -/// A graph's edge type determines whether it has directed edges or not. -pub trait EdgeType { - fn is_directed() -> bool; -} - -impl EdgeType for Directed { - #[inline] - fn is_directed() -> bool { - true - } -} - -impl EdgeType for Undirected { - #[inline] - fn is_directed() -> bool { - false - } -} - -/// Convert an element like `(i, j)` or `(i, j, w)` into -/// a triple of source, target, edge weight. -/// -/// For `Graph::from_edges` and `GraphMap::from_edges`. -pub trait IntoWeightedEdge<E> { - type NodeId; - fn into_weighted_edge(self) -> (Self::NodeId, Self::NodeId, E); -} - -impl<Ix, E> IntoWeightedEdge<E> for (Ix, Ix) -where - E: Default, -{ - type NodeId = Ix; - - fn into_weighted_edge(self) -> (Ix, Ix, E) { - let (s, t) = self; - (s, t, E::default()) - } -} - -impl<Ix, E> IntoWeightedEdge<E> for (Ix, Ix, E) { - type NodeId = Ix; - fn into_weighted_edge(self) -> (Ix, Ix, E) { - self - } -} - -impl<'a, Ix, E> IntoWeightedEdge<E> for (Ix, Ix, &'a E) -where - E: Clone, -{ - type NodeId = Ix; - fn into_weighted_edge(self) -> (Ix, Ix, E) { - let (a, b, c) = self; - (a, b, c.clone()) - } -} - -impl<'a, Ix, E> IntoWeightedEdge<E> for &'a (Ix, Ix) -where - Ix: Copy, - E: Default, -{ - type NodeId = Ix; - fn into_weighted_edge(self) -> (Ix, Ix, E) { - let (s, t) = *self; - (s, t, E::default()) - } -} - -impl<'a, Ix, E> IntoWeightedEdge<E> for &'a (Ix, Ix, E) -where - Ix: Copy, - E: Clone, -{ - type NodeId = Ix; - fn into_weighted_edge(self) -> (Ix, Ix, E) { - self.clone() - } -} |
