pub struct Hypergraph<N, E> { /* private fields */ }Expand description
Generic hypergraph whose nodes carry data of type N and hyperedges carry
metadata of type E.
Node and hyperedge indices are plain usize values assigned at insertion
time (monotonically increasing).
§Example
use scirs2_graph::hypergraph::Hypergraph;
let mut hg: Hypergraph<&str, &str> = Hypergraph::new();
let a = hg.add_node("Alice");
let b = hg.add_node("Bob");
let c = hg.add_node("Carol");
let e = hg.add_hyperedge("team", vec![a, b, c]);
assert_eq!(hg.node_degree(a), 1);
assert_eq!(hg.incident_edges(b), vec![e]);Implementations§
Source§impl<N: Clone, E: Clone> Hypergraph<N, E>
impl<N: Clone, E: Clone> Hypergraph<N, E>
Sourcepub fn add_hyperedge(&mut self, data: E, nodes: Vec<usize>) -> usize
pub fn add_hyperedge(&mut self, data: E, nodes: Vec<usize>) -> usize
Add a hyperedge and return its index.
Duplicate nodes within nodes are silently deduplicated; order is
normalised to sorted. Panics if any node index is out of range (use
[try_add_hyperedge] for the fallible version).
Sourcepub fn try_add_hyperedge(&mut self, data: E, nodes: Vec<usize>) -> Result<usize>
pub fn try_add_hyperedge(&mut self, data: E, nodes: Vec<usize>) -> Result<usize>
Fallible version of [add_hyperedge] that returns an error when a node
index is out of range.
Sourcepub fn incident_edges(&self, node: usize) -> Vec<usize>
pub fn incident_edges(&self, node: usize) -> Vec<usize>
Return the ids of all hyperedges incident to node.
Sourcepub fn node_degree(&self, node: usize) -> usize
pub fn node_degree(&self, node: usize) -> usize
Return the degree (number of incident hyperedges) of a node.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Number of nodes.
Sourcepub fn hyperedge_count(&self) -> usize
pub fn hyperedge_count(&self) -> usize
Number of hyperedges.
Sourcepub fn hyperedge_data(&self, id: usize) -> Option<(&E, &[usize])>
pub fn hyperedge_data(&self, id: usize) -> Option<(&E, &[usize])>
Access hyperedge data and members by index.
Sourcepub fn hyperedge_nodes(&self, id: usize) -> Option<&[usize]>
pub fn hyperedge_nodes(&self, id: usize) -> Option<&[usize]>
Return the member node indices of hyperedge id.
Source§impl<N: Clone + Debug + Hash + Eq + Ord, E: Clone> Hypergraph<N, E>
impl<N: Clone + Debug + Hash + Eq + Ord, E: Clone> Hypergraph<N, E>
Sourcepub fn clique_expansion_indexed(&self) -> Graph<usize, f64>
pub fn clique_expansion_indexed(&self) -> Graph<usize, f64>
Build the clique expansion (2-section) of this hypergraph as a
Graph<usize, f64> where nodes are identified by their index.
Edge weight between u and v accumulates across all hyperedges that
contain both.
Trait Implementations§
Source§impl<N: Clone, E: Clone> Clone for Hypergraph<N, E>
impl<N: Clone, E: Clone> Clone for Hypergraph<N, E>
Source§fn clone(&self) -> Hypergraph<N, E>
fn clone(&self) -> Hypergraph<N, E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<N, E> Freeze for Hypergraph<N, E>
impl<N, E> RefUnwindSafe for Hypergraph<N, E>where
N: RefUnwindSafe,
E: RefUnwindSafe,
impl<N, E> Send for Hypergraph<N, E>
impl<N, E> Sync for Hypergraph<N, E>
impl<N, E> Unpin for Hypergraph<N, E>
impl<N, E> UnsafeUnpin for Hypergraph<N, E>
impl<N, E> UnwindSafe for Hypergraph<N, E>where
N: UnwindSafe,
E: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more