use crate::{Edge, GraphSpecs, Node};
use adjacent_node::AdjacentNode;
use nohash::{IntMap, IntSet};
use std::collections::{HashMap, HashSet};
use std::sync::Arc;
pub struct Graph<T: PartialOrd + Send + Sync, A: Clone> {
nodes_map: HashMap<T, usize>,
nodes_map_rev: IntMap<usize, Arc<Node<T, A>>>,
nodes_vec: Vec<Arc<Node<T, A>>>,
edges: HashMap<(T, T), Vec<Arc<Edge<T, A>>>>,
edges_map: IntMap<usize, IntMap<usize, Vec<Arc<Edge<T, A>>>>>,
pub specs: GraphSpecs,
successors: HashMap<T, HashSet<T>>,
successors_map: IntMap<usize, IntSet<usize>>,
successors_vec: Vec<Vec<AdjacentNode>>,
predecessors: HashMap<T, HashSet<T>>,
predecessors_map: IntMap<usize, IntSet<usize>>,
predecessors_vec: Vec<Vec<AdjacentNode>>,
}
pub mod adjacent_node;
mod convert;
mod creation;
mod degree;
mod density;
mod ensure;
#[cfg(feature = "adjacency_matrix")]
mod matrix;
mod query;
mod subgraph;
pub use convert::ToUndirectedCollapseEdgeWeightsStrategy;