mod directed;
pub use directed::*;
mod undirected;
use ndarray::prelude::*;
pub use undirected::*;
use crate::types::{Labels, Set};
pub trait Graph {
fn empty<I, V>(labels: I) -> Self
where
I: IntoIterator<Item = V>,
V: AsRef<str>;
fn complete<I, V>(labels: I) -> Self
where
I: IntoIterator<Item = V>,
V: AsRef<str>;
fn vertices(&self) -> Set<usize>;
fn has_vertex(&self, x: usize) -> bool;
fn edges(&self) -> Set<(usize, usize)>;
fn has_edge(&self, x: usize, y: usize) -> bool;
fn add_edge(&mut self, x: usize, y: usize) -> bool;
fn del_edge(&mut self, x: usize, y: usize) -> bool;
fn from_adjacency_matrix(labels: Labels, adjacency_matrix: Array2<bool>) -> Self;
fn to_adjacency_matrix(&self) -> Array2<bool>;
}